Calcule clipspace.w de clipspace.xyz e matriz de projeção (inv)

Estou usando um algorítimo de profundidade logarítmica que resulta em someFunc (clipspace.z) sendo gravado no buffer de profundidadee nenhuma divisão implícita da perspectiva.

Eu estou fazendo RTT / pós-processamento para mais tarde em um fragmento shader eu quero recompuir eyespace.xyz, dado ndc.xy (a partir das coordenadas do fragmento) e clipspace.z (de someFuncInv () sobre o valor armazenado no buffer de profundidade) .

Note que eu não tenho clipspace.w, e meu valor armazenado não é clipspace.z / clipspace.w (como seria ao usar profundidade de função fixa) - então algo ao longo das linhas de ...

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;

... não funciona aqui.

Então existe uma maneira de calcular clipspace.w fora de clipspace.xyz, dada a matriz de projeção ou é inversa?

questionAnswers(1)

yourAnswerToTheQuestion