ホーム < ゲームつくろー! < プログラマブルシェーダ編
シェーダ編
その5 0から学ぶ法線マップ:サンプルプログラム
DirectXプログラマブルシェーダ編シェーダ編「その5 0から学ぶ法線マップ」で説明した内容を踏まえたサンプルプログラムです。実行すると地球のマップと法線マップが貼られた球にディレクショナルライトが当たります。
サンプルスクリーンショット。インドの北辺りに凹凸がありますね。
このプログラムはピクセルシェーダ2.0以上で動作します。
○ プログラムの動かし方
こちらからプログラムをダウンロード(DXPSSmp_S_No5.lzh)します。解凍するとSourceフォルダに必要なコードが格納されています。空のプロジェクトを生成し.hと.cppそして.fxをプロジェクト直下に置き、main.cppをプロジェクトに追加します。リソースはプロジェクトの1つ上のフォルダに置いて下さい。具体的なフォルダ構成は次のようになります:
ソルーションフォルダ
Resourceフォルダ
NormalMap.dds // 法線マップ
DiffuseMap.dds // ディフューズマップ
Sphere.x // 球モデル
プロジェクトフォルダ
main.cpp // メイン関数
DixComPtr.h // COMポインタ
NormalMap.fx // 法線マップを貼り付けるエフェクト
真っ白な画面や上のような画面にならない場合、シェーダのバージョンが低い可能性があります。
(もしうまく動かないようでしたら掲示板にてご連絡下さい)
○ プログラムのポイント
法線マップを貼っているエフェクトファイルがすべてです。頂点シェーダでライトの方向を接空間に持って行き、ピクセルシェーダで法線マップのベクトルとの角度を算出して明度を決定しています。ソース自体は簡単ですが、何故そうなるかの理屈が色々と大変なんです。それについて詳しくはその5をご覧下さい。