You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Hieroglyph3项目HLSL着色器报错X3004:未声明标识符'output'求助

错误原因分析及修复方案

触发X3004错误的直接原因

在顶点着色器函数VSMain中,你使用了两个未声明的变量output和input:

output.tex = input.tex;

当前函数内的输出变量是o(通过VS_OUTPUT o;定义),输入参数是v(函数签名in VS_INPUT v),这两个变量名与你写的output/input完全不匹配,HLSL编译器无法识别未声明的标识符,因此抛出X3004错误。

附带的其他潜在错误

除了上述问题,像素着色器PSMain中还有一个大小写错误:

return(sampledtexturecolour);

你之前定义的变量是sampledTextureColour(驼峰命名,T和C为大写),HLSL是大小写敏感的编程语言,这个写法会导致另一个未声明标识符错误,需要一并修正。

修复后的完整代码

//---------------------------------

Texture2D DiffuseTexture : register(t0);
SamplerState TextureSampler : register(s0);

cbuffer Transforms
{
    matrix WorldMatrix;
    matrix ViewMatrix;
    matrix ProjMatrix;
};

//---------------------------------
struct VS_INPUT
{
    float4 position : POSITION;
    float4 color : COLOR;
    float2 tex : TEXCOORD0;
};


struct VS_OUTPUT
{
    float4 position : SV_POSITION;
    float4 color : COLOR;
    float2 tex : TEXCOORD0;
};



//----------------------------------
VS_OUTPUT VSMain(in VS_INPUT v)
{
    VS_OUTPUT o;

    float4 WorldSpace = mul(v.position, WorldMatrix);
    float4 ViewSpace = mul(WorldSpace, ViewMatrix);
    float4 ScreenSpace = mul(ViewSpace, ProjMatrix);

    o.position = ScreenSpace;
    o.color = v.color;

    o.tex = v.tex; // 修正变量名

    return o;
}


//-----------------------------------
float4 PSMain(in VS_OUTPUT input) : SV_Target
{
    float4 sampledTextureColour = DiffuseTexture.Sample(TextureSampler, input.tex);
    return(sampledTextureColour); // 修正大小写
}

内容的提问来源于stack exchange,提问作者HarryButler21

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 06:04:52