试图在OpenGL / SFML中实现鼠标外观“相机”

时间:2011-07-13 18:06:40

标签: c++ opengl camera sfml glu

我已经使用OpenGL和SFML 1.6一段时间了,它已经爆炸了!有一个例外:我似乎无法正确实现相机类。你看,我正在尝试创建一个名为“Camera”的C ++类。这是我的职能:

Camera::Strafe(float fSpeed)

检查是否按下了WASD键,如果是,则按照各自的方向将摄像机移动到“fSpeed”。

Camera::MouseMove(int currentX, int currentY)

应该提供第一人称鼠标外观,接收当前鼠标坐标并相应地旋转相机。我的Strafe()实现工作正常,但我似乎无法正确使用MouseMove()。

我已经从阅读有关OpenGL鼠标外观实现的其他资源中了解到,我必须在每一帧之后将鼠标置于中心位置,然后我将该部分放下。但那是关于它的。我似乎无法从鼠标坐标到现场实际旋转相机。可能需要使用一些触发器,我敢打赌。

1 个答案:

答案 0 :(得分:0)

我做过类似的事(这是第三人称相机)。如果我记得我做的正确,我采取了鼠标位置的变化并用它来计算两个角度(我相信有一些触发,我相信)。一个角度给了我水平旋转,另一个给了我垂直旋转。特别是俯仰,偏航和滚动,虽然我不记得哪个指向哪个方向。还有一个你必须先做另一个,否则事情会旋转有趣。我很确定它首先是俯仰,然后是偏航或滚动。

希望鼠标位置的变化应该是显而易见的。它允许小鼠衰老。如果我快速移动鼠标,我会有更大的变化,所以我会“更快”地旋转。

编辑:好的,我查看了我的代码,这是一个非常简单的计算。

这是用C#完成的,所以请耐心等待语法:

_angles.X += MathHelper.ToDegrees(changeInX / 100);
_angles.Y += MathHelper.ToDegrees(changeInY / 100);

我的角度存储在一个二维矢量中(因为我只在两个轴上旋转)。你会看到我接受了我的changeInX和changeInY值,然后简单地将它们除以100以获得一些任意的弧度值,然后将该数字转换为度数。调整100以获得灵敏度。请记住,没有扎实的数学可以解决这个问题。我做了一些试错,直到我得到了一些效果很好的东西。