У меня есть следующие фрагменты и вершинные шейдеры.Линейная глубина к мировому положению
Код HLSL ` // Vertex shader // ---------------------------------- -------------------------------------------------
void mainVP(
float4 position : POSITION,
out float4 outPos : POSITION,
out float2 outDepth : TEXCOORD0,
uniform float4x4 worldViewProj,
uniform float4 texelOffsets,
uniform float4 depthRange) //Passed as float4(minDepth, maxDepth,depthRange,1/depthRange)
{
outPos = mul(worldViewProj, position);
outPos.xy += texelOffsets.zw * outPos.w;
outDepth.x = (outPos.z - depthRange.x)*depthRange.w;//value [0..1]
outDepth.y = outPos.w;
}
// Fragment shader
void mainFP(float2 depth: TEXCOORD0, out float4 result : COLOR) {
float finalDepth = depth.x;
result = float4(finalDepth, finalDepth, finalDepth, 1);
}
`
Этот шейдер производит карту глубины.
Эта карта глубины затем должна использоваться для восстановления позиций мира для значений глубины. Я искал другие сообщения, но ни один из них, похоже, не хранит глубину, используя ту же формулу, которую я использую. Единственным подобным сообщением является следующее: Reconstructing world position from linear depth
Поэтому мне трудно восстановить точку, используя координаты x и y из карты глубины и соответствующей глубины.
Мне нужна помощь в построении шейдера, чтобы получить представление о мировоззрении для глубины в определенных координатах текстуры.
Похоже, ваше решение не для линейной глубины. У меня есть шейдер, работающий так, как вы говорите, но мне нужно иметь еще один шейдер, работающий с линейной глубиной. – nickygs