2009-09-26 7 views
1

Salut à tous, je suis très très nouveau sur OpenGL, alors s'il vous plaît, gardez-moi. :) Je travaille sur les tutoriels OpenGL de NeHe, et j'ai développé ma propre version de la leçon 5, dans laquelle vous faites pivoter une forme 3D autour de l'origine. Je ne suis pas sûr de ce que j'ai fait de mal, j'ai copié le code presque ligne par ligne, mais je vois des chevauchements étranges dans mes surfaces.Étrange problème d'écrêtage dans OpenGL

Est-ce que quelqu'un a des suggestions sur ce qui pourrait causer un tel problème?

Merci!

Exemple ici: http://yfrog.com/2copengllesson5p

Répondre

0

Wow, complètement fixé avec une ligne:

gl.glEnable(GL.GL_CULL_FACE); 

Je ne sais pas ce qu'il fait, mais il n'a pas été mentionné dans des tutoriels J'ai utilisé, mais ma démo fonctionne parfaitement maintenant. Off à Google pour comprendre ce que cela a fait. : D

0

On dirait que vous avez un problème avec le tampon de profondeur. En particulier, il semble que chaque polygone est dessiné sans tenir compte de la profondeur, c'est-à-dire que chaque fragment provenant des polygones passe le test de profondeur. Cela signifierait que les polygones sont dessinés à un sur l'autre dans l'ordre qu'ils se trouvent être rendus dans.

Avez-vous désactiver l'écriture dans la mémoire tampon de profondeur avec quelque chose comme

glDepthMask(GL_FALSE) 

par hasard?

Si ce n'est pas le cas, alors vous souvenez-vous d'effacer le tampon de profondeur au début de chaque image? Le didacticiel Nehe commence par

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

qui efface à la fois les tampons de profondeur et de couleur. Assurez-vous de ne pas vous être débarrassé de la partie GL_DEPTH_BUFFER_BIT de cela.

HTH

+0

Voici les "propriétés" pertinentes de mon GL: gl = context.getGL(); \t gl.glColor3f (0,0f, 0,0f, 0,0f); \t gl.glHint (GL.GL_PERSPECTIVE_CORRECTION_HINT, GL.GL_NICEST); \t gl.glClear (GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT); \t gl.glShadeModel (GL.GL_SMOOTH); // Permet l'ombrage lisse \t gl.glClearColor (0,0f, 0,0f, 0,0f, 0,0f); // Fond noir \t gl.glEnable (GL.GL_DEPTH_TEST); // Active Depth Testing –

+0

Essayez d'ajouter 'gl.glDepthMask (true);' add voyez si cela fait une différence. – Troubadour

+0

L'ajout de gl.glDepthMask (true) ne semblait pas changer quoi que ce soit. :( –

0

Pour moi, il semble que vous manque permettant la mémoire tampon de profondeur ou peut-être créer un framebuffer avec un z-buffer. (Ce qui est similaire à ce que Troubadour est en train d'écrire)

glEnable(GL_DEPTH_TEST);