|
本帖最后由 杨文庆 于 2017-1-11 10:29 编辑
void TrackballManipulator::computePosition(const osg::Vec3& eye,const osg::Vec3& center,const osg::Vec3& up)
{ osg::Vec3 lv(center-eye);
osg::Vec3 f(lv);
f.normalize();
osg::Vec3 s(f^up);
s.normalize();
osg::Vec3 u(s^f);
u.normalize();
osg::Matrix 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);
//矩阵rotation_matrix相当于把“倾斜”的uvn坐标系变为“正”的opengl标准坐标系,下面的_rotation是rotation_matrix的逆矩阵,相当于把“正”的opengl标准坐标系变为“倾斜”的uvn坐标系
_center = center;
_distance = lv.length();
_rotation = rotation_matrix.getRotate().inverse();
}
lv是什么意思?
f(lv),s(f^up)又是什么意思? |
|