osg--Scene Graph

本文详细介绍了osg中的Scene Graph概念,包括NodeKits、组节点如osg::Group、osg::MatrixTransform及其应用,以及叶子节点如osg::Geode。文章还探讨了父节点管理、自定义Node的实现以及Visitor Design Pattern在osg中的运用,提供了多个示例来解释遍历和节点遍历的重要性。
摘要由CSDN通过智能技术生成

概念

  • NodeKits 不同功能的node集合
  • 组节点
  • 叶子节点
  • 父节点管理
  • 自定义Node
  • visitor design pattern
  • 遍历

组节点

  • osg::Group

在这里插入图片描述

  • osg::Transform子类
    • 绝对几何坐标 setReferenceFrame(osg::Transform::ABSOLUTE_RF);

    • 相对几何坐标 setReferenceFrame(osg::Transform::RELATIVE_RF);

    • osg::MatrixTransform子类

      • getMatrix()
      • setMatrix
        • 参数为osg::Matrix类,不需要智能指针申请
          • osg::Matrix::scale
          • osg::Matrix::translate
          • osg::Matrix::rotate
          • osg::Matrix::inverse
    • osg::PositionAttitudeTransform子类

      • setPosition
        • 参数为osg::Vec3
      • setScale
        • 参数为osg::Vec3
      • setAttitude
        • 参数为osg::Quat quat(xAngle, osg::X_AXIS,yAngle, osg::Y_AXIS,zangle, osg::Z_AXIS); // Angles should be radians!
    • osg使用行坐标,矩阵使用vectorxmatrix,opengl相反

    • 示例

        #include <osg/PositionAttitudeTransform>
        #include <osgDB/ReadFile>
        #include <osgViewer/Viewer>
        
        /*
        int main(int argc, char** argv)
        {
        osg::ref_ptr<osg::Node> model = osgDB::readNodeFile(
        "cessna.osg");
        
        osg::ref_ptr<osg::MatrixTransform> transform1 = new osg::MatrixTransform;
        transform1->setMatrix(osg::Matrix::translate(
        -25.0f, 0.0f, 0.0f));
        transform1->addChild(model.get());
        
        osg::ref_ptr<osg::MatrixTransform> transform2 = new
        osg::MatrixTransform;
        transform2->setMatrix(osg::Matrix::translate(
        25.0f, 0.0f, 0.0f));
        transform2->addChild(model.get());
        
        osg::ref_ptr<osg::Group> root = new osg::Group;
        root->addChild(transform1.get());
        root->addChild(transform2.get());
        
        //osg::viewer
        osgViewer::Viewer viewer;
        viewer.setSceneData(root.get());
        return viewer.run();
        }
        */
        
        int main(int argc, char** argv)
        {
        	osg::ref_ptr<osg::Node> model = osgDB::re
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值