2017-06-16 4 views
0
this._vertices = new Float32Array([ 
      -0.5, 0, 0, // left 
      0, 0.5, 0, // top 
      0.5, 0, 0 // right 
     ]); 

this._indicies = new Uint16Array([0, 1, 2]); 

Comme vous pouvez le voir, j'ai 3 points pour un triangle. Le problème avec ceci est que mon triangle ne finit par être rendu que si je change les indices àL'ordre des indices est-il important?

this._indicies = new Uint16Array([0, 2, 1]); 

Savez-vous pourquoi? Pourquoi l'ordre des indices est-il important? Et comment puis-je connaître l'ordre correct pour mettre les indices?

Ps. Cela fonctionne lorsque vous définissez le type de dessin sur LINE_LOOP mais cela ne fonctionne pas sur les triangles.

+0

Qu'est-ce que POINT_LOOP? Il n'y a pas une telle chose dans WebGL? – gman

+0

Désolé, c'était une faute de frappe. Je voulais dire LINE_LOOP – CodingMadeEasy

Répondre

1

Si la sélection est sur gl.enable(gl.CULL_FACE), les triangles sont triés si leur sommet est dans le sens inverse des aiguilles d'une montre dans l'espace du clip (c'est-à-dire après le vertex shader). Vous pouvez choisir les triangles, dans le sens horaire ou antihoraire se cueillis avec gl.cullFace(...)

 0    0 
    /\   /\ 
/ \  / \ 
    2-----1  1-----2 

clockwise counter-clockwise 
+0

Ah, je vois que cela est parfaitement logique. Je ne me rappelais même pas que j'avais activé l'abattage. Merci beaucoup! – CodingMadeEasy

1

Ordre des sommets ne fait importe si face culling est activée. Quel est l'avant et quel est l'arrière d'un triangle dépend de l'ordre d'enroulement réglé. Si l'enroulement de la contre-pendule est activé (par défaut), les faces qui apparaissent dans l'ordre inverse de l'horloge sur l'écran sont considérées comme des faces "avant".

Si la sélection est activée, seul le triangle sur lequel vous regardez depuis un côté sélectionné est dessiné.