3Dモデル(つまり、三角形メッシュ)の描画を処理するクラスをC ++で作成していますが、データバッファーを整理するのに最適な方法を考えています。
これが私がこれまでに知っていることです:
インターリーブされた配列を使用すると、コードが高速化されます。空間的な局所性を利用し、キャッシュヒットを増やします。これを実装するには、頂点を
struct
sに編成し、それぞれstruct
が位置/通常/texcoordなどを保持します。その頂点の情報。インデックス付き配列を使用すると、個別の頂点/法線/ texcoordなどを格納することにより、メモリ消費量が削減されます。各面のすべての情報を冗長に指定するのではなく、一度だけ、それらの配列への参照によって面を定義します。頂点属性のリストへのインデックスを使用してこれを実装することもできます。
struct
私の質問:これらの両方をどのように活用すればよいですか?両方を行うことは可能ですか?両方とも、できる限り常に使用する必要があると聞いていますが、両方を同時に使用すること、または一方を他方に使用することについては何も見つかりませんでした。
私の最初の解決策:データ配列にインデックスを持つ構造体を実装し、これらの構造体の配列とデータ配列をVBOとして渡し、基本的に2つを組み合わせます。
私は正しい方向に進んでいますか?これを行うためのより良い方法はありますか?私は何をすべき/すべきではありませんか?この決定に影響を与えることに気付いていないように思われるものはありますか?