直接 X 11 纹理 FX 文件错误 X3004 未声明标识符"input"



我正在尝试对一个立方体进行纹理处理,但当我尝试运行程序时,fx文件出现错误X3004未声明的标识符"input",但input是在顶部附近声明的,所以我不知道出了什么问题。我已经尽力争取了4天的帮助。

该代码包括diffuce照明以及纹理。我认为output.tex=input.tex是个问题,但我不确定。

Texture2D txDiffuse : register(t0);
SamplerState samLinear : register(s0);
float4 textureColour = txDiffuse.Sample(samLinear, input.Tex);
struct VS_INPUT
{
    float4 Pos : POSITION;
    float2 Tex : TEXCOORD0;
};
struct PS_INPUT
{
    float4 Pos : SV_POSITION;
    float2 Tex : TEXCOORD0;
};

//--------------------------------------------------------------------------------------
// Constant Buffer Variables
//--------------------------------------------------------------------------------------
cbuffer ConstantBuffer : register( b0 )
{
    matrix World;
    matrix View;
    matrix Projection;
    float4 DiffuseMtrl;
    float4 DiffuseLight;
    float3 LightVecW;
}
//--------------------------------------------------------------------------------------
struct VS_OUTPUT
{
    float4 Pos : SV_POSITION;
    float4 Color : COLOR0;
    float2 Tex : TEXCOORD0;
};
//--------------------------------------------------------------------------------------
// Vertex Shader
//--------------------------------------------------------------------------------------
//guroud shading with diffuse lighting
VS_OUTPUT VS(float4 Pos : POSITION, float3 NormalL : NORMAL)
{
    VS_OUTPUT output = (VS_OUTPUT)0;
    output.Pos = mul(Pos, World);
    output.Pos = mul(output.Pos, View);
    output.Pos = mul(output.Pos, Projection);
    // Convert from local space to world space 
    // W component of vector is 0 as vectors cannot be translated
    float3 normalW = mul(float4(NormalL, 0.0f), World).xyz;
        normalW = normalize(normalW);
    // Compute Colour using Diffuse lighting only
    float diffuseAmount = max(dot(LightVecW, normalW), 0.0f);
    output.Color.rgb = diffuseAmount * (DiffuseMtrl * DiffuseLight).rgb;
    output.Color.a = DiffuseMtrl.a;
    return output;
    output.Tex = input.Tex;
}

//--------------------------------------------------------------------------------------
// Pixel Shader
//--------------------------------------------------------------------------------------
float4 PS( VS_OUTPUT input ) : SV_Target
{
    return input.Color;
}

错误Framework.fx(12,53-57):错误X3004:未声明的标识符"input"

您试图在任何函数之外对纹理进行采样(第4行)。您希望此代码在顶点着色器(VS)或像素着色器(PS)中的何处运行?

删除第4行并将像素着色器更改为:

return txDiffuse.Sample(samLinear, input.Tex);

您似乎有一些根本没有使用的结构(VSINPUT、PSINPUT)。顶点着色器的最后一行也不会编译,因为您使用的是"input.Tex",而顶点着色器没有名为"input"的变量。如果你不打算使用它们,请将VS的第一行更改为:

VS_OUTPUT VS(float4 Pos : POSITION, float3 NormalL : NORMAL, float2 Tex : TEXCOORD0)

着色器的结束为:

output.Color.a = DiffuseMtrl.a;
output.Tex = Tex;   
return output;    

最新更新