С какой стати в w хранится глубина? В w всегда 1 находится на сколько мне известно, а за глубину отвечает z. Или я что-то путаю? Если путаю, то объясните пожалуйста что.
Если разберешься, как строятся матрицы проекции - таких вопросов задавать не будешь. После умножения на матрицу проекции в W как раз оказывается глубина.
MrShoor
> Если разберешься, как строятся матрицы проекции - таких вопросов задавать не
> будешь.
Да, в том и дело, что из всех описаний как это делается следует, что в w всегда 1, а в z глубина.
И если я не правильно разобрался, прошу помочь разобраться правильно.
Вот возьмем пример (http://www.songho.ca/opengl/gl_projectionmatrix.html)
Допустим у нас ортогональная матрица проекции. Зададим для нее l = -r = width/2, b = -t = height/2, n = -f = depth/2. Получим матрицу
mOrtho (2/width 0 0 0) (0 2/height 0 0) (0 0 -2/depth 0) (0 0 0 1)
И пусть матрица ModelView единичная. Тогда умножая mOrtho на вектор (x, y, z, w) (где w всегда равно 1, так?) получаем
mOrtho (2/width 0 0 0) (x) ( 2x/width ) (0 2/height 0 0) * (y) = ( 2y/height) (0 0 -2/depth 0) (z) (-2z/depth ) (0 0 0 1) (w) ( w )
Т.е. w координата полученного вектора равна 1, а информация о глубине хранится в z.
Ну и вообще проекционная матрица нужна для того, чтоб диапазон значений по x ужимать с (l, r) -> (-1, 1), по y (b, t) -> (-1, 1), по z (-f, -n) -> (-1, 1).
В каком месте в w может попасть глубина?
Все понял. Здесь оказывается используется перспективная проекция.
MaxGucci
Код шейдера был написан на HLSL
float4 posL=mul(mul(IN.position,matWorld),matLight);
Тут и заливается w наверное =)
И на сколько я помню (давно не работал с hlsl) w хранит глубину иначе чем в z.
Аврелий
В w сохраняется просто z координата пикселя. Так устроена матрица перспективной проекции. В z же записывается величина, которая после деления клипается в пределах [0;1], что соответствует области от Near до Far плоскости в DirectX. Для OGL все ровно то же самое, только величина в z после перспективного деления клипается по [-1;1].
Реализовал у себя. Блин, безумно мозолит глаза дрожание теней при движении. Самый весомый аргумент в пользу CSM.
Из-за него GPSM дико алиасит на тонких предметах вдалеке, типа стволов деревьев. Из-за неустранимого дрожания это очень заметно.
-Eugene-
> Реализовал у себя. Блин, безумно мозолит глаза дрожание теней при движении.
> Самый весомый аргумент в пользу CSM.
> Из-за него GPSM дико алиасит на тонких предметах вдалеке, типа стволов
> деревьев. Из-за неустранимого дрожания это очень заметно.
надо было ввести шаг на позицию камеры для ренера источника света... но прошло уже 2 года, так что наверное не актуально =(
Аврелий
> надо было ввести шаг на позицию камеры для ренера источника света...
Да понятно, что если снаппить позицию к сетке, проблема уменьшается. Но все равно то костыль - и если скорость камеры в игре может меняться в широких диапазонах, этот костыль выставляет напоказ свою порочную природу.
Тема в архиве.