Jak odzyskać pozycję przestrzeni widoku, biorąc pod uwagę wartość głębi przestrzeni widoku i ndc xy

Piszę odroczony shader i staram się spakować mój gbuffer ściślej. Jednak nie wydaje mi się, aby poprawnie obliczyć pozycję widoku, biorąc pod uwagę głębokość przestrzeni widoku

// depth -> (gl_ModelViewMatrix * vec4(pos.xyz, 1)).z; where pos is the model space position
// fov -> field of view in radians (0.62831855, 0.47123888)
// p -> ndc position, x, y [-1, 1]
vec3 getPosition(float depth, vec2 fov, vec2 p)
{
vec3 pos;
pos.x = -depth * tan( HALF_PI - fov.x/2.0 ) * (p.x);
pos.y = -depth * tan( HALF_PI - fov.y/2.0 ) * (p.y);
pos.z = depth;
return pos;
}

Obliczona pozycja jest nieprawidłowa. Wiem o tym, ponieważ wciąż przechowuję poprawną pozycję w gbufferze i testuję ją.

questionAnswers(3)

yourAnswerToTheQuestion