【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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_李小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值