VertexShader 法線テスト+ダークカラー

物体に光を当てた反対側は、よくCGでは黒にしてしまいがちなのですが現実ではそういう事はほとんどないので、その色をダークカラーとして指定してみます。
VertexShader 法線テスト」のVertexShaderをいろいろと編集してみます。
vsample01.vsh

//c0-c3		ビュー+透視変換マトリックス
//c4		汎用固定値
//c5		平行光源向き
//c6		光源色
//c7		ダークカラー
//
//v0		頂点の座標値
//v1		法線情報

vs_1_1              // バージョン命令

def c4, 0.0f,  0.5f,  1.0f,  2.0f		//	汎用固定値
def c5, 0.707f,  0.707f,  0.0f,  0.0f	//	平行光源向き
def c6, 1.0f,  0.0f,  0.0f,  0.0f		//	光源色
def c7, 0.0f,  0.0f,  1.0f,  0.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	r0.x, r0.w, c4.y, c4.y	//	0 < r0.x < 1 (r0.x = r0.w * 0.5f + 0.5f )
sub	r0.y, c4.z, r0.x		//	r0.y = 1.0f - r0.x
mul	r1, r0.x, c6		//	光源色を設定
mad	oD0, r0.y, c7, r1		//	ダークカラー成分を加算

これを表示すると


今回は、光源の色を赤(1.0f、0.0f、0.0f)、ダークカラーを青(0.0f、.0.f、1.0f)にしてしています。
青は影なのでもっと暗い青の方がよいのですが、今回は解りやすいように明るめの青にしています。