gpt4 book ai didi

direct3d - 通过 HLSL 中的像素着色器传递颜色

转载 作者:行者123 更新时间:2023-12-04 15:13:12 26 4
gpt4 key购买 nike

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

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 的 COLOR 参数的管道中使用了在此之前的顶点着色器。通过 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,禁用优化并启用调试信息。

最佳答案

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;

关于direct3d - 通过 HLSL 中的像素着色器传递颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14760920/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com