我有一个关于使用Android Studio在opengl中实现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时不考虑投影矩阵,尽管为对象完成了投影变换?
答案 0 :(得分:0)
据我所知,您使用arcBall计算将应用于对象的旋转角度。当你想要旋转一个对象时,你想让它从世界的原点(世界矩阵)或从视点(视图矩阵)旋转。
投影矩阵不代表对象的实际位置。您找到的距离越小,您就越不希望深度对旋转产生影响。
因此,您从视点或原点计算旋转,然后让投影矩阵在渲染时完成其工作。