VertexShader 法線テスト+平行光源
「VertexShader 法線テスト」のVertexShaderをいろいろと編集してみます。
■その1
vsample01.vsh
//c0-c3 ビュー+透視変換マトリックス //c4 汎用固定値 //c5 光向き // //v0 頂点の座標値 //v1 法線情報 vs_1_1 // バージョン命令 def c4, 0.0f, 0.5f, 1.0f, 2.0f // 汎用固定値 def c5, 0.707f, 0.707f, 0.0f, 1.0f // 光の向き dcl_position v0 // 座標頂点宣言 dcl_normal v1 // 法線 m4x4 oPos, v0, c0 dp3 r0.w, v1, c5 // -1 < r0.w < 1 mad oD0, r0.w, c4.y, c4.y // 0 から 1 にする(r0.w * 0.5f + 0.5f)
この記述だと、モデルの回転に合わせて平行光源も回転してしまいます。
■その2
//c0-c3 ビュー+透視変換マトリックス //c4 汎用固定値 //c5 光向き // //v0 頂点の座標値 //v1 法線情報 vs_1_1 // バージョン命令 def c4, 0.0f, 0.5f, 1.0f, 2.0f // 汎用固定値 def c5, 0.707f, 0.707f, 0.0f, 1.0f // 光の向き dcl_position v0 // 座標頂点宣言 dcl_normal v1 // 法線 m4x4 oPos, v0, c0 m3x3 r0, v1, c0 dp3 r0.w, r0, c5 // -1 < r0.w < 1 mad oD0, r0.w, c4.y, c4.y // 0 から 1 にする(r0.w * 0.5f + 0.5f)
これで回転には影響を受けないようになるので、モデルが回転する事で影の落ち方が変わります。