描画に関係しないシステム的な部分。ロードのインターフェイス。(空デカール)あと、実行ファイル及び、プロジェクトファイルが入っています。■やっていること正規化キューブマップとは、ベクトルを正規化するために使います。実際の使い方としては、頂点シェーダで法線ベクトル等をピクセルシェーダに渡すことが多いです。正規化キューブマップを使って正規化してスペキュラ計算などを行ないます。正規化キューブマップとは、次の色をしたキューブマップです(切り取って張り合わせてみよう!)。法線マップのように色落とし込みます。正規化キューブマップを使って、ワールド座標での法線ベクトルをマッピングすると、になります。法線ベクトルの向きに応じて色が付けられているのが見て取れます。ハーフベクトルならになります。ハーフベクトルは、視線ベクトルが頂点座標で決まるので、位置に関して滑らかな変化を見せます。CreateCubeTextureでテクスチャを生成します。あとは、算術的にテクスチャを作成する関数のD3DXFillCubeTextureを使ってテクスチャを塗りつぶします。hr;キューブマップを塗りつぶす部分は、次のようになります。テクスチャの座標を正規化した後に、0~1に値をクランプして、色として出力します。}実際の使い方は、普通のテクスチャと何ら変わりません。設定して、テクスチャを使います。);■シェーダでは、表示するためのシェーダを見ていきましょう。法線ベクトル、oT1にハーフベクトルを出力します。c4座標変換と、拡散光は普通に計算します。正規化は正規化キューブマップがやってくれるので、正規化しないで出力します。法線ベクトルは、ワールド座標系に変換してから出力します。ここまで作って気が付いたのですが、ローカル座標系で計算すれば命令数が減らせそうですね。法線、ハーフベクトル共に正規化キューブマップで正規化して、べき乗して鏡面反射成分を求めます。拡散光_bx2修飾子をつけると、サンプリングした色をそのままベクトルとして使えます。後は、内積の負の部分は要らないので、_sat修飾子で負の部分を切り取りました。■テクスチャサイズさて、タイトルの絵のキューブマップの大きさは、512x512です。メモリを使っています。現在の128MBが標準のビデオメモリとしては5%程度の大きさですが、皆さんは、この大きさを許せますか?では、サイズが変わったときの変化を見ていきましょう。テクスチャのサイズを16x16にすると、次の画像が得られます。中央の車の窓に注目してください。ひし形の模様が見えると思います。これが解像度が小さいテクスチャの結果です。比較として、512x512の画像を見ると、のように、模様は目立ちませんが、ざらついています。勇気がいるサイズです)。中間を見てみますと、128x128でになります。見る人が見れば気になるレベルになっています。なんともいえませんね。メモリと相談して、サイズを決めてください。あっ、そういえば、ミップマップをしていないので、それで変わるかも。■最後にさて、正規化キューブマップをやってみました。DirectX8世代のグラフィックチップの対応にまだまだ使われる技術だと思います。一個作っておけば、使いまわせるので、1つ用意されてはいかがでしょうか。もどるimagire@gmail.com。