使うことが前回との違いです。S_OK;}描画部分は一箇所だけ異なります。バーテックスシェーダーのプログラムを、そう変えただけで、深い意味はありません。肝心かなめのバーテックスシェーダープログラムですが、次のようになります。これが頂点色になります。成分を、そのまま、コピーします。これで、頂点の色が反映されたポリゴンの表示ができます。平行光源は、太陽のような非常に遠方にあり、ほとんど光が広がらないライトをシミュレートしたものです。内積(の関数)になります。したがって、頂点に法線情報を追加します。D3DVSD_END()};初期化は、先ほどの例と、頂点のデータが違うだけです。今回は、光の表現をディフォルメするために、法線を面の外側に少し広げました。広げないときには、各頂点に関する光の強さが変化しないので、面に当たる光の強さが一様になります。1.0f,1.0f,},};描画部分は、ちょいと違います。2);}この時に、ワールド行列の逆行列を掛けました。ポリゴンが回転すると、法線も回転する必要があるので、その計算をしています。各頂点の法線を毎回ワールド座標に変換するのは、計算量が多いので、ライトが固定して、ポリゴンが回る=ポリゴンを固定して、ライトを逆方向に回すということを利用して、ライトにワールド行列の逆行列を掛けることで、ワールド座標への変換を済ませています。各頂点の法線を全て変換していたら、行列変換が数百~数千頂点の計算が必要です。それを行列演算一回ですましたことになります。texcoordsさて、シェーダープログラムです。光が強く当たっている時なので、そのときに色が1になるように調整しました。全ての成分に入ります。したがって、光の色は白になります。■頂点色付き平行光源さて、以上の二つの合成です。頂点に法線と、頂点色の両方が入ります。D3DVSD_END()};初期化も、データが違うだけで、平行光源のものそのままです。描画に関しては、全く同じです。1.0f,1.0f,},};そして、シェーダープログラムは、次のようになります。成分だけ出力しました。演算で、頂点色に強弱をつけて、光源の影響を計算します。一般に、頂点色はデザイナーさんが付けて、物体の質感を高めます。光源計算は、ライトの影響によって物体に存在感を与えます。頂点色だけで物体を表現することも多いです。したがって、この計算ができれば、光源計算はできたと思ってもいいと思います。■今後これで、普通の光源計算はできました。この後、バーテックスシェーダー特有の計算に移ろうと思います。もどるimagire@gmail.com。