osg.Node是OpenSceneGraph场景图的基本单元,它可以包含几何体、光源、相机、变换等其他节点,同时osg.Node也可以作为一个节点的子节点。
osg.Node拥有以下基本属性:
Name:osg.Node的名字,用于标识。
StateSet:osg.Node的状态属性集,例如平移、旋转、缩放等。
ReferenceCount:osg.Node的引用计数,用于管理内存。
UserDataContainer:osg.Node的用户数据容器,用于存储用户自定义数据。
NodeMask: 一个位掩码,用于指定此节点是否在渲染中显示。
osg.Node还提供以下方法:
// 添加子节点
virtual void addChild(osg::Node* child);
// 删除子节点
virtual void removeChild(osg::Node* child);
// 清空所有子节点
virtual void removeChildren(unsigned int pos = 0, unsigned int numChildrenToRemove = ALL_CHILDREN);
// 获取子节点列表
virtual const NodeList& getChildren() const;
// 从NodeVisitor继承出的方法,用于遍历而不渲染场景图
virtual void traverse(osg::NodeVisitor& nv);
// 更新场景图,进行变换等操作
virtual void update();
osg.Node还提供了如下派生节点:
osg.PagedLOD:用于对大型场景分块加载
osg.TexGenNode:用于纹理坐标变换
osg.Billboard:用于面向视点效果
osg.Switch:用于切换场景
osg.AnimationPathCallback:用于动画效果
osg.Geometry:用于几何体描述
osg.Light:用于光源描述
osg.Camera:用于相机描述
osg.MatrixTransform:用于变换描述
osg::ref_ptr<osg::Node> node = osgDB::readNodeFile("cow.osg");
osg::ref_ptr<osg::MatrixTransform> transform = new osg::MatrixTransform;
transform->addChild(node.get());
transform->setMatrix(osg::Matrix::translate(2.0f, 0.0f, 0.0f));
osg::ref_ptr<osg::Group> root = new osg::Group;
root->addChild(node.get());
root->addChild(transform.get());
osgViewer::Viewer viewer;
viewer.setSceneData(root.get());
viewer.run();
该示例代码创建了一个osg.Node,并通过osg::MatrixTransform对其进行平移变换,然后将其加入osg::Group中,并设置为场景数据。最后利用osgViewer::Viewer进行显示。