2010-07-15 7 views
0

J'ai deux objets dessinés sur l'écran en openGL, l'un est une sphère utilisant l'objet GLU et l'autre est une étoile mappée de texture. Indépendamment des coordonnées z, l'étoile mappée de texture semble toujours dessiner devant. Est-ce un comportement normal d'OpenGL? Est-ce qu'il y a un moyen d'éviter cela?Mappage de texture OpenGL

Note: Je travaille dans le framework worldwind, donc peut-être que quelque chose d'autre est en train de se produire. Mais je me demande simplement s'il est normal que les objets mappés par texture apparaissent devant? Je ne pense pas mais je ne suis pas sûr ...

+0

Si les deux objets sont en 3D et que vous rendez l'étoile après l'objet glu, alors vous avez probablement oublié d'effectuer le test de profondeur enabele et le zbuffer. – SigTerm

+0

test de profondeur est activé, mais l'étoile est 2d. Je suppose que cela ferait une différence. J'aurais dû le mentionner. –

+0

@Jeff: par 2D, vous voulez dire que vous le faites sans perspective? En d'autres termes, projection orthogonale. Ou tu voulais dire que c'est juste un avion? En plus de cela, traduisez-vous la caméra ou les objets pendant le processus de rendu? – jweyrich

Répondre

0

Ce n'est pas un bug dans le monde, c'est vraiment le comportement désiré. Utiliser glVertex2f() équivaut à utiliser glVertex3f() et mettre z = 0. Ainsi, il dessine simplement l'étoile sur un plan très proche du spectateur (également en fonction de votre projection). Pour résoudre votre problème, vous pouvez soit désactiver les écritures de profondeur en utilisant glDepthMask (0), puis dessiner l'étoile, appeler glDepthMask (1), puis dessiner la sphère, qui sera maintenant devant l'étoile.

Vous pouvez également utiliser glDepthFunc (GL_GREATER) sur l'étoile ou glDisable (GL_DEPTH_TEST) sur la sphère pour obtenir rapidement le même effet. Pour rendre quelque chose de plus compliqué (comme une étoile qui coupe la sphère), vous devez utiliser des matrices pour placer l'étoile à la position désirée.