前回はポイントレンダリングでボクセルを描画しましたが、今度はMineCraftと似たような
描画方法を実装してみました(個人的にはボックスレンダリングと名付けてます)。
実装方法について少し説明すると、ボクセルの各頂点を頂点バッファに用意するとバッファ
の再生成に時間がかかるだろうなと思ったので、ボックス1つ分の頂点バッファと各ボック
スごとのインスタンスデータの頂点バッファの2つを作成し、ハードウェアインスタンシング
で描画するようにしました。インスタンスデータの頂点バッファは空間番号のインデックス
とカラー情報を持っていて、インデックス番号に合わせてボックスの位置を移動させて描画
という感じです。動画ではLMBクリックで生成、RMBクリックで削除という操作方法ですが、
色の選択はまだ実装していないのでとりあえずランダムな色で描画してみました。
それにしても、始めはByte型のインデックスをHLSLでfloatに変換して使おうとしたので
すが、シェーダ4.0じゃないと整数演算は出来ないみたいですね。なのでシェーダ2.0でも
使えるようにやむなくインデックスをfloatで作成しましたが。やっぱりGPUに転送するサイ
ズが小さい方が早いだろうな。