【QT + OsgEarth】(七)-- 加载模型及其变换

实现过程

  • 创建节点
  • 读取模型
  • 为模型添加变换矩阵
  • 设置模型坐标
  • 加载节点
    osg::ref_ptr<osg::CoordinateSystemNode> csn;
    osg::ref_ptr<osg::Node> airport;
    osg::ref_ptr<QNodeMatrix> mtAirportself;
    osg::ref_ptr<osg::MatrixTransform> mtAirport;   

	csn = new osg::CoordinateSystemNode;
    csn->setEllipsoidModel(new osg::EllipsoidModel());//设置地球模型
    //加载机场模型

    airport = osgDB::readNodeFile("../DigtalEarth/builder/data/131651.osg");
    mtAirport = new osg::MatrixTransform;
    mtAirportself = new QNodeMatrix;
    //缩放旋转
    mtAirportself->setMatrix(osg::Matrixd::scale(0.4, 0.4, 0.4) * osg::Matrixd::rotate(osg::PI * (0), osg::Vec3(0, 0, 1)));
    
    mtAirportself->_addChild(airport);
    
    mtAirportself->getOrCreateStateSet()->setMode(GL_RESCALE_NORMAL, osg::StateAttribute::ON);
    mtAirportself->getOrCreateStateSet()->setMode(GL_LIGHTING,osg::StateAttribute::ON);
    //添加灯光
    mtAirportself->getOrCreateStateSet()->setMode(GL_LIGHT0,osg::StateAttribute::ON);
    mtAirportself->getOrCreateStateSet()->setMode(GL_LIGHT1,osg::StateAttribute::ON);
    mtAirport->addChild(mtAirportself);

    mRoot->addChild(mtAirport);

关于转换矩阵

上述代码添加了两个变换矩阵,mtAirportselfmtAirport

在这里插入图片描述

根节点mRoot添加的孩子是 mtAirport,对应的坐标系为地心坐标系即下图中蓝色坐标系。
mtAirport 添加孩子mtAirportself 直接绑定节点模型,其坐标系为下图中绿色的站心坐标系。
在这里插入图片描述

关于模型变换

模型的变换都是对模型相关的变换矩阵的操作,一下几种常见操作

  • 缩放
  • 平移
  • 旋转
旋转

构造变换矩阵

osg::Matrix::rotate(osg::inDegrees(-90.0f), 0.0f, 0.0f, 1.0f);

实参中的后三个参数(0.0f, 0.0f, 1.0f)实际指的是z轴的正半轴

缩放
osg::Matrix::scale(size,size,size);        //size表示物体缩放比例,如果size=2,则物体尺寸将放大2倍
平移
osg::Matrix::translate(v);    //v表示移动量,是一个Vec3,比如(0, 0, 1)表示向z轴移动一个单位

【注】 所有的变换叠加都是矩阵乘法操作,需要先获取当前的状态矩阵再与变换矩阵相乘

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值