|
为了实现在漫游过程中自己控制镜头,我做了以下几个事情:
1、在AnimationPathManipulator中添加了两个变量:
osg::Vec3f _vRotation; //旋转
float _fAngle; //角度
2、在handle函数中定义了左右键的操作:
else if (ea.getKey() == '37')//left arrow
{
_fAngle -= 0.2;
_vRotation._v[2] -= osg:egreesToRadians(_fAngle);
}
3、重载了getInverseMatrix函数:
osg::Matrixd AnimationPathManipulator::getInverseMatrix() const
{
osg::Matrixd mat = _matrix;
mat.makeRotate(_vRotation._v[0], osg::Vec3f(1.0f, 0.0f, 0.0f),
_vRotation._v[1], osg::Vec3f(0.0f, 1.0f, 0.0f),
_vRotation._v[2], osg::Vec3f(0.0f, 0.0f, 1.0f));
return osg::Matrixd::inverse(mat);
}
现在问题是:_vRotation的初始值设置成多少才能保证镜头默认情况下不发生旋转,我简单的认为设置成(0,0,0),发现镜头被大尺度不知道反转到哪里去了,也可能是我本身的思路有问题,因为没太搞明白矩阵旋转。有点儿着急,什么先去弄明白四元数之类的就不要建议了,希望哪位熟悉这部分的能够点出问题,我尽快改正,在线等。
非常谢谢!
|
|