OpenGL インデックス バッファの問題
3D メッシュ データを含むカスタム ファイル形式を扱う場合、インデックスを個別に作成するという課題に遭遇することは珍しくありません。頂点と法線。ただし、OpenGL には単一セットのインデックスが必要です。
ジレンマの克服
この問題を解決する鍵は、頂点と頂点の一意のペアごとに OpenGL 頂点を作成することです。通常のインデックス。
アルゴリズム詳細
頂点座標 (inVertices) と法線 (inNormals) の配列があると仮定すると、STL マップを利用して、それぞれの一意の頂点と法線のペア (key(vertexIdx, NormalIdx)) を結合された頂点インデックス (combinedIdx)。簡略化された疑似コードの概要は次のとおりです。
nextCombinedIdx = 0 indexMap = empty for each triangle in input file: for each corner: read vertexIdx and normalIdx if indexMap.contains(key(vertexIdx, normalIdx)): combinedIdx = indexMap.get(key(vertexIdx, normalIdx)) else: combinedIdx = nextCombinedIdx indexMap.add(key(vertexIdx, normalIdx), combinedIdx) nextCombinedIdx++ combinedVertices.add(inVertices[vertexIdx], inNormals[normalIdx]) combinedIndices.add(combinedIdx)
このアルゴリズムは、結合された頂点の新しい配列 (combinedVertices) と対応するインデックス リスト (combinedIndices) を構築します。 combedVertices の各要素は完全な頂点と法線のペアを表すため、glDrawArrays(GL_TRIANGLES,...) を使用してレンダリングできます。
このアプローチには頂点の重複が含まれますが、互換性のない頂点と法線の問題は効果的に解決されます。正しいメッシュ レンダリングを保証しながらインデックスを作成します。
以上がOpenGL で別々の頂点インデックスと法線インデックスを使用してメッシュをレンダリングするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。