0

我有一个关于使用 Android Studio 在 opengl es 中实现 arcball 的问题。

在计算完旋转轴后,我应该通过渲染管道将轴反转回对象空间,以便可以在对象空间中应用旋转。

这部分可以写成:

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 被丢弃。为什么我们在实现轨迹球时不考虑投影矩阵,尽管对对象进行了投影变换?

4

1 回答 1

0

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

投影矩阵不代表对象的实际位置。您所在的位置越远,您会得到的越小,您不希望深度对您的​​旋转产生影响。

因此,您从视点或原点计算旋转,然后让投影矩阵在渲染时完成其工作。

于 2017-06-18T13:59:08.770 回答