Por que quando eu renderizo uma cena com uma câmera giratória que você esperaria aparecer por trás de outros não fazem isso? OpenGL Objective-C
-
27-09-2019 - |
Pergunta
Estou fazendo uma cena em que tenho duas esferas. Estou girando uma câmera em torno de uma delas. O que acontece é contra-intuitivo. Quando a câmera contorna a esfera, a outra fica na frente dela quando você espera que fique para trás. Então, parece que as esferas não estão girando umas com as outras e a que deve dar a volta é sempre franca. Por favor ajude.
Aqui está o código que renderiza a cena:
glLoadIdentity();
[self positionCamera];
glutSolidSphere(2, 12,12);
glPushMatrix();
glTranslatef(5, 0, 0);
glutSolidSphere(0.5, 12,12);
glPopMatrix();
glFlush();
Este bloco faz parte de uma classe que é chamada usando.
[NSTimer scheduledTimerWithTimeInterval:DEFAULT_ANIMATION_INTERVAL
target:self
selector:@selector(drawRect)
userInfo:nil
repeats:YES];
E
-(void)positionCamera{}
Contém Math Do Camera Revolution e Glulookat ()
Solução
Basicamente, o que você está fazendo agora é uma renderização de volta à frente, onde o último desenho primitivo sempre parecerá atraído pelos outros.
O que você deseja fazer é ativar o teste de profundidade, onde a profundidade de cada fragmento será comparada antes de ser desenhada na tela. glEnable(DEPTH_TEST)
deve ajudar.