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
これをつかうと