我正在学习一些OpenGL游戏编程,我陷入了如何实现,所以摄像机遵循鼠标指针.就像在fps游戏中你想要看你的鼠标所指向的那样,但是当我移动的时候我找不到一个很好的解决方案.我正在考虑为移动保存一个矩阵,比如踩踏和扫射,同时使用四元数来处理旋转.然后将四元数转换为旋转矩阵,加载模型视图矩阵的标识,并使用两个矩阵计算此矩阵.
这有一些问题,比如我们首先应该在乘法中使用哪个矩阵,并且代码将是丑陋的.
所以我想知道是否有人有一个很好的解决方案来解决这个问题,所以我不必首先找出使用哪个矩阵,哪个代码更清晰.
将相机的视图细节存储为位置矢量,视图矢量和向上矢量(想象用拇指伸出指向:手指是视图矢量,拇指是向上矢量).保持这些矢量标准化,彼此成90度.您应该能够看到这三个矢量足以表示任何摄像机位置和方向.
您可以使用这些向量将世界坐标转换为相机坐标:
按位置翻译;
通过 - (向上矢量和y轴之间的角度)旋转(向上矢量'交叉'y轴);
通过向上旋转向上矢量 - (视图矢量和z轴之间的角度).
(我可能有一些错误的方式在那里).
您可以在用户移动鼠标时转换这些向量:
当鼠标向侧面移动时,围绕向上矢量旋转视图矢量(或者如果您愿意,可以围绕y轴旋转视图矢量和向上矢量).
当鼠标向后/向前移动时,旋转视图矢量和向上矢量(视图矢量'交叉'向上矢量).