Внешнее освещение (Direct3D 9)

Внешнее освещение предоставляет постоянное освещение для сцены. Оно освещает все вершины объекта одинаково, потому что не зависит ни от каких других факторов освещения, таких как нормали вершины, направление света, положение света, диапазон или затухание. Это самый быстрый тип освещения, но он дает наименее реалистичные результаты. Direct3D содержит одно глобальное свойство внешнего освещения, которое можно использовать, не создавая никакого света. Кроме того, можно настроить любой объект освещения так, чтобы он обеспечивал внешнее освещение. Внешнее освещение для сцены описывается в следующем уравнении.

Внешнее освещение = Cₐ*[Gₐ + sum(Atteni*Spoti*Lai)]

Где:

Параметр Значение по умолчанию Тип Описание
Cₐ (0,0,0,0) D3DCOLORVALUE Внешний цвет материала
Gₐ (0,0,0,0) D3DCOLORVALUE Глобальный внешний цвет
Atteni (0,0,0,0) D3DCOLORVALUE Затухание света i. См. статью Затухание и фактор внимания (Direct3D 9).
Пятноi (0,0,0,0) D3DVECTOR Коэффициент вспышки света i. См. статью Затухание и фактор внимания (Direct3D 9).
Sum Н/Д Н/Д Сумма внешнего освещения
Lai (0,0,0,0) D3DVECTOR Внешний цвет света i

 

Значение Cₐ равно одному из следующих:

  • цвет вершины1, если AMBIENTMATERIALSOURCE = D3DMCS_COLOR1, и в объявлении вершины указан первый цвет вершины.
  • цвет вершины2, если AMBIENTMATERIALSOURCE = D3DMCS_COLOR2, а второй цвет вершины указан в объявлении вершины.
  • внешний цвет материала.

Примечание

Если используется один из вариантов AMBIENTMATERIALSOURCE, а цвет вершины не указан, то используется цвет окружающей среды материала.

 

Чтобы использовать внешний цвет материала, используйте свойство SetMaterial, как показано в примере кода ниже.

Gₐ — это глобальный внешний цвет. Он задается с помощью SetRenderState(D3DRS_AMBIENT). В сцене Direct3D существует один глобальный внешний цвет. Этот параметр не связан с объектом света Direct3D.

Lai — это внешний цвет света i в сцене. Каждый свет Direct3D имеет набор свойств, одно из которых — внешний цвет. Термин sum(Lai) представляет собой сумму всех внешних цветов в сцене.

Пример

В этом примере объект окрашен с помощью внешнего света сцены и внешнего цвета материала.

#define GRAY_COLOR  0x00bfbfbf

// create material
D3DMATERIAL9 mtrl;
ZeroMemory(&mtrl, sizeof(mtrl));
mtrl.Ambient.r = 0.75f;
mtrl.Ambient.g = 0.0f;
mtrl.Ambient.b = 0.0f;
mtrl.Ambient.a = 0.0f;
m_pd3dDevice->SetMaterial(&mtrl);
m_pd3dDevice->SetRenderState(D3DRS_AMBIENT, GRAY_COLOR);

Согласно уравнению, получившийся цвет для вершин объекта — это сочетание цвета материала и цвета света.

На двух следующих рисунках показан цвет материала (серый) и цвет света (ярко-красный).

Изображение серогошара с изображением красного шара

Получившаяся сцена показана на следующем рисунке. Единственный объект в сцене — сфера. Внешний свет освещает все вершины объекта одинаковым цветом. Это не зависит от нормали вершины или направления света. В результате сфера выглядит как двухмерный круг, поскольку затенение вокруг поверхности объекта одинаковое.

иллюстрация сферы с внешним светом

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

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