我最近开始了一个基于 OpenGL 示例的新 iOS 项目。我添加了自己的相机移动代码,并且添加了一个包含 Blocks 实例的 NSMutableArray(目前仅包含 3D 位置)。我已经修改了绘图代码,从这个数组中绘制了样本中包含的立方体模型的实例。
当我导航相机时,所有立方体的行为都符合我的预期(它们都留在原来的位置,但我将相机移动到它们周围),除了当相机改变时,一个立方体似乎与其他立方体滑动了一点。每当我移动相机(位置或旋转)时,这个块确实停留在相同的大致位置,但它会在相机移动的相反方向轻微滑动。当相机静止时,它完全是它应该在的地方。
这个块似乎总是最后一个绘制的。如果我添加一个条件来跳过该块,它会选择一个不同的块。
我一遍又一遍地检查我的代码,我不明白为什么一个块的行为应该与其他块不同。
以下是所有相关代码:
ViewMatrix = GLKMatrix4MakeRotation(CameraRotation.y, 1.0f, 0.0f, 0.0f);
ViewMatrix = GLKMatrix4Rotate(ViewMatrix, CameraRotation.x, 0.0f, 1.0f, 0.0f);
ViewMatrix = GLKMatrix4TranslateWithVector3(ViewMatrix, CameraPosition);
ViewMatrix = GLKMatrix4Translate(ViewMatrix, 0.0f, -1.5f, 0.0f);
glBindVertexArrayOES(_vertexArray);
for (int i = 0; i < blocks.count; i++){
Block *b = [blocks objectAtIndex:i];
if (true){
[self.effect prepareToDraw];
GLKMatrix4 ModelViewMatrix = GLKMatrix4MakeTranslation(b.position.x, b.position.y, b.position.z);
ModelViewMatrix = GLKMatrix4Multiply(ViewMatrix, ModelViewMatrix);
self.effect.transform.modelviewMatrix = ModelViewMatrix;
glDrawArrays(GL_TRIANGLES, 0, 36);
}
}
正如你所看到的,所有的块都是用完全相同的代码绘制的。为什么会有不同的行为?