Perché quando il rendering di una scena con una Revolving oggetti della fotocamera che ci si aspetterebbe di apparire dietro gli altri non farlo? OPENGL Objective-C
-
27-09-2019 - |
Domanda
Io sono il rendering di una scena in cui io ho due sfere. Sto che ruotano intorno a una macchina fotografica uno di loro. Ciò che accade è intuitivo. Quando la telecamera gira intorno alla sfera l'altro ottiene di fronte ad essa, quando ci si aspetta che sia dietro. Così sembra come se le sfere non sono ruotano intorno a vicenda e quello del dovrebbe andare in giro è sempre in anticipo. Si prega di aiuto.
Ecco il codice che rende la scena:
glLoadIdentity();
[self positionCamera];
glutSolidSphere(2, 12,12);
glPushMatrix();
glTranslatef(5, 0, 0);
glutSolidSphere(0.5, 12,12);
glPopMatrix();
glFlush();
Questo blocco è parte di una classe che viene chiamato sull'utilizzo.
[NSTimer scheduledTimerWithTimeInterval:DEFAULT_ANIMATION_INTERVAL
target:self
selector:@selector(drawRect)
userInfo:nil
repeats:YES];
E
-(void)positionCamera{}
Contiene la matematica fare la rivoluzione fotocamera e gluLookAt ()
Soluzione
In sostanza quello che stai facendo ora è un back-to-front rendering, dove l'ultimo primitiva disegnato apparirà sempre essere disegnato sopra gli altri.
Che cosa si vuole fare è abilitare il test di profondità, dove la profondità di ogni frammento sarà confrontato prima di essere disegnato sullo schermo. glEnable(DEPTH_TEST)
dovrebbe aiutare.