带矢量的自由飞行摄像机 - 如何正确旋转?

时间:2014-09-13 19:26:03

标签: java opengl camera lwjgl

我的相机设置为vecmath.lookatMatrix(eye, center, up) 运动正常,向前,向后,向右,向左,这些都很好。 什么似乎不能正常工作是旋转。

我不擅长数学,所以我想我可能在这里缺少一些逻辑,但我认为轮换会像这样工作:
在围绕 Y轴旋转时,我将一个值添加/分配到中心矢量的 X值
在围绕 X轴旋转时,将一个值添加/舍入到中心矢量的 Y值
例如,这里是向右旋转:center = center.add(vecmath.vector(turnSpeed, 0, 0))

这实际上有效,但有一些奇怪的行为。看起来中心矢量值的x / y越高,旋转越慢。我想这是因为通过对中心矢量的加/减,它移动得太远或者类似的东西,我真的很想知道实际发生了什么。

实际上在写这篇文章时,我只是意识到这不能像这样工作,因为一旦我移动并旋转了一下,例如我在"空中" ,轮换会是错误的....

我真的希望有人能在这里帮助我。

2 个答案:

答案 0 :(得分:1)

应使用matrices旋转OpenGL的矢量。线性运动可以通过简单地将矢量一起添加来执行,但是对于旋转,仅仅改变其中一个坐标是不够的......如果是这样的话,你是如何从(X,0,0)方向得到的到(0,X,0)?
Here是另一个教程,它是C ++,但也有Java样本 这一切背后有一些数学 - 你似乎熟悉向量,并且可能有一种感觉'对他们有帮助 编辑 - 如果要正确使用OpenGL中的矩阵,您需要熟悉MVP concepts。你有一些东西要显示(模型),它放在你正在通过相机(投影)观察的世界(视图)的某个地方。

答案 1 :(得分:0)

使用带有眼睛,中心,向上矢量的自由飞行相机的工作解决方案发布在这里: Free Flight Camera - strange rotation around X-axis