我試圖在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