[osg][原]自定义osgGA漫游器

相机矩阵变化基础:http://blog.youkuaiyun.com/popy007/article/details/5120158

osg漫游器原理:http://blog.youkuaiyun.com/csxiaoshui/article/details/51295591

osgGA::CameraManpulator原理:http://blog.youkuaiyun.com/csxiaoshui/article/details/51303086

 

 简单的说osgGA::CameraManipulator就是用来修改相机节点姿态的。

关于osg相机的默认姿态:http://www.cnblogs.com/lyggqm/p/8073688.html

 

osg一帧的绘制中会经历 事件遍历、更新遍历、渲染这三个过程。

事件遍历处理完其他事件回调后会调用漫游器的handle()函数

更新遍历处理完其他更新回调后会调用漫游器的updateCamera()函数

 

也就是说需要自定义漫游器最重要的两个重写函数是:

//事件处理,按键,鼠标交互处理
bool handle(const GUIEventAdapter& ea,GUIActionAdapter& us);
//更新当前帧的摄像机(通常由viewer调用)
//默认实现只需设置摄像机视图矩阵。
virtual void updateCamera(osg::Camera& camera);

而 updateCamera() 一般也不会重写,而是重写getInverseMatrix() 

 

    //所有漫游器都必须实现的4个纯虚函数  
    virtual void setByMatrix(const osg::Matrixd& matrix){}  //设置相机的位置姿态矩阵  
    virtual void setByInverseMatrix(const osg::Matrixd& matrix){}  //设置相机的视图矩阵  
    virtual osg::Matrixd getMatrix() const{return osg::Matrix();}  //获取相机的姿态矩阵 
    virtual osg::Matrixd getInverseMatrix() const;   //获取相机的视图矩阵 

 一般重写getInverseMatrix()。 因为这个函数返回的矩阵在updateCamera中使用:

virtual void updateCamera(osg::Camera& camera) { camera.setViewMatrix(getInverseMatrix()); }

所以,自定义函数最重要的两个重写函数是:

handle  和  getInverseMatrix

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值