Dans votre scénario, où vous disposez d'un format de fichier personnalisé avec des sommets, des indices de sommet et des normales avec des indices séparés, vous rencontrez un défi qui ne correspond pas au modèle de sommet d'OpenGL, qui utilise un seul tampon d'index.
La solution réside dans la création d'un sommet OpenGL pour chaque combinaison unique d'indice de sommet et d'indice normal. L'utilisation de structures de données comme une carte STL peut simplifier ce processus.
Considérant vos tableaux inVertices et inNormals, où les sommets sont stockés dans inVertices[vertexIdx] et les normales dans inNormals[normalIdx], le pseudo-code suivant décrit l'approche :
nextCombinedIdx = 0 indexMap = empty foreach triangle in input file: foreach corner of triangle: read vertexIdx and normalIdx if indexMap.contains((vertexIdx, normalIdx)): combinedIdx = indexMap.get((vertexIdx, normalIdx)) else: combinedIdx = nextCombinedIdx indexMap.add((vertexIdx, normalIdx), combinedIdx) nextCombinedIdx = nextCombinedIdx + 1 combinedVertices.add(inVertices[vertexIdx], inNormals[normalIdx]) combinedIndices.add(combinedIdx)
Ce processus garantit que chaque coin de triangle est représenté par un OpenGL unique sommet, combinant à la fois les informations sur le sommet et la normale. En utilisant une structure de données comme une carte, vous pouvez mapper efficacement les paires sommet-normal à leurs indices OpenGL correspondants.
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!