Vector 为什么我的法向量总是空的?HLSL
我正在尝试使用HLSL创建一个基本的漫反射着色器,使用。着色器运行时不会出错,并且可以显示三角形,但似乎从未为顶点着色器的法线输入指定值,这会导致漫反射照明中断。我通过将输出颜色设置为白色,然后减去正常值来测试这一点,但颜色没有任何变化,而是保持白色。我的着色器代码如下Vector 为什么我的法向量总是空的?HLSL,vector,xna,shader,hlsl,lighting,Vector,Xna,Shader,Hlsl,Lighting,我正在尝试使用HLSL创建一个基本的漫反射着色器,使用。着色器运行时不会出错,并且可以显示三角形,但似乎从未为顶点着色器的法线输入指定值,这会导致漫反射照明中断。我通过将输出颜色设置为白色,然后减去正常值来测试这一点,但颜色没有任何变化,而是保持白色。我的着色器代码如下 float4x4 World; float4x4 View; float4x4 Projection; float4x4 WorldInverseTranspose; float3 DiffuseLightDirection
float4x4 World;
float4x4 View;
float4x4 Projection;
float4x4 WorldInverseTranspose;
float3 DiffuseLightDirection = float3(1, 0, 0);
float4 DiffuseColor = float4(1, 1, 1, 1);
float DiffuseIntensity = 1.0;
float4 AmbientColor = float4(1, 1, 1, 1);
float AmbientIntensity = 0.1;
struct VertexShaderInput
{
float4 Position : POSITION0;
float4 Normal : NORMAL0;
};
struct VertexShaderOutput
{
float4 Position : POSITION0;
float4 Color : COLOR0;
};
VertexShaderOutput VertexShaderFunction(VertexShaderInput input)
{
VertexShaderOutput output;
float4 worldPosition = mul(input.Position, World);
float4 viewPosition = mul(worldPosition, View);
output.Position = mul(viewPosition, Projection);
float4 normal = mul(input.Normal, WorldInverseTranspose);
float lightIntensity = dot(normal, DiffuseLightDirection);
output.Color = saturate(DiffuseColor * DiffuseIntensity * lightIntensity);;
return output;
}
float4 PixelShaderFunction(VertexShaderOutput input) : COLOR0
{
return saturate(input.Color + AmbientColor * AmbientIntensity);
}
technique Diffuse
{
pass Pass1
{
VertexShader = compile vs_2_0 VertexShaderFunction();
PixelShader = compile ps_2_0 PixelShaderFunction();
}
}
编辑:
我认为这可能是因为我没有直接将法线传递给着色器,但是如果没有内置的方法,我不知道如何计算法线