Как восстановить положение пространства вида с учетом значения глубины пространства просмотра и ndc xy

Я пишу отложенный шейдер и пытаюсь упаковать свой gbuffer более плотно. Тем не менее, я не могу рассчитать положение взгляда, учитывая глубину пространства просмотра правильно

// 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;
}

Вычисленная позиция неверна. Я знаю это, потому что я все еще сохраняю правильную позицию в gbuffer и тестирую, используя это.

Ответы на вопрос(3)

Ваш ответ на вопрос