2013-06-27 2 views
0

Я хочу использовать алгоритм с ошибкой глубины, чтобы сделать теневые тома, и все отлично работает, но я не могу понять, как выдавить квадранты теневого объема до бесконечности.Выдавить теневые тома до бесконечности

Цель состоит в том, чтобы создать теневой объем для треугольника, который горит от точечного света. У меня есть красный, что мне сначала нужно изменить перспективную матрицу, чтобы у нее не было области клипа, и установите координату w на 0. Но каковы тогда координаты x, y, z?

Пример был бы очень полезен, но я также хочу понять, как это делается.

+0

Возможно, вы можете объяснить, почему вы хотите выдавить теневые тома до бесконечности. – JCooper

+0

Тод избежать ошибок в тени. Это метод, который часто используется в алгоритме с ошибкой глубины. – user2195441

ответ

0

В этом link показан пример проекционной матрицы. Она имеет вид:

a 0 b    0 
A = 0 d e    0 
    0 0 -(f+n)/(f-n) -2fn/(f-n) 
    0 0 -1    0 

f это далеко самолет, и вы хотите f -> infinity.

limit f -> infinity of (f+n)/(f-n) = limit f -> infinity of (1+n/f)/(1-n/f) 

и

limit f -> infinity of 2fn/(f-n) = limit f -> infinity of 2n/(1-n/f) 

так

f -> infinity => n/f -> 0 

ваша матрица с f -> infinity становится

a 0 b 0 
B = 0 d e 0 
    0 0 -1 -2n 
    0 0 -1 0 

если вы превращаете ваш (x,y,z,w=0) с B вы получите

x' = ax + bz 
y' = dy + ez 
z' = -z 
w' = -z 

и перспективное деление дает

x' = -ax/z - b 
y' = -dy/z - e 
z' = 1 

Хотя x' и y' такие же, как преобразование (x,y,z,w=0) с A, z' теперь константа, которая всегда равна далекой плоскости в нормализованных координатах устройства.

В этом article показана эффективная реализация теневых томов с ограничением на бесконечности.

Смежные вопросы