Поделиться через


Преобразования пространства камеры (Direct3D 9)

Вершины в пространстве камеры вычисляются путем преобразования вершин объектов с матрицей представления мира.

V = V * wvMatrix

Нормали вершины в пространстве камеры вычисляются путем преобразования норм объекта с обратным транспонированием матрицы представления мира. Матрица представления мира может быть или не может быть ортогональной.

N = N * (wvMatrix⁻️)T

Матрица инверсии и транспонирование матрицы работают на матрице 4x4. Умножение объединяет норму с 3x3 частью результирующей матрицы 4x4.

Если состояние отрисовки, D3DRENDERSTATE_NORMALIZENORMALS задано значение TRUE, нормальные векторы вершин нормализуются после преобразования в пространство камеры следующим образом:

N = норм(N)

Положение света в пространстве камеры вычисляется путем преобразования положения источника света с матрицей представления.

Lp = Lp * vMatrix

Направление света в пространстве камеры для направления света вычисляется путем умножения направления источника света на матрицу представления, нормализацию и отрицание результата.

Ldir = -norm(Ldir * wvMatrix)

Для D3DLIGHT_POINT и D3DLIGHT_SPOT направление света вычисляется следующим образом:

Ldir = norm(V * Lp), где параметры определены в следующей таблице.

Параметр Значение по умолчанию Тип Описание
Ldir N/A D3DVECTOR Вектор направления от вершины объекта к свету
V N/A D3DVECTOR Позиция вершины в пространстве камеры
wvMatrix Тождество D3DMATRIX Составная матрица, содержащая преобразования мира и представления
N N/A D3DVECTOR Нормальное вершина
Lp N/A D3DVECTOR Световая позиция в пространстве камеры
vMatrix Тождество D3DMATRIX Матрица, содержащая преобразование представления

 

математика освещения