Opengl ES - Processamento incorrecta sobre o eixo z?

votos
3

Eu tenho um modelo de um boneco de neve que eu estou carregando de um arquivo obj. Tudo funciona bem, exceto que quando eu uso glRotatef () para girar o modelo da cabeça do boneco de neve sempre rende em frente do corpo. O nariz do boneco de neve também sempre tornar atrás da cabeça. Isso cria o efeito que o boneco muda de direção quando ele está girando, mas realmente as peças simplesmente não render na ordem z direita. Por que isso está ocorrendo?

NOTA: todas as partes do boneco de neve são do mesmo arquivo .obj criado usando liquidificador.

render o modelo como este (no circuito sorteio)

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

rotativa como este (em 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;
}
Publicado 19/05/2009 em 13:52
fonte usuário
Em outras línguas...                            


2 respostas

votos
5

Verifique se você não (por engano) aplicado um negativo (espelhamento) escala para a cena. Além disso, verifique se você está usando Z buffer, talvez você não é.

Esta página fala um pouco sobre sistema de coordenadas do Blender, em comparação com outro sistema de 3D, e é talvez semi-obscura como uma referência, mas eu colocar uma certa quantidade de confiança nele.

Respondeu 19/05/2009 em 14:07
fonte usuário

votos
0

UIKit coordenadas para as texturas são de cabeça para baixo, então você tem duas opções:

  1. ajustar o coord V de seus mapeamentos de textura para (1-vcoord)
  2. inverter a imagem antes de desenhar no contex que você vai depois carregar em gl.

Se você estiver usando CG para carregar as texturas como este, você pode adicionar o 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);
Respondeu 03/06/2010 em 07:13
fonte usuário

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