Tampons d'index OpenGL : traitement des indices disparates
Lors de l'importation de données de maillage personnalisées à partir d'un logiciel tiers comme 3ds Max, vous pouvez rencontrer des écarts entre sommets et indices normaux. Étant donné qu'OpenGL utilise un seul tampon d'index pour les sommets et les normales, cela pose un défi.
Solution 1 : Combiner les données de sommet et normales
Une approche consiste à créer un tampon de sommets combiné qui contient à la fois des données de sommet et des données normales. Cela nécessite d'identifier des paires uniques (index de sommet, index normal) et de créer un nouveau sommet pour chaque paire.
À l'aide des cartes STL, créez une clé pour chaque paire (index de sommet, index normal). Parcourez les triangles, récupérez les paires (index de sommet, index normal) à chaque coin et vérifiez s'il existe une entrée existante dans la carte. Sinon, créez un nouveau sommet avec le sommet correspondant et les coordonnées normales dans le tableau combinéVertices et mettez à jour la carte. Enfin, ajoutez l'index combiné pour chaque sommet au tableau CombinedIndices.
Exemple de pseudo-code :
nextCombinedIdx = 0 indexMap = empty for triangle in input file: for corner in triangle: vertexIdx = ... normalIdx = ... if key(vertexIdx, normalIdx) in indexMap: combinedIdx = indexMap[key(vertexIdx, normalIdx)] else: combinedIdx = nextCombinedIdx indexMap[key(vertexIdx, normalIdx)] = combinedIdx nextCombinedIdx = nextCombinedIdx + 1 combinedVertices[combinedIdx] = inVertices[vertexIdx], inNormals[normalIdx] combinedIndices[combinedIdx] = combinedIdx
Solution 2 : Tri des données
Vous pouvez également trier les données de sommet/normale pour les rendre compatibles avec glDrawArrays. Cependant, cela peut être problématique si vous avez des sommets en double.
Vous devrez créer un mappage à partir des indices de sommets d'origine vers leurs nouveaux indices triés. Lorsque vous rencontrez un sommet en double, attribuez-lui l'index de son homologue vu précédemment. Cependant, cette approche peut nécessiter un traitement et une restructuration approfondis des données.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!