仅作参考(自己理解,有错不负责):
EarthManipulator操作器内部封装4个矩阵实现位置及姿态的变换(参考源码):
osg::Matrixd EarthManipulator::getMatrix() const
{
return osg::Matrixd::translate(-_offset_x,-_offset_y,_distance)*
osg::Matrixd::rotate(_rotation)*
osg::Matrixd::rotate(_centerRotation)*
osg::Matrixd::translate(_center);
}
其中第一个translate将相机移动至世界坐标原点位置;
第二个rotate表示相机绕北天东坐标系旋转;
第三个rotate表示相机根据位置(经纬坐标)调整自己的视口,使相机移动时始终拥有固定的北天东偏转角度;
第四个translate表示相机从球心至视点位置的矩阵;