ダンジョン地形の描画処理

ものすごくだだっ広いダンジョンをつくらなきゃいかんと思っているので、マップを一つ一つモデルとして作りこんでいくような作業はできないわけです。そこで2Dでおなじみのマップチップを並べる方式で地形を書き出そうと思ったのです。パレットのインデックスが並んだビットマップを参照しつつ、レゴブロックみたいに地面を小分けにしたパネルが並んだオブジェクトファイルからパレットの該当部分を所定の場所に書き出してあげるわけです。しかしこれ、2D由来のアイデアだけあって軽いだろうと思いきや、意外にも描画するブロックがちょっと増えるだけで目に見えてパフォーマンスが下がってきます。画面にあるブロックの数だけDrawPrimitiveを呼び出しているのが原因です。一つの部屋が大体100ブロックくらいになりますが、普段は隣の部屋まで描画するので、多くなると400くらいになります。うち(GeForce4MX)ではこのへんでFPSが低下しはじめました。

そこでDrawPrimitiveの呼び出し回数を減らすため、表示することが決まった部屋ごとにVertexBufferを作って、描画時ではなくこの時点でマップチップをVertexBufferの方へ並べてしまって、描画時には部屋一個を丸ごとDrawPrimitiveするようにしました。