在您的場景中,如果您有一個包含頂點、頂點索引和具有單獨索引的法線的自訂檔案格式,您會遇到這是一個與OpenGL 頂點模型不一致的挑戰,它使用單一索引緩衝區。
解決方案在於為頂點索引和法線索引的每個唯一組合建立一個 OpenGL 頂點。利用 STL 貼圖等資料結構可以簡化此過程。
考慮數組inVertices 和inNormals,其中頂點存儲在inVertices[vertexIdx] 中,法線存儲在inNormals[normalIdx] 中,以下偽代碼概述了該方法:
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)
此過程確保每個三角形角都由唯一的表示OpenGL 頂點,結合了頂點和法線資訊。透過使用像地圖這樣的資料結構,您可以有效地將頂點法線對對應到其對應的 OpenGL 索引。
以上是使用單獨的頂點索引和法線索引時如何克服 OpenGL 的單一索引緩衝區限制?的詳細內容。更多資訊請關注PHP中文網其他相關文章!