新しい機能を使ってみましょう。赤色成分に32ビット浮動小数点数を使います。このフォーマットを使って固定機能でテクスチャを表示すると、他の成分には255が入って表示されます(左上の画像がそれです)。シャドウマップでテクスチャフォーマットを浮動小数点数にしてみました。結果からいうと、今回は失敗です。見た目が変わりませんでした。デモのように、マルチサンプリングしてソフトシャドウにしていかないと違いが出ないかもしれません。今回の見た目がきれいなのはシャドウマップのサイズが大きいからです。2048x2048x2(FB+Z)の32メガバイトのメモリを使っています。これだけ使うと、パフォーマンスが非常に下がりますね。下のファイルがソースと実行ファイルです。カーソルキーで上下左右に動かせますし、Z,Xでズームイン、アウトができます。(浮動小数点数バッファ影:DirectX9)まぁ、いつものように適当にファイルが入っています。出力されるファイルです。以下のファイルの上から3つのファイル以外は無視してください。音楽管理あと、実行ファイル、表示用モデル及び、プロジェクトファイルが入っています。適当に解説を進めていきましょう。シャドウマップは2パスのアルゴリズムなので、エフェクトファイルにパスごとのシェーダの設定をします。}1パス目のピクセルシェーダは、アセンブリを使うことにしました。2パス目に、いよいよシェーダ2.0の登場です。ピクセルシェーダ1.1では、できないからです。してくれれば何も問題なかったのに...。サンプリングステートの設定が必要になります。範囲外のテクスチャ座標の時にクランプするかどうかなどです。};では、シェーダプログラムを見ていきましょう。頂点シェーダの出力構造体を次のようにします。作れなかったので、2つのパスでの出力を同じ構造体にしています。いくつかに分離するほうが良いかもしれません。スクリーン座標のZ値をテクスチャに埋め込むために、テクスチャ座標に出力します。その値を出力レジスタである、r0にいれます。始まるコードに、シェーダアセンブラをそのまま書くことができます。};2パス目では、シャドウマップをオブジェクトに貼り付けます。今度の座用変換は、普通の座標変換です。ピクセルシェーダに環境色を拡散色を別々に送ります。比較のために、先ほどと同じ様に求めた深度を(縞縞模様を防ぐバイアスをかませて)ピクセルシェーダに送ります。やってみると、フォーマットの違いはありませんでした。}ピクセルシェーダでは、透視変換しつつテクスチャの読み込みをして(これもシェーダ2.0の機能ですね)。3項演算子?:で、影になっているか判定して、最後の色として出力します。ライトの方向を使いました。グローバル変数のハンドルオブジェクトが必要になります。シャドウマップのためのテクスチャや深度バッファが必要になります。座標変換のための行列やライトの位置も持ちます。シェーダのバージョンを気にする必要があります。それらの条件を満たしているか調べます。この関数にチェックルーチンを仕込みます。}■初期化デバイスが使えることが分かったら、いよいよ初期化して使います。最初だけ初期化すればいいものに、メッシュやエフェクトファイルの読み込みがあります。メッシュの初期化は、フレームワークの方に読み込みメソッドがあるので、そちらを使用します。