わかりました... 6 つの異なる法線を持つ比較的単純なソリッドがあるとしますが、実際には 48 面 (方向ごとに 8 面) 近くの面があり、面間に多くの共有頂点があるとします。OpenGLでそれをレンダリングする最も効率的な方法は何ですか?
頂点を配列に配置し、インデックス配列を使用してそれらをレンダリングできることはわかっていますが、法線を変更するには、レンダリング手順を分割し続ける必要があります (つまり、法線 1 を設定... 8 つの面をレンダリング... 法線を設定) 2... 8 つの面をレンダリングするなど) そのため、インデックス配列の配列を維持する必要があります...法線ごとに 1 つです! 良くない!
別の法線配列と頂点配列を使用する (またはそれらをインターリーブする) こともできますが、これは、法線と頂点の比率を 1 対 1 にする必要があることを意味し、法線が 8 倍以上複製されることを意味します。必要以上に!球面または曲面のあるものでは、すべての法線が異なる可能性が最も高いですが、これについては、メモリの無駄のように思えます.
完璧な世界では、頂点と法線配列の長さが異なるようにしたいので、三角形または四角形を描画するときに、その頂点の各配列へのインデックスを指定します。
OBJ ファイル形式では、正確にそれを指定できます... 頂点配列と異なる長さの法線配列を指定すると、レンダリングする面を指定するときに、頂点と法線インデックス (および場合は UV 座標) を指定します。あなたもテクスチャを使用しています)これは完璧なソリューションのようです! 48 個の頂点がありますが、法線は 8 個しかありません。次に、シェイプの面を定義するインデックスのペアです。しかし、OpenGL ES でそれをレンダリングする方法がわかりません (繰り返しますが、'ES' に注意してください)。現在、法線を 1 対 1 に戻す必要があります頂点配列、次にレンダリングします。記憶を無駄にするだけです。
誰か助けて?ここで非常に単純なものが欠けていることを願っています。
マーク