Рассчитать clipspace.w из clipspace.xyz и (inv) проекционной матрицы

Я использую алгоритмическую логарифмическую глубину, которая приводит к записи someFunc (clipspace.z) в буфер глубиныи нет скрытого разделения перспективы.

Я делаю RTT / постобработку, поэтому позже во фрагментном шейдере я хочу пересчитать eyespace.xyz, учитывая ndc.xy (из координат фрагмента) и clipspace.z (из someFuncInv () на значение, хранящееся в буфере глубины) ,

Обратите внимание, что у меня нет clipspace.w, и мое сохраненное значение не является clipspace.z / clipspace.w (как это было бы при использовании фиксированной глубины функции) - так что-то вроде ...

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;

... не работает здесь.

Так есть ли способ рассчитать clipspace.w из clipspace.xyz, с учетом матрицы проекции или наоборот?

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

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