Xファイルの読み込み 第2回 〜インデックスバッファを使う〜

前回の続きです。今日はネイティブのDirectXとは作り方が少し違うインデックスバッファの使い方を紹介しましょう。(このノリ、ホントに日記か?) 3Dの物体は基本的に三角形の集まりで表現されています。いわゆるポリゴンやらプリミティブやらというやつですね。三角形を作るには当然3つの頂点が必要です。もし、ある物体が100個の三角形で構成されているならば、単純に300個の頂点が必要になります。ですが、実際にはもっと少ない頂点数で表現できるはずです。簡単に言えば、この計算は四角形を表現するのに4つの頂点ではなく6つの頂点が必要になるということです。ちょっと効率が悪いですね。

これをちょっと効率よく表現するのがインデックスバッファというやつです。これを使うと、四角形を頂点4つと、面(三角形)が2つという形で表現できます。頂点一つのデータにはX,Y,Z,Nx,Ny,Nz,Tu,Tvの浮動小数点数が入っていますが、面の情報はその面を構成する頂点のインデックス番号を3つ格納しておくだけで十分です。これから考えても、メモリの効率はよさそうですね。

それでは、DirectX9のインデックスバッファの仕組みというか、構造を紹介します。

ん〜日記クオリティーなので、ちょっとわかりづらい絵です。何が言いたいかというと、インデックスバッファは頂点4つから、頂点6つへの橋渡しをしているということです。また、インデックス3つ組で面を表現しています。頂点データは基本的に頂点の配列として格納されていて(まぁ、頂点バッファを作っちゃうんですが)、インデックスバッファにはその頂点配列へのインデックス番号が配列で格納されているのです。この二つの配列をDirectXの扱う形式にしてレンダリングパイプラインに登録します。