我试图在DirectX 11中实现延迟着色,C++。我设法创建了G-Buffer并渲染了我的场景(选中了“GPU PerfStudio”)。我在最后的照明阶段遇到困难。我无法使用SV_Position返回的坐标从纹理(漫反射,正常,高光)读取。在HLSL 5.0中读取和写入纹理(延迟着色)
这是用于将光渲染为形状的像素着色器。
Texture2D<float4> Diffuse : register(t0);
Texture2D<float4> Normal : register(t1);
Texture2D<float4> Position : register(t2);
cbuffer MaterialBuffer : register(b1)
{
float4 ambient;
float4 diffuse;
float4 specular;
}
//--------------------------------------------------------------------------------------
struct VS_OUTPUT
{
float4 Pos : SV_POSITION;
float4 PosVS: POSITION;
float4 Color : COLOR0;
float4 normal : NORMAL;
};
float4 main(VS_OUTPUT input) : SV_TARGET
{
//return Diffuse[screenPosition.xy]+Normal[screenPosition.xy]+Position[screenPosition.xy];
//return float4(1.0f, 1.0f, 1.0f, 1.0f);
//--------------------------------------------------------------------------------------
//Problematic line
float4 b=Diffuse.Load(int3(input.Pos.xy,0));
//--------------------------------------------------------------------------------------
return b;
}
我检查了“GPU PerfStudio”输入纹理的正确绑定。
上面的代码返回我用来清除纹理颜色(从我调试我发现,在像素位置0,0其返回值)
如果我和更换有问题的行: - 。
float4 b=Diffuse.Load(int3(350,300,0));
然后将其值在350,300像素位置处呈现为具有适当形状的光。
感谢
你在这种情况下做什么顶点着色器?你在光相中绑定了什么几何? – catflier