在没有投影矩阵的情况下实现轨迹球旋转轴?

Implementing arcball rotation axis without projection matrix?

我对使用 Android Studio 在 opengl es 中实现 arcball 有疑问。

计算出旋转轴后,我应该通过渲染管道将轴反转回对象space,这样旋转就可以应用于对象space。

这部分可以这样写:

obj_rotateAxis = normalize(vec3(inverse(mat3(camera->projMatrix) * mat3(camera->viewMatrix) * mat3(teapot->worldMatrix)) * rotateAxis));

不过,我听说正确的形式应该是这样的:

obj_rotateAxis = normalize(vec3(inverse(mat3(camera->viewMatrix) * mat3(teapot->worldMatrix)) * rotateAxis));

其中 projMatrix 被丢弃。为什么我们实现轨迹球时不考虑投影矩阵,虽然对物体做了投影变换?

据我所知,您使用 arcBall 来计算将应用于对象的旋转角度。当你想要旋转一个物体时,你想让它从世界的原点(世界矩阵)或从视点(视图矩阵)旋转。

投影矩阵不代表您的对象的实际位置。你离得越远,你就会越小,你不希望深度影响你的旋转。

所以你从视点或原点计算旋转,然后让投影矩阵在渲染时完成它的工作。