试图学习着色器并让一个死的简单定向光源工作,但我只是变黑了。如果我返回 input.Col 一切都很好,所以我知道这与这些正常的计算有关,但完全不知道出了什么问题?我正在努力理解着色器,特别是从哪里获取/设置 matWorld 或者它应该是什么(我尝试将它设置为 Identity 矩阵),或者它是否是自己神奇地设置的东西。worldViewProj 我从代码设置
float4 vecLightDir = normalize(float4(1.0f, 1.0f, 1.0f,0.0f));
float4x4 worldViewProj : WORLDVIEWPROJECTION;
float4x4 matWorld : WORLD;
struct VS_IN
{
float4 Pos : POSITION;
float4 Col : COLOR0;
float3 Norm : NORMAL;
};
struct PS_IN
{
float4 Pos : POSITION;
float4 Col : COLOR0;
float3 Light: TEXCOORD0;
float3 Norm : TEXCOORD1;
};
PS_IN VS( VS_IN input )
{
PS_IN Out = (PS_IN)0;
Out.Pos = mul(input.Pos, worldViewProj);
Out.Light = normalize(vecLightDir);
Out.Norm = -normalize(mul(input.Norm, matWorld));
Out.Col = input.Col;
return Out;
}
float4 PS(PS_IN input) : COLOR
{
float4 result=input.Col *(dot(input.Norm,input.Light));
return result;
}
technique TVertexAndPixelShader
{
pass P0
{
// shaders
VertexShader = compile vs_2_0 VS();
PixelShader = compile ps_2_0 PS();
}
}