|
本帖最后由 fuckosgchinas 于 2015-6-8 22:31 编辑
OSG OrbitManipulator漫游器中 的函数:
- // doc in parent
- void OrbitManipulator::setTransformation( const osg::Vec3d& eye, const osg::Vec3d& center, const osg::Vec3d& up )
- {
- Vec3d lv( center - eye );
- Vec3d f( lv );
- f.normalize();
- Vec3d s( f^up );
- s.normalize();
- Vec3d u( s^f );
- u.normalize();
- osg::Matrixd rotation_matrix( s[0], u[0], -f[0], 0.0f,
- s[1], u[1], -f[1], 0.0f,
- s[2], u[2], -f[2], 0.0f,
- 0.0f, 0.0f, 0.0f, 1.0f );
- _center = center;
- _distance = lv.length();
- _rotation = rotation_matrix.getRotate().inverse();
- // fix current rotation
- if( getVerticalAxisFixed() )
- fixVerticalAxis( _center, _rotation, true );
- }
复制代码
其中的 _center 、_distance、_rotation分别代表摄像机从世界坐标原点移动到观察中心(摄像机正对的地方)、并且在观察中心旋转_rotation、然后在移动到_distance到达最终的摄像机位置,请问我理解的这三个属性是否正确?
如果正确那该类中下面函数:
获取视图矩阵:- osg::Matrixd OrbitManipulator::getInverseMatrix() const
- {
- return osg::Matrixd::translate( -_center ) *
- osg::Matrixd::rotate( _rotation.inverse() ) *
- osg::Matrixd::translate( 0.0, 0.0, -_distance );
- }
复制代码
怎么理解?
提前谢谢 大家前来解答! |
|