Vector 为什么我的法向量总是空的?HLSL

Vector 为什么我的法向量总是空的?HLSL,vector,xna,shader,hlsl,lighting,Vector,Xna,Shader,Hlsl,Lighting,我正在尝试使用HLSL创建一个基本的漫反射着色器,使用。着色器运行时不会出错,并且可以显示三角形,但似乎从未为顶点着色器的法线输入指定值,这会导致漫反射照明中断。我通过将输出颜色设置为白色,然后减去正常值来测试这一点,但颜色没有任何变化,而是保持白色。我的着色器代码如下 float4x4 World; float4x4 View; float4x4 Projection; float4x4 WorldInverseTranspose; float3 DiffuseLightDirection

我正在尝试使用HLSL创建一个基本的漫反射着色器,使用。着色器运行时不会出错,并且可以显示三角形,但似乎从未为顶点着色器的法线输入指定值,这会导致漫反射照明中断。我通过将输出颜色设置为白色,然后减去正常值来测试这一点,但颜色没有任何变化,而是保持白色。我的着色器代码如下

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

编辑: 我认为这可能是因为我没有直接将法线传递给着色器,但是如果没有内置的方法,我不知道如何计算法线