|
楼主 |
发表于 2010-5-27 20:03:41
|
显示全部楼层
如果您按照我所说的,花上一分钟去看一下KeySwitchMatrixManipulator的实现的话,就不会有那种茫然出现了,源代码就在src/osgGA中
这个需要回答吗,呵呵。我个人怎么觉得这个过程是显而易见的。
KeySwitchMatr ...
array 发表于 2010-5-27 08:25
谢谢!><
抱歉我之前理解错了,现在大概弄明白了
其实自定义漫游器是书上的示例代码,其中有一段将osg::Vec3 m_vPosition和 osg::Vec3 m_vRotation转换为矩阵
- osg::Matrixd TravelManipulator::getMatrix() const
- {
- osg::Matrixd mat;
- mat.makeRotate(m_vRotation._v[0], osg::Vec3(1.0f, 0.0f, 0.0f),
- m_vRotation._v[1], osg::Vec3(0.0f, 1.0f, 0.0f),
- m_vRotation._v[2], osg::Vec3(0.0f, 0.0f, 1.0f));
- return mat * osg::Matrixd::translate(m_vPosition);
- }
复制代码
但是我自己写的从矩阵还原为m_vPosition和m_vRotation的逆向操作却总是得不到正确的视角
-
- void TravelManipulator::setByMatrix(const osg::Matrixd& matrix)
- {
- m_vPosition = matrix.getTrans();
- osg::Quat m_quat = matrix.getRotate();
- m_quat.getRotate(m_fAngle,m_vRotation);
- }
复制代码
我看您之前在这贴
http://bbs.osgchina.org/viewthread.php?tid=2243&highlight=MatrixManipulator
里说到
getRotate()取得的是四元数值,它的asVec3得到的不是XYZ轴的欧拉角度,而是四元数的三个实轴分量。如果您的rotation是用欧拉角度定义的,那么需要自己写转换函数
array 发表于 2009-9-11 17:29
请问是这个原因吗? |
|