我有一个关于使用 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 被丢弃。为什么我们在实现弧球时不考虑投影矩阵,尽管投影变换是为对象完成的?
据我所知,您可以使用 arcBall 来计算将应用于对象的旋转角度。如果要旋转对象,要使其从世界的原点(世界矩阵(或视点(视图矩阵(旋转。
投影矩阵不表示对象的实际位置。你所在的位置越远,你就会越小,你不希望深度对你的旋转产生影响。
因此,您从视点或原点计算旋转,然后让投影矩阵在渲染时完成其工作。