我的相机设置为vecmath.lookatMatrix(eye, center, up)
运动正常,向前,向后,向右,向左,这些都很好。
什么似乎不能正常工作是旋转。
我不擅长数学,所以我想我可能在这里缺少一些逻辑,但我认为轮换会像这样工作:
在围绕 Y轴旋转时,我将一个值添加/分配到中心矢量的 X值。
在围绕 X轴旋转时,将一个值添加/舍入到中心矢量的 Y值。
例如,这里是向右旋转:center = center.add(vecmath.vector(turnSpeed, 0, 0))
这实际上有效,但有一些奇怪的行为。看起来中心矢量值的x / y越高,旋转越慢。我想这是因为通过对中心矢量的加/减,它移动得太远或者类似的东西,我真的很想知道实际发生了什么。
实际上在写这篇文章时,我只是意识到这不能像这样工作,因为一旦我移动并旋转了一下,例如我在"空中" ,轮换会是错误的....
我真的希望有人能在这里帮助我。
答案 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