第四篇 Qt+osg 模型移动, 旋转, 缩放

osg-ex2.pro 文件:

CONFIG += c++11 console
CONFIG -= app_bundle

SOURCES += main.cpp

qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target


# 添加库文件
LIBS += -LF:/osg3.6.0/OsgLearnExample/osg3.6.0/bin/  -lOpenThreads      \
                                                     -losg              \
                                                     -losgAnimation     \
                                                     -losgDB            \
                                                     -losgFX            \
                                                     -losgGA            \
                                                     -losgManipulator   \
                                                     -losgParticle      \
                                                     -losgPresentation  \
                                                     -losgShadow        \
                                                     -losgSim           \
                                                     -losgTerrain       \
                                                     -losgText          \
                                                     -losgUI            \
                                                     -losgUtil          \
                                                     -losgViewer        \
                                                     -losgVolume        \
                                                     -losgWidget

# 引入头文件
INCLUDEPATH += F:/osg3.6.0/OsgLearnExample/osg3.6.0/include

main.c文件:

///** 移动/旋转/缩放模型
#include <osgDB/ReadFile>
#include <osgViewer/Viewer>
#include <osg/Node>
#include <osg/MatrixTransform>


int main(void)
{
    osgViewer::Viewer viewer;
    osg::ref_ptr < osg::Group> root = new osg::Group() ; // 申请一个跟节点


    // 读取模型文件
    osg::ref_ptr < osg::Node> osgcool = osgDB::readNodeFile("F:\\3D\\OSG3.6\\OpenSceneGraph-Data\\cow.osg") ;


    // 申请一个矩阵使加入矩阵的东西沿Z 轴平移 2 个单位,在 OSG 中坐标轴是可以设置的
    osg::ref_ptr < osg::MatrixTransform> trans = new osg::MatrixTransform ;
    trans ->setMatrix(osg::Matrix::translate(0, 0, 6)) ;
    trans ->addChild(osgcool.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(osgcool.get());  // 把模型文件添加到矩阵中


    // 申请一个矩阵使加入该矩阵的模型向下移动两个单位,向右移动四个单位,且绕 X 轴转 45 度
    osg::ref_ptr < osg::MatrixTransform > rot = new osg::MatrixTransform ;
    // 函数 DegreesToRadians 可以把角度转为弧度
    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(osgcool.get()) ;


    // 把这些矩阵都加入到 root 当中。
    root ->addChild(osgcool.get()) ;
    root ->addChild(trans.get()) ;
    root ->addChild(scale.get()) ;
    root ->addChild(rot.get()) ;


    viewer.setSceneData(root.get());
    viewer.realize();
    // 修改窗体显示大小位置
    osgViewer::GraphicsWindow *pWnd = dynamic_cast<osgViewer::GraphicsWindow*>(viewer.getCamera()->getGraphicsContext());
    if (pWnd)
    {
        pWnd->setWindowRectangle(400, 400, 400,400);
        pWnd->setWindowDecoration(true);
    }
    return viewer.run();
}
//*/

演示:

 

 

 

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值