我一直在研究游戏引擎,最近到了可以轻松创建 Camera 类来管理视图矩阵(或允许轻松切换到另一个)的地步。我从概念上知道它必须做什么,但是我遇到的麻烦是弄清楚如何围绕本地原点旋转(对于视图矩阵,它与乘以旋转矩阵的平移矩阵相同)。
我知道在直接模式下,你会
glTranslatef(x, y, z); //move back to origin
glRotatef(angle, x_rot, y_rot, z_rot); //turn using a quaternion
glTranslatef(-x, -y, -z); //move back to original location
但我不确定这将如何转化为更现代的应用程序。你会做同样的事情,让一个平移矩阵回到原点,旋转,然后平移回来吗?对于您要旋转的每个对象?从我目前测试的结果来看,该方法适用于查看,但在 3D 空间中控制它很笨拙(我不确定如何不断调整旋转。将运动组件转换为单个 vec4,乘以旋转,应用于翻译,然后进行实际旋转?)
似乎有一种比我缺少的三个或更多 4x4 矩阵乘法更有效的方法。
这是尝试建议的解决方案后的特定部分。