2 votes

Android OpenGL ES rend l'objet compex de manière incorrecte

J'essaie d'écrire un programme qui dessine un objet complexe non convexe. Mais j'ai un problème - certaines faces semblent être transparentes. J'ai partiellement résolu ce problème en ajoutant GLES20.glEnable(GLES20.GL_CULL_FACE);

Mais après cela, j'ai découvert que cela ne fonctionne pas s'il y a deux faces avec la même direction de leurs normales et l'une placée derrière l'autre. Dans ce cas, Open GL effectue un rendu incorrect. J'ai également essayé d'ajouter GLES20.glEnable(GLES20.GL_DEPTH_TEST)

mais je n'ai pas atteint le but. De plus, la moitié de l'objet a disparu. Pouvez-vous m'expliquer où je me trompe ?

P.S. Pour obtenir les sommets des objets, j'ai utilisé Blender (j'ai exporté ses données dans un fichier obj). J'ai aussi vérifié ces données - il y a un ordre correct des sommets (CCW).

1voto

Murugan89 Points 26

J'ai rencontré le même problème. Le problème est que vous n'allouez pas la taille du tampon pour la profondeur et le stencil dans configAttribslist. Ainsi, il ne calcule pas la profondeur même si vous spécifiez DepthTest.

solution : ajouter les lignes suivantes à la liste des attributs de eglChooseConfig. EGL10.EGL_DEPTH_SIZE, 8, EGL10.EGL_STENCIL_SIZE, 8, ceci a réglé le problème pour moi.

Code :

private static int[] s_configAttribs2 = { 
   EGL10.EGL_RED_SIZE, 4, 
   EGL10.EGL_GREEN_SIZE, 4, 
   EGL10.EGL_BLUE_SIZE, 4, 
   EGL10.EGL_DEPTH_SIZE, 8, 
   EGL10.EGL_STENCIL_SIZE, 8, 
   EGL10.EGL_SAMPLE_BUFFERS, 1,
   EGL10.EGL_RENDERABLE_TYPE, 
   EGL_OPENGL_ES2_BIT, 
   EGL10.EGL_NONE 

};

egl.eglChooseConfig(display, s_configAttribs2, configs, numConfigs, num_config);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X