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

m с использованием алгоритма логарифмической глубины, в результате чего 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)

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