2010-04-19 2 views
1

Je rends une scène dans laquelle j'ai deux sphères. Je fais tourner une caméra autour de l'un d'entre eux. Ce qui se passe est contre-intuitif. Quand la caméra tourne autour de la sphère, l'autre se place devant quand on s'attend à ce qu'elle soit derrière. Donc, il semble que les sphères ne tournent pas les unes autour des autres et que celle qui devrait circuler est toujours frontale. S'il vous plaît aider.Pourquoi quand je rends une scène avec une caméra tournante, des objets que vous attendez d'apparaître derrière d'autres ne le font pas? OPENGL Objective-c

Voici le code qui rend la scène:

glLoadIdentity(); 

[self positionCamera]; 

glutSolidSphere(2, 12,12); 

glPushMatrix(); 
glTranslatef(5, 0, 0); 
glutSolidSphere(0.5, 12,12); 
glPopMatrix(); 

glFlush(); 

Ce bloc fait partie d'une classe qui est appelée à l'aide.

[NSTimer scheduledTimerWithTimeInterval:DEFAULT_ANIMATION_INTERVAL 
           target:self 
           selector:@selector(drawRect) 
           userInfo:nil 
           repeats:YES]; 

Et

-(void)positionCamera{} 

Contient les mathématiques font la révolution de la caméra et gluLookAt()

Répondre

1

Fondamentalement, ce que vous faites est maintenant un retour à l'avant rendu, où la dernière sortie primitive sera semblent toujours être attirés par les autres. Ce que vous voulez faire est d'activer le test de profondeur, où la profondeur de chaque fragment sera comparée avant d'être dessinée à l'écran. glEnable(DEPTH_TEST) devrait aider.

+0

J'ai une classe d'initialisation GL où je fais juste cela. J'ai mesuré le tampon de profondeur. int profondeur; glGetIntegerv (GL_DEPTH_BITS, & depth); NSLog (@ "% i bits profondeur", profondeur) Renvoie 0. Peut-être le problème? – nebulus

+0

Vous devez absolument avoir un tampon de profondeur pour les tests de profondeur. Je ne sais pas pourquoi cela n'existerait pas, mais vérifiez votre code d'initialisation. Vous pouvez toujours essayer de créer explicitement une texture de format de profondeur, juste pour vous assurer qu'il est supporté par le matériel (je ne suis pas familier avec Objective-C, cependant, pas d'échantillon de code). Selon la distance entre vos objets et la caméra, un tampon de profondeur de 16 ou 24 bits devrait être suffisant. Si rien de tout cela ne fonctionne, vous pouvez toujours utiliser trig pour savoir ce qui devrait être devant et rendre celui-ci en dernier. Mais les tests de profondeur sont certainement les meilleures options. – ssube

+0

Génial! J'ai mis un tampon de 24 bits pour la fenêtre de mes applications. IB vous permet de le faire facilement en utilisant l'inspecteur. Ça marche. Merci les gars! – nebulus

Questions connexes