zoukankan      html  css  js  c++  java
  • OSG学习:移动/缩放/旋转模型

     移动和缩放以及旋转都是对矩阵进行操作,这些操作如果要叠加直接矩阵相乘就可以了。

    下面的示例代码中,加入了四个bignathan,一个是默认加入在最中间,一个向上移2单位,一个是向下移2单位且缩放0.5倍,另一个是向右4单位,缩放0.5且平躺45度。

    #include<osgDBReadFile>
    #include<osgViewerViewer>
    #include<osgNode>
    #include<osgMatrixTransform>
    
    void main()
    {
            osgViewer::Viewer viewer;
            osg::ref_ptr<osg::Group> root = new osg::Group();
    
            osg::ref_ptr<osg::Node> bignathan = osgDB::readNodeFile("bignathan.osg");
    
            osg::ref_ptr<osg::MatrixTransform> trans = new osg::MatrixTransform;
            trans->setMatrix(osg::Matrix::translate(0, 0, 2));
            trans->addChild(bignathan.get());
    
            osg::ref_ptr<osg::MatrixTransform> scale = new osg::MatrixTransform;
            scale->setMatrix(osg::Matrix::scale(0.5, 0.5, 0.5)*osg::Matrix::translate(0, 0, -2));
            scale->addChild(bignathan.get());
    
            osg::ref_ptr<osg::MatrixTransform> rot = new osg::MatrixTransform;
            rot->setMatrix(osg::Matrix::rotate(osg::DegreesToRadians(45.0), 1, 0, 0)*osg::Matrix::scale(0.5, 0.5, 0.5)*osg::Matrix::translate(4, 0, -2));
            rot->addChild(bignathan.get());
    
            root->addChild(bignathan.get());
            root->addChild(trans.get());
            root->addChild(scale.get());
            root->addChild(rot.get());
    
            viewer.setSceneData(root.get());
            viewer.realize();
            viewer.run();
    }

    结果图:


  • 相关阅读:
    Insertion Sort Gym
    Codeforces Round #524 (Div. 2) C. Masha and two friends 思路
    PTA 数据结构——是否完全二叉搜索树
    Crane UVA
    Unidirectional TSP UVA
    排序二叉树的建立,查询与删除
    The Tower of Babylon UVA
    DAG上的动态规划——嵌套矩阵问题
    Paper Folding UVA
    多图片上传插件
  • 原文地址:https://www.cnblogs.com/huahai/p/7270944.html
Copyright © 2011-2022 走看看