使相机移动和旋转的最佳方法

时间:2009-01-26 12:38:20

标签: opengl

我正在学习一些OpenGL游戏编程,我陷入了如何实现,所以摄像机遵循鼠标指针。就像在fps游戏中你想要看你的鼠标所指向的那样,但是在我移动的时候我找不到一个很好的解决方案。我正在考虑为移动保存一个矩阵,比如踩踏和扫射,同时使用四元数来处理旋转。然后将四元数设为旋转矩阵,加载模型视图矩阵的标识,并用两个矩阵计算此矩阵。

这有一些问题,比如我们首先应该在乘法中使用哪个矩阵,而代码将是丑陋的。

所以我想知道是否有人有一个很好的解决方案来解决这个问题,所以我不必先找出使用哪个矩阵,哪个矩阵可以提供更清晰的代码。

2 个答案:

答案 0 :(得分:5)

将相机的视图细节存储为位置矢量,视图矢量和向上矢量(想象用拇指伸出指向:手指是视图矢量,拇指是向上矢量)。保持这些矢量标准化,彼此成90度。您应该能够看到这三个矢量足以表示任何摄像机位置和方向。

您可以使用这些矢量将世界坐标转换为相机坐标:

  • 按位置翻译;
  • 向上旋转(向上'交叉'y轴) - (向上矢量和y轴之间的角度);
  • 向上旋转向上 - (视图矢量和z轴之间的角度)。

(我可能在那里有一些错误的方式)。

您可以在用户移动鼠标时变换这些矢量:

  • 当鼠标向侧面移动时,围绕向上矢量旋转视图矢量(或者如果您愿意,可以围绕y轴旋转视图矢量和向上矢量)。
  • 当鼠标向后/向前移动时,旋转视图矢量和向上矢量(视图矢量'交叉'向上矢量)。

答案 1 :(得分:0)

我真的没有针对您的问题的解决方案,但我知道开源3D引擎Irrlicht有一个FPS相机,可以完全满足您的需求,而且通常它有一个很好的-documented source。

您可以尝试查看如何在Irrlicht中实现FPS相机,或者甚至可以将Irrlicht本身用于您的项目;当我在大学时,我用它来做我的几个,它总是像魅力一样:)