|
采用freesouth的MFC框架搭建了一个简单的OSG程序,现在想实现一个功能,就是通过MFC中的Slider控件控制水平视角和俯仰视角,在osg核心类里面定义了一个
- class ViewControl :public osgGA::CameraManipulator
复制代码
继承了四个虚函数:
vi- rtual void setByMatrix(const osg::Matrixd &matrix)
- virtual void setByInverseMatrix(const osg::Matrixd& matrix)
- virtual osg::Matrixd getMatrix() const
- virtual osg::Matrixd getInverseMatrix() const
复制代码
同时自己定义了一个操作的函数
- void ChangePosition(osg::Vec3 delta)
复制代码
在响应键盘时在ViewControl 类里面的
- bool handle( const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter& us )
复制代码
函数响应,通过changeposition函数可以实现,
但是换成在C***view下的控件响应函数里面就没有什么反应了
如果不用changeposition,而用setByMatrix ,在C***view下的控件响应函数里面也可以实现相关的控制,但是里面对旋转视角等遇到问题,不知道在虚函数里面进行定义
-
- virtual void setByMatrix(const osg::Matrixd &matrix)
- {
- m_vPosition = matrix.getTrans();//定义的camera位置
- osg::Quat qut = matrix.getRotate();//camera的旋转
- }
复制代码
上面的osg:uat 获取了以后,怎么赋值给我在ViewControl 类里面定义的旋转参数 osg::Vec3 m_vRotation;
在handle函数里面:
响应键盘按键的代码:
-
- if (ea.getKey() == 0xFF53) //Right arrow
- {
- m_vRotation._v[2] -= osg::DegreesToRadians(m_fAangle);
- }
复制代码
现在就是想通过类似这样的方式来实现,但是在C***view类里面没有响应 。该如何修改???
不知道我的问题说清楚了没有。。。。
请各位大牛指正!!! |
|