Utilisation des tampons d'index WebGL pour les mailles de dessin

3 tampons d'index posent une question plus difficile, mais j'ai l'impression que leur problème principal se limite à la mienne: existe-t-il un moyen d'utiliser des tampons d'index pour visiter le même sommet plusieurs fois dans WebGL plutôt que de dupliquer les sommets? Tout ce que j'ai pu trouver est d'utiliser des tampons d'index pour associer des textures, des normales, etc. aux sommets d'un modèle. Je n'ai pas été en mesure de trouver un moyen d'utiliser un tampon d'index pour dire à drawArrays l'ordre de visiter les sommets dans un tableau de position.

Oui, utilisez gl.drawElements et téléchargez le tampon avec vos index de vertex pour gl.ELEMENT_ARRAY_BUFFER.

... upload vertex data to buffers, vertexAttribPointer them. gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, indicesBuffer); gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, indicesData, gl.STATIC_DRAW); gl.drawElements(gl.TRIANGLES, indicesData.length/3, gl.UNSIGNED_SHORT, 0); 

Voir https://developer.mozilla.org/fr/WebGL/Creating_3D_objects_using_WebGL pour un exemple complet.

Lorsque vous utilisez des indices, vous pouvez simplement doubler les index. Cependant, cela n'a aucun sens pour moi que le traitement des mêmes données de sommet à plusieurs reprises avec le même état global, les résultats seraient les mêmes pour chaque duplication .

Ce que je soupçonne que vous voulez vraiment faire, c'est faire plusieurs appels Draw sur les mêmes données de vertex avec des uniformes différents.

  1. Créez des données / index de sommet (si vous le souhaitez) au démarrage
  2. Chaque cadre, définissez l'état global A, appelez DrawElements / Array, définissez l'état B, appelez DrawElements / Array
  3. De temps en temps, modifiez les données de vertex (p. Ex. Si les objets se déplacent).

Tant que vous ne modifiez pas les données de vertex, il n'y a que des téléchargements mineurs pour le gpu ( nécessitant une faible bande passante ).