OpenGL ES - неверная визуализация на оси г?

голоса
3

У меня есть модель снеговика, что я загрузка из файла .obj. Все работает хорошо, за исключением того, что, когда я использую glRotatef (), чтобы повернуть модель голова снеговика всегда будет оказывать в передней части тела. Нос снеговика также всегда будет оказывать за головой. Это создает эффект, что снеговик меняет направление, как он вращается, но на самом деле части просто не оказывающие в правильном порядке г. Почему это происходящее?

Примечание: все части снеговика из того же файла .obj создан с помощью блендера.

рендеринг модели, как это (в цикле дро)

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);

вращающийся как это (в touchesMoved)

- (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;
}
Задан 19/05/2009 в 13:52
источник пользователем
На других языках...                            


2 ответов

голоса
5

Убедитесь, что вы не (по ошибке) применяется отрицательное (зеркальное отображение) масштаба на сцену. Также убедитесь, что вы используете Z буферизацию, возможно, это не так.

Эта страница говорит немного о системе координат в Blender, по сравнению с другой системой 3D, и, возможно , частично неясным в качестве ссылки , но я помещаю определенное количество уверенности в нем.

Ответил 19/05/2009 в 14:07
источник пользователем

голоса
0

UIKit координаты для текстуры вверх-вниз, так что у вас есть два варианта:

  1. отрегулировать V коорд ваших отображений текстуры (1-vcoord)
  2. переворачивать изображение перед нанесением в Contex, что вы позже загрузить в гл.

Если вы используете CG для загрузки текстур, как это, вы можете добавить ScaleCTM:

CGContextRef context = CGBitmapContextCreate( imageData, ....
CGContextClearRect( context, ...
CGContextScaleCTM( context, 1.0, -1.0);  // flip the texture vertically
CGContextDrawImage( context, CGRectMake( 0, 0, width, height ), image.CGImage );
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, imageData);
Ответил 03/06/2010 в 07:13
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more