頂点、頂点インデックス、および個別のインデックスを持つ法線を含むカスタム ファイル形式があるシナリオでは、次のような問題が発生します。単一のインデックスを利用する OpenGL の頂点モデルとは一致しない課題buffer.
解決策は、頂点インデックスと法線インデックスの一意の組み合わせごとに OpenGL 頂点を作成することにあります。 STL マップのようなデータ構造を利用すると、このプロセスを簡素化できます。
頂点が inVertices[vertexIdx] に格納され、法線が inNormals[normalIdx] に格納される配列 inVertices と inNormals を考慮すると、次の疑似コードはアプローチの概要を示します。
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 中国語 Web サイトの他の関連記事を参照してください。