2011-01-30 6 views
0
float coords[] = { 
       -1.0f, 1.0f, 0.0f, // 0, Top Left 
       -1.0f, -1.0f, 0.0f, // 1, Bottom Left 
       1.0f, -1.0f, 0.0f, // 2, Bottom Right 
       1.0f, 1.0f, 0.0f, // 3, Top Right 
    }; 


    float texCoords[] = { 
      0.0f, 0.0f, 
      0.0f, 1.0f, 
      1.0f, 1.0f, 
      1.0f, 0.0f, 
     }; 

sur tirage:erreur OpenGL-ES TRIANGLE_STRIP

gl.glDrawArrays(GL10.GL_TRIANGLE_FAN, 0, coords.length/dimension); 

tirage normalement, mais

gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, coords.length/dimension); 

cela ne dessiner le carré de la moitié, pourquoi?

Répondre

3

Pour que cela fonctionne, l'ordre des points doit être: TL, BL, TR, BR.

Lorsque vous spécifiez un ventilateur, les points tournent autour du tout premier point. Chaque triangle est composé à partir de ce premier point, le point suivant sur la liste et le dernier point du triangle précédent.

Avec la bande, c'est différent. Les triangles de bande utilisent les deux derniers points du triangle précédent et le nouveau sur la liste. Cela a un effet secondaire: chaque triangle a l'enroulement opposé (CW que CCW, puis CW à nouveau et ainsi de suite).

enter image description here

+0

si je veux dessiner un sommet de la sphère, que je devrais utiliser triangle_strip triangle_fan ot? parce que sur un sommet de sphère, j'ai revu une demi-sphère? – lacas

+0

Sphère est probablement plus efficace avec des bandes. – detunized

+0

Voir ceci: http://stackoverflow.com/questions/4405787/generating-vertices-for-a-sphere – detunized