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(); } }
//--------------------------------------------------------------- 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(); } }