テレワークならECナビ Yahoo 楽天 LINEがデータ消費ゼロで月額500円〜!
無料ホームページ 無料のクレジットカード 海外格安航空券 海外旅行保険が無料! 海外ホテル


log

2012.04.09 C++:ボクセルその2


前回はポイントレンダリングでボクセルを描画しましたが、今度はMineCraftと似たような
描画方法を実装してみました(個人的にはボックスレンダリングと名付けてます)。

実装方法について少し説明すると、ボクセルの各頂点を頂点バッファに用意するとバッファ
の再生成に時間がかかるだろうなと思ったので、ボックス1つ分の頂点バッファと各ボック
スごとのインスタンスデータの頂点バッファの2つを作成し、ハードウェアインスタンシング
で描画するようにしました。インスタンスデータの頂点バッファは空間番号のインデックス
とカラー情報を持っていて、インデックス番号に合わせてボックスの位置を移動させて描画
という感じです。動画ではLMBクリックで生成、RMBクリックで削除という操作方法ですが、
色の選択はまだ実装していないのでとりあえずランダムな色で描画してみました。

それにしても、始めはByte型のインデックスをHLSLでfloatに変換して使おうとしたので
すが、シェーダ4.0じゃないと整数演算は出来ないみたいですね。なのでシェーダ2.0でも
使えるようにやむなくインデックスをfloatで作成しましたが。やっぱりGPUに転送するサイ
ズが小さい方が早いだろうな。

comment

たけなか 2012.04.09-23:28 Edit

floatじゃなくてDWORDのカラーで渡せばHLSL側で自動的に0~1の
floatに変換されるので演算できるな、とふと気が付いたのであった。