三角形分割されたメッシュがあるとします。三角形の間に多数の繰り返し位置があり、この場合、インデックス バッファーが非常に便利になる可能性があります。
しかし、法線も必要な場合は、すべての三角形の法線が異なるため、ゲインはありません。したがって、タプル { position, normal } は一意です。テクスチャ座標やその他の機能を追加する場合、インデックス バッファが必要な理由がわかりません。
三角形分割されたメッシュがあるとします。三角形の間に多数の繰り返し位置があり、この場合、インデックス バッファーが非常に便利になる可能性があります。
しかし、法線も必要な場合は、すべての三角形の法線が異なるため、ゲインはありません。したがって、タプル { position, normal } は一意です。テクスチャ座標やその他の機能を追加する場合、インデックス バッファが必要な理由がわかりません。
法線は多くの場合、面ごとではなく頂点ごとに保存されます (面は三角形です)。1 つの頂点を共有する多数の三角形がある場合、すべての面のすべての法線を平均して、頂点の法線を取得できます。これで、レンダリング時にこれらの法線を補間するだけで、滑らかな表面が得られます。ファイルの種類によっては、三角形ごとに法線を保存できず、頂点ごとに法線だけを保存するように設計されているものもあります。これは、特にリアルタイム グラフィックスで、法線を保存および解釈するための非常に一般的な方法です。
テクスチャ座標もほとんどの場合頂点ごとです。表面が滑らかな場合は、テクスチャを突然変更する必要はほとんどありません。表面に見えるようにするには、単純にそれらをテクスチャに配置しますが、座標は同じに保ちます。したがって、頂点ごとにテクスチャ座標を完全に保存できます。
話の教訓は、実際に面ごとに保存する必要があるものはほとんどないということです。 必要なデータのほとんどは、頂点ごとの表現に変換できます。特に法線とテクスチャ座標は、面ごとではなく頂点ごとに必要になることがよくあります。
また、余談ですが、滑らかな表面ではなく平らな表面が必要な場合 (三角形が見えるようにするため)、各面に対して 1 つの頂点を実際に選択し、その余分なデータのみを表面に使用することができます。たとえば、各三角形の最初の頂点には、その三角形の法線、テクスチャ座標などが格納されます。これにより、必要のない余分なデータを含む多数の頂点が最後に残りますが、これは多数の複製頂点よりもはるかに優れています。OpenGL では、この手法はシェーダーでのフラット補間によって実現できますが、Direct3D に相当するものが何であるかはわかりません。