HLSL トゥーンシェーダー

vsample01.fx

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

struct VS_OUTPUT
{
	float4 Pos	: POSITION;
	float2 Tex0	: TEXCOORD0;   //テクスチャUV
};

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

	Out.Pos		= mul(Pos, mWVP);
	Out.Tex0.x	=  dot(dir , normalize( mul(Normal, mWVP))) *0.5f+0.5f;
	return Out;
}

//---------------------------------------------------------------
technique TShader
{
	pass P0
	{
		VertexShader= compile vs_1_1 VS();
	}
}

image01.bmp

これでこんな感じ

■別のやり方だと
vsample01.fx

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

struct VS_OUTPUT
{
	float4 Pos	: POSITION;
	float2 Tex0	: TEXCOORD0;   //テクスチャUV
};

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

	Out.Pos	= mul(Pos, mWVP);
	Out.Tex0	=  normalize( dir * mul( Normal , mWVP) ) * 0.25f+0.25f;
	return Out;
}

//---------------------------------------------------------------
technique TShader
{
	pass P0
	{
		VertexShader= compile vs_1_1 VS();
	}
}

image01.bmp

これをつかうと