旋转OpenGL对象以匹配iPhone旋转

时间:2014-03-18 17:49:25

标签: iphone objective-c opengl-es rotation

我想旋转一个立方体以匹配iPhone的旋转和方向。换句话说,立方体的每个面都代表iPhone的6个侧面中的每一个。我需要立方体来模仿iPhone的方向。我使用的代码没有给我预期的结果。我知道Apple提供了GLGravity示例代码的示例,但对于我正在做的事情来说它似乎过于复杂。以下是我到目前为止的情况:

 const GLfloat aspectRatio = (GLfloat)(self.view.bounds.size.width) / (GLfloat)(self.view.bounds.size.height);
const GLfloat fieldView = GLKMathDegreesToRadians(90.0f);
const GLKMatrix4 projectionMatrix = GLKMatrix4MakePerspective(fieldView, aspectRatio, 0.1f, 10.0f);
self.effect.transform.projectionMatrix = projectionMatrix;

// ModelView Matrix
GLKMatrix4 modelViewMatrix = GLKMatrix4Identity;
modelViewMatrix = GLKMatrix4Translate(modelViewMatrix, 0.0f, 0.0f, -5.0f);
modelViewMatrix = GLKMatrix4RotateX(modelViewMatrix, self.motionManager.deviceMotion.attitude.roll);
modelViewMatrix = GLKMatrix4RotateY(modelViewMatrix, self.motionManager.deviceMotion.attitude.pitch);
modelViewMatrix = GLKMatrix4RotateZ(modelViewMatrix, self.motionManager.deviceMotion.attitude.yaw);
self.effect.transform.modelviewMatrix = modelViewMatrix;

1 个答案:

答案 0 :(得分:0)

我没有设置测试这个,但我有一个预感,问题是将俯仰/滚转/偏航与X,Y和Z轴周围的旋转混为一谈。每次旋转操作后轴都不会改变,因此最终角度不会相同。请查看GLKQuaternion;四元数学似乎令人难以置信的抽象,但GLK的东西使它更容易一些。事实证明,俯仰/滚转/偏航旋转实际上是如何工作的,因此可能会给你带来更好的效果。