У меня есть модель снеговика, которую я загружаю из файла .obj. Все работает хорошо, за исключением того, что когда я использую glRotatef (), чтобы вращать модель, голова снеговика всегда будет отображаться перед телом. Нос снеговика также всегда будет отображаться за головой. Это создает эффект того, что снеговик меняет направление при вращении, но на самом деле части просто не отображаются в правильном z-порядке. Почему это происходит?
ПРИМЕЧАНИЕ: все части снеговика взяты из одного файла .obj, созданного с помощью blender.
рендеринг модели следующим образом (в цикле рисования)
glVertexPointer(3 ,GL_FLOAT, 0, model_verts);
glEnableClientState(GL_NORMAL_ARRAY);
glNormalPointer(GL_FLOAT, 0, model_normals);
glDrawElements(GL_TRIANGLES, num_model_indices*3, GL_UNSIGNED_SHORT, &model_indices);
вращается вот так (в касаниях)
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
touchBeginPos = [touch locationInView:self];
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
CGPoint touchEndPos = [[touches anyObject] locationInView:self];
glMatrixMode(GL_MODELVIEW_MATRIX);
glRotatef(10, (touchBeginPos.y - touchEndPos.y)/4, -(touchBeginPos.x - touchEndPos.x)/4, 0.0f);
touchBeginPos = touchEndPos;
}