osglogo例子

在osg中osgGetVersion()获取osg的版本信息。
本例子通过Geode和Geometry创建最基本的几何体,实现logo的绘制,不进行详细的研究。
里面的地球,通过ShapeDrawable纹理贴图,MatrixTransform的setUpdateCallback(new 
osg::AnimationPathCallback实现自动的旋转。
本例子MyBillboardTransform : public osg::PositionAttitudeTransform实现了朝向一直屏幕
的效果,这里需要比较一下MyBillboardTransform、Billboard、AutoTransform朝向屏幕的实现
方法。首先看MyBillboardTransform:
重写computeLocalToWorldMatrix方法,计算视点坐标
bool computeLocalToWorldMatrix(osg::Matrix& matrix,osg::NodeVisitor* nv) const
 {
            osg::Quat billboardRotation;
            osgUtil::CullVisitor* 
cullvisitor = dynamic_cast<osgUtil::CullVisitor*>(nv);
            if (cullvisitor)
   
         {
                osg::Vec3 eyevector = cullvisitor->getEyeLocal()-
_position;
                eyevector.normalize();
                osg::Vec3 side = 
_axis^_normal;
                side.normalize();
                float angle = atan2


(eyevector*_normal,eyevector*side);
                billboardRotation.makeRotate
(osg::PI_2-angle,_axis);
            }
            matrix.preMultTranslate(_position);

           matrix.preMultRotate(billboardRotation);
            matrix.preMultRotate
(_attitude);
            matrix.preMultTranslate(-_pivotPoint);
            return 
true;
        }实现节点一直朝向屏幕
看看Billboard
Billboard是在CullVisitor  void CullVisitor::apply(Billboard& node)的时候也是获取视点
坐标,调用computeMatrix来实现的,根据不同的设置方法计算computeMatrix(Matrix& 
modelview, const Vec3& eye_local, const Vec3& pos_local) const中的modelview。
AutoTransform也是在AutoTransform::computeLocalToWorldMatrix(Matrix& 
matrix,NodeVisitor*)中计算computeMatrix()修改_cachedMatrix.makeRotate(_rotation);
    
_cachedMatrix.postMultTranslate(_position);
    _cachedMatrix.preMultScale(_scale);
   
 _cachedMatrix.preMultTranslate(-_pivotPoint);这几个影响节点编号的属性来实现的。
总结起来,他们都是在剔除的过程中通过CullVisitor的apply方法,调用各自的方法来完成朝向


屏幕矩阵的计算。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值