OpenGL 索引緩衝區:處理不同的索引
從3ds Max 等第三方軟體匯入自訂網格資料時,您可能會遇到以下差異:頂點和法線索引。由於 OpenGL 對頂點和法線都使用單一索引緩衝區,這帶來了挑戰。
解決方案 1:組合頂點和法線資料
一種方法是建立一個包含頂點資料和法線資料的組合頂點緩衝區。這需要識別唯一的(頂點索引、法線索引)對並為每對建立一個新頂點。
使用 STL 映射,為每個(頂點索引、法線索引)對建立一個鍵。迭代三角形,檢索每個角落的(頂點索引,法線索引)對,並檢查地圖中是否存在現有條目。如果沒有,則使用combinedVertices數組中對應的頂點和法線座標建立新頂點並更新貼圖。最後,將每個頂點的組合索引加入到combinedIndices數組中。
範例偽代碼:
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
解決方案2:排序資料
或者,您可以對頂點/法線資料進行排序以使其相容於使用glDrawArrays。但是,如果您有重複的頂點,這可能會出現問題。
您需要建立從原始頂點索引到新排序索引的對應。當遇到重複頂點時,為其分配先前見過的對應頂點的索引。然而,這種方法可能需要大量的資料處理和重組。
以上是如何處理 OpenGL 索引緩衝區中不符合的頂點和法線索引?的詳細內容。更多資訊請關注PHP中文網其他相關文章!