HLS その2

法線テスト+ダークカラー+スペキュラ 」をHLSLに置き換えると
vsample01.fx

//---------------------------------------------------------------
float4x4 mWVP;

struct VS_OUTPUT
{
	float4 Pos  : POSITION;
	float4 Col  : COLOR0;
};

//---------------------------------------------------------------
VS_OUTPUT VS( float4 Pos : POSITION, float3 Normal : NORMAL )
{
	VS_OUTPUT Out = (VS_OUTPUT)0;
	float4	diffuse = { 1.0f, 0.0f, 0.0f, 0.0f};
	float4	dcolor = { 0.0f, 0.0f,  0.3f, 0.0f};
	float3	dir     = {0.506f, 0.506f,0.506f};
	float	r;

	Out.Pos	= mul(Pos, mWVP);
	r	= mul(dir,  mul(Normal, mWVP)) * 0.5f + 0.5f;
	Out.Col	= diffuse * r + dcolor * (1.0f-r) ;
	return Out;
}
//---------------------------------------------------------------
technique TShader
{
	pass P0
	{
		VertexShader= compile vs_1_1 VS();
	}
}

■せっかくHLSLを使用しているので、ちょっと整理したプログラムだと
vsample01.fx

//---------------------------------------------------------------
float4x4 mWVP;

struct VS_OUTPUT
{
	float4 Pos  : POSITION;
	float4 Col  : COLOR0;
};

//---------------------------------------------------------------
VS_OUTPUT VS( float4 Pos : POSITION, float3 Normal : NORMAL )
{
	VS_OUTPUT Out = (VS_OUTPUT)0;
	float4 diffuse = { 1.0f, 0.0f, 0.0f, 0.0f};
	float4 amb     = { 0.0f, 0.0f, 0.3f, 0.0f};
	float3 dir     = {0.506f, 0.506f,0.506f};

	Out.Pos		= mul(Pos, mWVP);
	Out.Col		= diffuse * max( dot(dir, mul(Normal, mWVP)), 0) + amb;
	return Out;
}
//---------------------------------------------------------------
technique TShader
{
	pass P0
	{
		VertexShader= compile vs_1_1 VS();
	}
}


■スペキュラをONにして

//---------------------------------------------------------------
float4x4 mWVP;

struct VS_OUTPUT
{
	float4 Col0	: COLOR0;
	float4 Col1	: COLOR1;
};

//---------------------------------------------------------------
VS_OUTPUT VS( float4 Pos : POSITION, float3 Normal : NORMAL )
{
	VS_OUTPUT2 Out = (VS_OUTPUT2)0;
	float4	diffuse = { 1.0f, 0.0f, 0.0f, 0.0f};
	float4	amb     = { 0.0f, 0.0f, 0.3f, 0.0f};
	float3	dir     = { 0.506f, 0.506f,0.506f};
	float	r;

	Out.Pos	= mul(Pos, mWVP);
	r	= max( dot(dir, mul(Normal, mWVP)), 0);
	Out.Col0	= diffuse * r + amb;
	Out.Col1	= r-1.0f;
	return Out;
}
//---------------------------------------------------------------
technique TShader
{
	pass P0
	{
		VertexShader= compile vs_1_1 VS();
	}
}