osghangglide例子

这个例子主要模拟了飞机视角的操作器,绘制了一些必要的场景。
从createModel开始,ClearNode是这样的一个节点,清除颜色和深度缓冲区,并且设
置“RenderBin”为-1。(关于RenderBin之前的例子中有说明)通过setRequiresClear设置清除颜色是否可用。这个节点比场景中的其
他节点先绘制。在CullVisitor中的CullVisitor::apply(osg::ClearNode& node)使用,也就是
说每一帧都调用这个函数清空颜色和深度缓冲。
Transform是变换的基类,MoveEarthySkyWithEyePointTransform继承Transform实现场景跟着鼠
标的变换。重写了computeLocalToWorldMatrix和computeWorldToLocalMatrix,这里用了
getEyeLocal()这个函数获取当前的视点坐标,进入CullStack这个函数,看看这里面有存储了当
前场景很多数据,
inline osg::Viewport* getViewport();
        inline osg::RefMatrix* 
getModelViewMatrix();
        inline osg::RefMatrix* getProjectionMatrix();
inline osg::Matrix getWindowMatrix();
        inline const osg::RefMatrix* getMVPW();
inline const osg::Vec3& getEyeLocal() const { return _eyePointStack.back(); }
inline const osg::Vec3& getViewPointLocal() const { return _viewPointStack.back(); }
模型矩阵、投影矩阵、MVPW矩阵等等。相机是CullStack的孙子节点,因此说相机也有这些方法
可用。
例子之后构建了一颗模型树。
makeSky()绘制天空,RenderBin设置-2,makeBase()设置-1,makeTrees()绘制树,
makeTerrain()绘制地形,makeTank()绘制坦克。
最后viewer.setCameraManipulator(new GliderManipulator());设置了GliderManipulator这个
操作器,写自己的操作器需要继承CameraManipulator,主要重写getInverseMatrix这个函数。
这个操作器中的其他函数就不做深入的研究了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值