Как восстановить позицию в пространстве просмотра с учетом значения глубины пространства просмотра и 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 и тестирую ее.

7
задан Rabbid76 31 May 2018 в 18:49
поделиться