0

我正在尝试使用户能够在 OpenGL ES 中向上/向下和向左/向右平移对象。我使用 GLKit 进行所有的绘图和运动。我启用了触摸事件来跟踪用户想要如何移动对象。我正在使用 GLKMatrix4Translate 来滑动平移对象,但由于某种原因它也有一个旋转组件。

我从用户的触摸中收集翻译点并将它们存储在 CGPoint 中:

CGPoint center;

我将 center.x 和 center.y 用于我想要翻译的 X 和 Y 位置。我用这一行进行翻译:

GLKMatrix4 modelViewMatrix = GLKMatrix4Translate(GLKMatrix4Identity, center.x, center.y, 0.0f);

有任何想法吗?

4

1 回答 1

0

我弄清楚了这里的问题所在。我停止使用 GLKMatrix4Translate 并将其替换为 GLKMatrix4MakeLookAt。GLKMatrix4MakeLookAt 允许您移动相机,从而产生我正在寻找的效果。

简单地使用此代码会导致我已经看到的相同问题。模型在平移时旋转。

GLKMatrix4MakeLookAt(0, 0, 7,
                     center.x, center.y 0,
                     0, 1, 0);

这就是说,您希望相机始终以 (center.x, center.y, 0) 为中心看 (0,0,7),y 轴朝上。眼睛的指向是问题所在。如果模型正在旋转(确实如此),您需要将眼睛指向新旋转的点。

用下面的代码替换上面的代码似乎可以解决问题。

GLKMatrix4MakeLookAt(rotation.x, rotation.y, 7,
                     center.x, center.y, 0,
                     0, 1, 0);
于 2012-01-13T17:44:25.993 回答