Рассчитать 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, с учетом матрицы проекции или наоборот?