7

我有一个像素着色器,它应该简单地传递输入颜色,但我得到的是一个恒定的结果。我认为我的语法可能是问题所在。这是着色器:

struct PixelShaderInput
{
    float3 color : COLOR;
};

struct PixelShaderOutput
{
    float4 color : SV_TARGET0;
};

PixelShaderOutput main(PixelShaderInput input)
{
    PixelShaderOutput output; 
    output.color.rgba = float4(input.color, 1.0f); // input.color is 0.5, 0.5, 0.5; output is black
    // output.color.rgba = float4(0.5f, 0.5f, 0.5f, 1); // output is gray
    return output;
}

为了进行测试,我在管道中使用了位于此之前的顶点着色器,并传递了 0.5、0.5、0.5 的颜色参数。通过 VisualStudio 中的像素着色器,input.color 具有正确的值,并且这些值被正确地分配给 output.color。但是,在渲染时,使用此着色器的顶点都是黑色的。

这是顶点着色器元素描述:

const D3D11_INPUT_ELEMENT_DESC vertexDesc[] = 
{
    { "POSITION",   0, DXGI_FORMAT_R32G32B32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 },
    { "COLOR",      0, DXGI_FORMAT_R32G32B32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 },
    { "TEXCOORD",   0, DXGI_FORMAT_R32G32_FLOAT,    0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 },
};

我不确定顶点着色器将颜色与 RGB 输出相同是否重要,但像素着色器输出 RGBA。alpha 层至少可以正常工作。

如果我注释掉第一个分配,即使用 input.color 的分配,并取消注释另一个分配,使用显式值,则渲染的像素是灰色的(如预期的那样)。

关于我在这里做错了什么的任何想法?

我正在使用着色器模型 4 级别 9_1,禁用了优化并启用了调试信息。

4

3 回答 3

4
output.color.rgba = float4(input.color, 1.0f);

你的 input.color 是一个 float4,你将它传递给另一个 float4,我认为这应该可以

output.color.rgba = float4(input.color.rgb, 1.0f);

这就是您只需简单地通过它所需的全部内容

 return input.color;

如果您想将颜色更改为红色,请执行以下操作

input.color = float4(1.0f, 0.0f, 0.0f, 1.0f);
return input.color;
于 2013-03-17T03:03:14.183 回答
1

*你确定你的顶点在他们应该在的地方吗?你开始让我怀疑我的 D3D 知识。:P 我相信你的问题是你只传递一种颜色,着色器的两个部分都需要一个位置才能工作。您的 PixelShaderInput 布局应该是: struct PixelShaderInput { float4 position :SV_POSITION; float3 颜色:颜色;};*

你可以试试这个作为你的像素着色器吗?:

float4 main(float3 color : COLOR) : SV_TARGET
{
    return float4(color, 1.0f);
}
于 2013-02-27T16:18:22.460 回答
0

我从未见过这种构造函数

float4(input.color, 1.0f);

这可能是问题所在,但我可能是错的。尝试像这样一一传递浮点值:

float4(input.color[0], input.color[1], input.color[2], 1.0f);

编辑:

实际上,您可能必须使用 float4 作为颜色的类型(http://msdn.microsoft.com/en-us/library/windows/desktop/bb509647(v=vs.85).aspx

于 2013-02-07T23:05:59.517 回答