Я недавно начал новый проект iOS, основанный на образце OpenGL. Я добавил свой собственный код движения камеры, и я добавил NSMutableArray, который содержит экземпляры блоков (в настоящее время только содержит трехмерную позицию). Я изменил код чертежа, чтобы нарисовать экземпляры модели куба, включенные в образец из этого массива.GLKit один объект перемещается нечетно при перемещении камеры
Когда я перемещаюсь по камере, все кубы ведут себя так, как я ожидаю (все они остаются в исходном месте, но я перемещаю камеру вокруг них), за исключением того, что один куб скользит немного отдельно от остальных, когда камера изменения. Всякий раз, когда я перемещаю камеру (положение или вращение), этот блок остается в том же общем месте, но слегка скользит в противоположном направлении движения камеры. Когда камера неподвижна, она совершенно там, где она должна быть.
Этот блок всегда кажется последним нарисованным. Если я добавлю условие, чтобы пропустить этот блок, он выбирает другой.
Я прошел через свой код снова и снова, и я не понимаю, почему один блок должен вести себя иначе, чем другие.
Здесь все соответствующего код:
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);
}
}
Как вы можете видеть, все блоки рисуются с точно таким же кодом. Почему нужно вести себя по-другому?