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)

これで回転には影響を受けないようになるので、モデルが回転する事で影の落ち方が変わります。