Oblicz clipspace.w z clipspace.xyz i (inv) macierzy projekcji

Używam algorytmu głębi logarytmicznej, który powoduje zapisanie someFunc (clipspace.z) w buforze głębii nie ma ukrytego podziału perspektywy.

Robię RTT / postprocessing, więc później w shaderze fragmentów chcę przeliczyć eyespace.xyz, podając ndc.xy (ze współrzędnych fragmentu) i clipspace.z (z someFuncInv () na wartość zapisaną w buforze głębi) .

Zauważ, że nie mam clipspace.w, a moją przechowywaną wartością nie jest clipspace.z / clipspace.w (jak byłoby w przypadku używania stałej głębi funkcji) - więc coś w stylu ...

float clip_z = ...; /* [-1 .. +1] */
vec2 ndc = vec2(FragCoord.xy / viewport * 2.0 - 1.0);
vec4 clipspace = InvProjMatrix * vec4(ndc, clip_z, 1.0));
clipspace /= clipspace.w;

... nie działa tutaj.

Czy istnieje sposób obliczenia clipspace.w z clipspace.xyz, biorąc pod uwagę macierz projekcji lub jej odwrotność?

questionAnswers(1)

yourAnswerToTheQuestion