当前位置: 首页 > news >正文

【OSG学习笔记】Day 2: 场景图(Scene Graph)的核心概念

在这里插入图片描述
今天课程分为两部分,第一部分我们学习一下Scene Graph理论知识,第二部分我们熟悉下OSG的源码。

第一部分(Scene Graph)

在OpenSceneGraph中,场景图(Scene Graph)通过树状层级结构高效管理3D对象。

场景图(Scene Graph)层级关系

以下是根节点、组节点和几何节点(Geode)的核心概念及层级关系:

根节点 (osg::Group)
│
└── 变换组节点 (osg::PositionAttitudeTransform)│├── 几何节点1 (osg::Geode) → 包含立方体│└── 子组节点 (osg::Group)│└── 几何节点2 (osg::Geode) → 包含球体

根节点(Root Node)

作用:场景图的顶层入口,所有其他节点均为其子孙节点。
类型:通常是osg::Group或osgViewer::Viewer关联的根节点。
特性

  • 无父节点。
  • 作为场景遍历的起点,渲染时从根节点开始递归处理子节点。

组节点(Group Node)

作用:组织子节点,构建层次结构。支持嵌套,用于组合变换、状态或逻辑分组。
类型:基类为osg::Group,扩展类型包括osg::Transform(变换节点)、osg::Switch(开关节点)、osg::LOD(细节层次节点)等。
特性
通过addChild()方法添加子节点(其他组节点或Geode)。

  • 示例:一个“汽车”组节点可包含“车轮”、“车身”等子组节点,每个子组可进一步细分。

几何节点(Geode)

作用:叶子节点,保存实际几何数据(如顶点、法线、纹理坐标)。
类型:osg::Geode(Geometry Node)。
特性

  • 无子节点,通过addDrawable()添加osg::Drawable对象(如osg::Geometry)。
  • 示例:一个Geode节点可包含立方体或球体的几何数据。

看的是不是云里雾里的,伟大的圣人王阳明说过,要知行合一,所以下面我们通过代码来实践。

代码实例

scene_graph.cpp

#include <osg/Geode>
#include <osg/Group>
#include <osg/ShapeDrawable>
#include <osgViewer/Viewer>
#include <osg/Material>
#include <osg/StateSet>int main()
{// 创建根节点osg::ref_ptr<osg::Group> root = new osg::Group();// 创建第一个组节点(红色方块组)osg::ref_ptr<osg::Group> redGroup = new osg::Group();// 创建第一个几何节点(红色方块)osg::ref_ptr<osg::Geode> geode1 = new osg::Geode();geode1->addDrawable(new osg::ShapeDrawable(new osg::Box(osg::Vec3(-2,0,0), 1.0f)));geode1->getOrCreateStateSet()->setAttribute(new osg::Material());osg::Material* material1 = dynamic_cast<osg::Material*>(geode1->getStateSet()->getAttribute(osg::StateAttribute::MATERIAL));if (material1){material1->setDiffuse(osg::Material::FRONT, osg::Vec4(1,0,0,1)); // 红色}// 创建第二个组节点(蓝色方块组)osg::ref_ptr<osg::Group> blueGroup = new osg::Group();// 创建第二个几何节点(蓝色方块)osg::ref_ptr<osg::Geode> geode2 = new osg::Geode();geode2->addDrawable(new osg::ShapeDrawable(new osg::Box(osg::Vec3(2,0,0), 1.0f)));geode2->getOrCreateStateSet()->setAttribute(new osg::Material());osg::Material* material2 = dynamic_cast<osg::Material*>(geode2->getStateSet()->getAttribute(osg::StateAttribute::MATERIAL));if (material2){material2->setDiffuse(osg::Material::FRONT, osg::Vec4(0,0,1,1)); // 蓝色}// 构建场景图层级关系root->addChild(redGroup);    // 根节点包含红色组root->addChild(blueGroup);   // 根节点包含蓝色组redGroup->addChild(geode1);  // 红色组包含几何体1blueGroup->addChild(geode2); // 蓝色组包含几何体2// 创建查看器并设置场景数据osgViewer::Viewer viewer;viewer.setSceneData(root.get());return viewer.run();
}

代码都有注释,还是很好理解的。

接下来就是编译文件CMakeLists.txt:

cmake_minimum_required(VERSION 3.12)
project(OSG_SceneGraph_Demo)# 设置C++标准
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)# 查找OpenSceneGraph核心组件
find_package(OpenSceneGraph REQUIRED COMPONENTS osg          # 核心库osgDB        # 文件读写osgViewer    # 查看器功能osgGA        # 图形上下文osgUtil      # 工具库
)# 包含头文件路径
include_directories(${OPENSCENEGRAPH_INCLUDE_DIR}
)# 创建可执行文件
add_executable(${PROJECT_NAME} scene_graph.cpp)# 链接OpenSceneGraph库
target_link_libraries(${PROJECT_NAME}${OPENSCENEGRAPH_LIBRARIES}# Windows需要额外链接$<$<PLATFORM_ID:Windows>:OpenThreads>
)# 配置调试模式
if(CMAKE_BUILD_TYPE STREQUAL "Debug")target_compile_definitions(${PROJECT_NAME} PRIVATE DEBUG)message(STATUS "Building in DEBUG mode")
endif()

运行效果

请添加图片描述

第二部分(源码解析)

看完了上面的实例,我们来看下源码的执行。

从上面代码我们可以看到,最后都是要走到view类的run函数。

我们来看下这个函数都干了什么?

我这里下载的是OpenSceneGraph-3.2.3版本。

首先找到源码的Viewer (OsgViewer/osgViewer.cpp)类:

int Viewer::run()
{if (!getCameraManipulator() && getCamera()->getAllowEventFocus()){setCameraManipulator(new osgGA::TrackballManipulator());}setReleaseContextAtEndOfFrameHint(false);return ViewerBase::run();
}

这里实现和简单就是跳转了ViewerBase::run().

继续跟踪分析:

int ViewerBase::run()
{
......while(!done() && (run_frame_count_str==0 || getViewerFrameStamp()->getFrameNumber()<runTillFrameNumber)){.......frame();.......}return 0;
}

最后就执行到了ViewerBase::frame()函数。

进入这个函数我们看下它主要干了啥。

void ViewerBase::frame(double simulationTime)
{if (_done) return;// OSG_NOTICE<<std::endl<<"CompositeViewer::frame()"<<std::endl<<std::endl;if (_firstFrame){viewerInit();if (!isRealized()){realize();}_firstFrame = false;}advance(simulationTime);eventTraversal();updateTraversal();renderingTraversals();
}

我们一个一个来分析:

第一步:初始化
    if (_firstFrame){viewerInit();if (!isRealized()){realize();}_firstFrame = false;}

viewerInit(): 初始化相机、场景等核心组件。

realize(): 创建原生窗口并绑定 OpenGL 上下文(若未就绪)。

如果这是仿真系统启动后的第一帧,则执行viewerInit();此时如果还没有执行realize()函数,则执行它。

第二步:推进场景状态
    advance(simulationTime);

作用:调用场景中所有节点的 advance() 方法。
参数:simulationTime 通常表示逻辑时间(用于动画/物理模拟)。

第三步:事件处理
eventTraversal();

从窗口系统获取输入事件(键盘、鼠标等)。
通过 osgGA::EventQueue 分发事件。
触发事件处理器(osgGA::EventHandler)的回调。

第四步:场景更新
updateTraversal();

调用所有节点的 update() 回调。
更新场景图状态(位置变化、LOD切换等)。
执行 osg::NodeCallback 自定义更新逻辑。

第五步: 渲染遍历
renderingTraversals();

核心步骤:

裁剪(Cull):确定可见对象,生成渲染列表。
绘制(Draw):提交 OpenGL 命令到 GPU。
交换缓冲区:显示渲染结果(swapBuffers())。

嗯~,今天的学习需要消化消化,下课,明天见。_

参考文献

《最长的一帧》王锐(array)

在这里插入图片描述

相关文章:

【OSG学习笔记】Day 2: 场景图(Scene Graph)的核心概念

今天课程分为两部分&#xff0c;第一部分我们学习一下Scene Graph理论知识&#xff0c;第二部分我们熟悉下OSG的源码。 第一部分&#xff08;Scene Graph&#xff09; 在OpenSceneGraph中&#xff0c;场景图&#xff08;Scene Graph&#xff09;通过树状层级结构高效管理3D对…...

虚幻5的C++调试踩坑

本地调试VS附加调试 踩坑1 预编译版本的UE5没有符号文件&#xff0c;无法调试源码 官方代码调试所需要的符号文件bdp需要下载导入。我安装的5.5.4是预编译版本&#xff0c;并非ue5源码。所以不含bdp文件。需要调试官方代码则需要通过EPIC中下载安装。右键UE版本&#xff0c;打…...

【软件测试】自动化测试框架Pytest + Selenium的使用

Pytest Selenium 是一种常见的自动化测试框架组合&#xff0c;用于编写和执行 Web 应用程序的自动化测试。Pytest 是一个强大的 Python 测试框架&#xff0c;而 Selenium 是一个用于浏览器自动化的工具&#xff0c;二者结合使用可以高效地进行 Web 应用的功能测试、UI 测试等。…...

蓝桥杯补题

方法技巧&#xff1a; 1.进行循环暴力骗分&#xff0c;然后每一层的初始进行判断&#xff0c;如果已经不满足题意了&#xff0c;那么久直接continue&#xff0c;后面的循环就不用浪费时间了。我们可以把题目所给的等式&#xff0c;比如说有四个未知量&#xff0c;那么我们可以用…...

2025年港口危货储存单位主要安全管理人员备考练习题

港口危货储存单位主要安全管理人员备考练习题&#xff1a; 单选题 1、依据《安全生产法》&#xff0c;危险物品的生产、储存单位的安全生产管理人员的任免&#xff0c;应当告知&#xff08; &#xff09;。 A. 主管的负有安全生产监督管理职责的部门 B. 当地人民政府 C. 行…...

openEuler欧拉系统配置local的yum源

1.下载iso openEuler | 开源社区 | openEuler社区官网 2.上传openEuler镜像文件至服务器&#xff08;例如上传至/home目录&#xff09; 3.创建挂载目录 #mkdir -p /mount/iso 4.镜像挂载 #mount -o loop /home/openEuler-22.03-LTS-x86_64-dvd.iso&#xff08;镜像上传目…...

AI比人脑更强,因为被植入思维模型【52】福格行为模型

giszz的理解&#xff1a;重要公式&#xff0c;是BMAT&#xff0c;行为动机能力触发点。也许是乘以。这个挺深刻的&#xff0c;在产品设计中&#xff0c;界面交互&#xff0c;都可以用到这样的思维模型。 一、定义 福格行为模型&#xff08;Fogg Behavior Model&#xff09;是由…...

DocLayout-YOLO:通过多样化合成数据与全局-局部感知实现文档布局分析突破

论文地址:https://arxiv.org/pdf/2410.12628 目录 一、论文概览:当YOLO遇见文档分析 二、创新点解析:两大核心技术 创新点1:Mesh-candidate BestFit合成算法 创新点2:全局-局部可控感知模块(GL-CRM) 三、实验结果:全面超越SOTA 主要指标对比(D4LA数据集) 消融…...

栈(算法)

在 C 里&#xff0c;栈是一种遵循后进先出&#xff08;LIFO&#xff09;原则的数据结构。下面从多个方面为你介绍 C 栈&#xff1a; 1. 使用标准库中的std::stack C 标准库提供了std::stack容器适配器&#xff0c;能方便地实现栈的功能。以下是简单示例&#xff1a; cpp #in…...

leetcode每日一题:子数组异或查询

引言 今天的每日一题原题是3375. 使数组的值全部为 K 的最少操作次数&#xff0c;比较水&#xff0c;可以分成2种情况&#xff1a; 存在比k更小的数&#xff0c;由于每次操作只能使得部分数变小&#xff0c;但是不能把任何数变大&#xff0c;所以肯定无法达成 不存在比k更小的…...

openEuler-22.03-LTS-SP3-x86_64 离线编译安装 nginx 1.20.1

openEuler-22.03-LTS-SP3-x86_64 离线编译安装 nginx 1.20.1 一、概述二、安装依赖1、安装 pcre、pcre-devel2、安装 zlib、zlib-devel3、安装 make、gcc、gcc-c3、编译 openssl5、安装 libtool6、编译 pcre-8.45 三、下载编译 nginx四、运行 nginx 一、概述 本文档适用于无法…...

使用Alamofire下载网站首页内容

用Alamofire库写一个下载网站首页内容的Swift代码。首先&#xff0c;我需要确认用户的需求。他们可能是在开发一个iOS应用&#xff0c;需要从某个网站获取首页的数据&#xff0c;比如HTML内容或者API数据。Alamofire是一个常用的Swift网络库&#xff0c;基于URLSession&#xf…...

服务器DNS失效

服务器异常 xx.t.RequestException: java.net.UnknownHostException: test.ac.xxxx.cn现象分析 本地测试正常&#xff0c;说明域名本身无问题。服务器 DNS 解析异常&#xff0c;导致 UnknownHostException。**服务器可正常解析 ****baidu.com**&#xff0c;说明网络正常&#…...

#无类域间路由(快速复习版)

判断两个无类&#xff08;CIDR&#xff09;地址是否属于同一个子网 &#x1f3af; 问题本质&#xff1a; 判断两个 IP 地址是否属于同一个子网&#xff0c;其实就是 对比它们的“网络地址”是否相同。 &#x1f50d; 原理步骤&#xff08;通用方法&#xff09; 我们按步骤来判…...

【Linux】jumpserver开源堡垒机部署

JumpServer 安装部署指南 本文档详细记录了 JumpServer 安装部署的过程、核心脚本功能说明以及后续管理使用提示&#xff0c;方便运维人员快速查阅和二次安装。 1. 前提条件 操作系统要求&#xff1a; 仅支持 Linux 系统&#xff0c;不支持 Darwin&#xff08;macOS&#xff0…...

Memcached缓存系统:从部署到实战应用指南

#作者&#xff1a;猎人 文章目录 一、安装libevent二、安装配置memcached三、安装Memcache的PHP扩展四、使用libmemcached的客户端工具五、Nginx整合memcached:六、php将会话保存至memcached Memcached是一款开源、高性能、分布式内存对象缓存系统&#xff0c;可应用各种需要缓…...

【rdma tx data flow问题】

rdma data flow问题 1 SQ_doorbell如何产生&#xff1f; --RDMA网卡doorbell寄存器触发&#xff1b;2 CPU如何访问网卡的Doorbell寄存器&#xff1f;3 为什么需要roce_qid_convert把local_qid转换成global_qid;4.WQE的format是什么&#xff1f;5.WQE在网卡硬件中的处理流程&…...

Vue 框架组件间通信方式

组件间通信方式 不管是 vue2 还是 vue3&#xff0c;组件通信方式很重要&#xff0c;以下是常见的几种通信方式&#xff1a; props&#xff1a;可以实现父子组件、子父组件、甚至兄弟组件通信自定义事件&#xff1a;可以实现子父组件通信全局事件总线 $bus&#xff1a;可以实现…...

React 第三十节 使用 useState 和 useEffect Hook实现购物车

不使用 redux 实现 购物车案例 使用 React 自带的 useState 和 useEffect Hook 即可实现购物车 export default function ShoppingCar() {// 要结算的商品 总数 以及总价const [totalNum, setTotalNum] useState(0)const [totalPerice, setTotalPerice] useState(0)// 商品…...

卷积神经网络CNN

目录 一、图像基础知识 图像基本概念 图像的加载 二、CNN概述 CNN概述 三、卷积层 卷积计算 Padding Stride 多通道卷积计算 PyTorch卷积层API 四、池化层 池化层计算 Stride Padding 多通道池化层计算 PyTorch 池化 API 五、图像分类案例 CIFAR10 数据集 …...

【大数据生态】Hive的metadata服务未开启

解决办法 进入到Hive的bin目录下,键入命令: #启动元服务 [atguiguhadoop102 bin]$ pwd /opt/module/hive-3.1.2/bin [atguiguhadoop102 bin]$ ./hive --service metastore & #启动hive [atguiguhadoop102 hive-3.1.2]$ pwd /opt/module/hive-3.1.2 [atguiguhadoop102 hiv…...

【RabbitMQ】死信队列

1.概述 死信&#xff0c;顾名思义就是无法被消费的消息&#xff0c;也就是没有被传到消费者的消息&#xff0c;或者即使传到了也没有被消费。当然有死信就有死信队列。死信队列就是用来存储死信的。 它的应用场景就是保证订单业务的消息数据不丢失&#xff0c;当消息消费发 生…...

区间 dp 系列 题解

1.洛谷 P4342 IOI1998 Polygon 我的博客 2.洛谷 P4290 HAOI2008 玩具取名 题意 某人有一套玩具&#xff0c;并想法给玩具命名。首先他选择 W, I, N, G 四个字母中的任意一个字母作为玩具的基本名字。然后他会根据自己的喜好&#xff0c;将名字中任意一个字母用 W, I, N, G …...

Typora使用笔记

文章目录 主题自动编号字体设置两端对齐Step1Step 2 代码块显示行号设置快捷键参考文献 主题自动编号 typora-theme-auto-numbering 字体设置两端对齐 Step1 切记从typora的偏好设置中打开主题所在的文件夹&#xff0c;并修改对应的css文件。&#xff08;以 github.css 为例…...

k8s部署grafana

先决条件 这里部署过程的前提是已经部署好storageclass,所以pv会根据pvc自动创建. 详情参考:k8s-StoargClass的使用-基于nfs_a volume that contains injected data from multiple-CSDN博客 直接开始: 部署pvc [rootmodule /zpf/grafana]$cat pvc.yml apiVersion: v1 kind…...

第三章:SQL 高级功能与性能优化

1. 窗口函数&#xff08;Window Functions&#xff09;​​ 用于在结果集的“窗口”&#xff08;指定行范围&#xff09;内执行计算&#xff0c;保留原数据行的同时生成聚合或排序结果。 ​​1.1 核心语法​​ SELECT column1,column2,[窗口函数] OVER (PARTITION BY 分组列…...

[ACM_3] n组数据 | getchar() | getline(cin,s)

目录 14. 第⼀⾏是⼀个整数n&#xff0c;表示⼀共有n组测试数据, 之后输⼊n⾏ 字符串 15. 第⼀⾏是⼀个整数n&#xff0c;然后是n组数据&#xff0c;每组数据2⾏&#xff0c;每⾏ 为⼀个字符串&#xff0c;为每组数据输出⼀个字符串&#xff0c;每组输出占⼀⾏ 16. 多组测试…...

富士相机照片 RAF 格式如何快速批量转为 JPG 格式教程

富士&#xff08;Fujifilm&#xff09;相机拍摄的 RAW 格式文件&#xff08;RAF&#xff09;因其高质量和丰富的图像信息而受到摄影师的喜爱。然而&#xff0c;RAF 文件通常体积较大且不易于分享或直接使用。为了方便处理&#xff0c;许多人选择将其转换为更通用的 JPG 格式。在…...

[特殊字符]【高并发实战】Java Socket + 线程池实现高性能文件上传服务器(附完整源码)[特殊字符]

大家好&#xff01;今天给大家分享一个 Java Socket 线程池 实现的高性能文件上传服务器&#xff0c;支持 多客户端并发上传&#xff0c;代码可直接运行&#xff0c;适合 面试、项目实战、性能优化 学习&#xff01; &#x1f4cc; 本文亮点&#xff1a; ✅ 完整可运行代码&a…...

2025 年天津消防设施操作员考试攻略:深挖地区特色考点​

天津作为重要的港口城市与工业基地&#xff0c;消防安全形势复杂多样&#xff0c;其消防设施操作员考试也带有鲜明的地区特色。​ 地区特色考点解析&#xff1a;天津化工产业发达&#xff0c;涉及众多危化品场所。因此&#xff0c;危化品储存场所的消防设施配置与应急处置成为…...

chrome extension开发框架WXT之Browser.runtime

以下是对 Browser.runtime API 中主要方法的参数、返回值、作用及运用场景的详细解释: 1. 连接与通信方法 connect(connectInfo?: ConnectInfo) / connect(extensionId: string, connectInfo?: ConnectInfo) 参数: extensionId(可选):目标扩展的 ID,未指定时默认连接当…...

dav_1_MySQL数据库排查cpu消耗高的sql

CPU消耗高sql定位 以下从2个维度进行分析&#xff0c;一个是当前cpu高占用排查&#xff0c;一个是历史sql占用高排查 一.当前cpu占用高排查 1 从os资源消耗逐步到mysql查询 1.1 输入top 然后按大P 使之进程按照消耗cpu排序 比如3889为mysql进程ID&#xff0c;接下来再用它查…...

数据结构刷题之贪心算法

贪心算法&#xff08;Greedy Algorithm&#xff09; 是一种在每个步骤中都选择当前最优解的算法设计策略。它通常用于解决优化问题&#xff0c;例如最小化成本或最大化收益。贪心算法的核心思想是&#xff1a;在每一步选择中&#xff0c;都做出局部最优的选择&#xff0c;希望…...

每日一题(小白)暴力娱乐篇23

由题意得知给我们一串数字&#xff0c;我们每次交换两位&#xff0c;最少交换多少次成功得到有顺序的数组。我们以平常的思维去思考&#xff0c;加入给你一串数字获得最少的交换次数&#xff0c;意味着你的交换后续基本不会变&#xff0c;比如说2 1 3 5 4 中1与2交换后不变&…...

回归预测 | Matlab实现RIME-CNN-GRU-Attention霜冰优化卷积门控循环单元注意力机制多变量回归预测

回归预测 | Matlab实现RIME-CNN-GRU-Attention霜冰优化卷积门控循环单元注意力机制多变量回归预测 目录 回归预测 | Matlab实现RIME-CNN-GRU-Attention霜冰优化卷积门控循环单元注意力机制多变量回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matlab实现RIME…...

第1章 对大型语言模型的介绍

人类正处在一个关键转折点。自2012年起&#xff0c;基于深度神经网络的人工智能系统研发进入快速通道&#xff0c;将这一技术推向了新高度&#xff1a;至2019年底&#xff0c;首个能够撰写与人类文章真假难辨的软件系统问世&#xff0c;这个名为GPT-2&#xff08;生成型预训练变…...

PGA 简介

PGA&#xff08;Programmable Gain Amplifier&#xff0c;可编程增益放大器&#xff09;是一种可以通过外部控制信号改变增益大小的放大器&#xff0c;常用于需要灵活调节信号放大倍数的应用中&#xff0c;比如在模拟信号采集、数据转换&#xff08;如 ADC 之前&#xff09;、传…...

2025年CCF-C NCA:导航变量多目标粒子群算法NMOPSO,深度解析+性能实测

目录 1.摘要2.运动学模型和约束3.路径规划目标函数3.多目标粒子群算法4.结果展示5.参考文献6.代码获取 1.摘要 路径规划是无人机&#xff08;UAV&#xff09;任务执行的核心&#xff0c;因为它决定了无人机完成任务所需的飞行路径。为了解决这一问题&#xff0c;本文提出了一种…...

FFMpeg音视频解码实战

音频解码 一、初始化阶段 avformat_open_input 打开输入媒体文件。avformat_find_stream_info 读取媒体流信息&#xff0c;查找音频流。avcodec_find_decoder 查找对应的解码器&#xff08;如 AAC、MP3 解码器&#xff09;。avcodec_alloc_context3 分配解码器上下文。avcodec…...

day25学习Pandas库

文章目录 三、Pandas库4.函数计算7.合并8.随机抽样9.空值处理9.1检测空值9.2填充空值9.3删除空值行/列 5.读取CSV文件5.1 to_csv()5.2 read_csv() 6.绘图 三、Pandas库 4.函数计算 7.合并 merge 函数用于将两个 DataFrame 对象根据一个或多个键进行合并 函数&#xff1a; …...

去除Mysql表中的空格、回车、换行符和特殊字符

系列文章目录 文章目录 系列文章目录前言一、示例1.sql层面2.java层面 前言 一、示例 1.sql层面 参考 ## 例子1 ## CHAR(10) 表示换行符 ## CHAR(13) 表示回车UPDATE 表名 SET 列名 REPLACE(REPLACE(列名, CHAR(10), ), CHAR(13), )## 例子2 ## 删除字段中的空格、换行符、…...

以普通用户身份启动pure-ftpd服务端

Pureftp的优点包括 : 高性能&#xff0c;适用于大容量数据传输。安全性强&#xff0c;通过SSL/TLS加密和身份验证机制保证文件传输安全。易用性高&#xff0c;具有直观的用户界面。灵活性强&#xff0c;支持多种文件存储方式。没有漏洞&#xff0c;便于维护 基于Centos 9的pu…...

国内下载不了镜像,可以用国外机器下载完成,打成tar文件,在国内机器上重新加载

可以在 已经拉取过镜像的机器上打包&#xff08;导出&#xff09;镜像文件&#xff0c;然后 拷贝到另一台机器上导入使用。这是离线部署 Docker 镜像的常用方法&#xff0c;非常适合网络受限的环境。 &#x1f6e0;️ 步骤如下&#xff1a; ✅ 1. 在已有镜像的机器上打包镜像 …...

【Java】Java 中不同类型的类详解

目录 Java 中不同类型的类详解一、基础类类型1. 普通类&#xff08;Concrete Class&#xff09;2. 抽象类&#xff08;Abstract Class&#xff09;3. 接口&#xff08;Interface&#xff09;4. 枚举类&#xff08;Enum Class&#xff09; 二、嵌套类与特殊类5. 内部类&#xff…...

Cadence学习笔记之---热风焊盘制作

目录 01 | 前 言 02 | 环境描述 03 | 热风焊盘 04 | 规则热风焊盘制作 05 | 不规则热风焊盘制作 06 | 总 结 01 | 前 言 在上一篇Cadence小记中讲述了如何制作贴片(SMD)焊盘、通孔焊盘、以及过孔&#xff1b;本篇关于Cadence的小记主要讲如何制作热风焊盘。 上篇小记&a…...

518. Coin Change II

这是完全背包问题。 由于求的是组合数&#xff0c;所以外层循环只能是对硬币遍历&#xff0c;内层循环只能是对总金额的遍历。 另外&#xff0c;虽然题目数据保证结果符合 32 位带符号整数。但是第28个测试用例&#xff0c;dp[j]dp[j-conis[i]]中间结果会整数溢出&#xff0c…...

GPIO子系统与Pinctrl子系统的交互

我们前面呢&#xff0c;已经讲过GPIO子系统的数据结构以及他的设备树信息是怎么转换成我们的C代码存储在结构体里面了&#xff0c;我们知道&#xff0c;如果想去使用一个GPIO&#xff0c;避免不了得把这个引脚复用成GPIO功能&#xff0c;那么就避不开Pinctrl子系统&#xff0c;…...

DeepSeek实用操作及行业应用系列2

DeepSeek的本地化部署与AI通识教育之未来 DeepSeek之火&#xff0c;可以燎原 面向审计行业DeepSeek大模型操作指南v1.0 DeepSeek提示词设计、幻觉避免与应用&#xff08;大数据百家讲坛&#xff09; DeepSeek 搞钱教程&#xff08;0基础入门&#xff09; DeepSeek基础知识…...

面向数据库场景的大模型交互微调数据集

关键要点 研究表明&#xff0c;面向数据库场景的大模型交互微调数据集通常包括数据库模式、自然语言查询和对应的SQL查询。证据倾向于认为&#xff0c;数据集应以JSON格式组织&#xff0c;覆盖多种查询类型&#xff0c;并确保高质量和多样性。对于自定义数据库&#xff0c;建议…...

解锁ChatGPT-4o文生图潜力:精选提示词收集整理更新中

示例一&#xff1a;按元素和描述要求生成图片 示例二&#xff1a;“吉卜力”风格 示例三&#xff1a;3D Q版风格 示例四&#xff1a;生成指定布局和主题图片 具体的提示词参考&#xff0c;陆续更新中&#xff1a;https://blog.luler.top/d/25...