netlib.narod.ru< Назад | Оглавление | Далее >

Освещение

Освещение вносит большой вклад в реализм игр. По игровой сцене может быть разбросано много различных источников света, которые, например, могут динамически включаться и выключаться в зависимости от местоположения игрока. Основным недостатком размещения множества источников света в сцене является то, что чем больше у вас источников света, тем больше вычислительных мощностей потребуется для визуализации сцены. Некоторые типы используемых в играх источников света, это направленное освещение (например, солнечный свет), зональный свет (прожекторы) и точечный свет (точка, излучающая свет во всех направлениях).

Базовое освещение

В этом разделе вы создадите базовый класс для всех источников света с именем BaseLight. В классе BaseLight нет никаких методов, кроме его конструктора, и, поскольку у источников света не так много используемых всеми ими ресурсов, вы будете хранить внутри класса только цвет источника света:

// Цвет рассеиваемого и отражаемого света
Vector3 color;

public Vector3 Color
{
    get { return color; }
    set { color = value; }
}

Атрибут color класса BaseLight используется как цвет рассеиваемой и отражаемой составляющих света. Альтернативой может быть раздельное хранение рассеиваемой и отражаемой составляющих. Обратите внимание, что компоненты (X, Y, Z) цветового вектора используются для представления цвета в формате RGB. Также заметьте, что у света нет фоновой составляющей. Позднее вы определите цвет фоновой составляющей света глобально для всей сцены, а не для каждого источника света.

Точечный свет/всенаправленный свет

В этом разделе вы расширите класс BaseLight, создав более специализированный тип источника света: точечный свет (или всенаправленный свет). Точечный свет прост в обработке и вы можете использовать его для освещения ваших сцен. Для этого типа источника света вы создаете класс с именем PointLight, расширяющий класс BaseLight.

Точечный свет настолько прост, что вам внутри класса PointLight надо хранить только местоположение источника света:

// Местоположение всенаправленного света
Vector3 position;

public Vector3 Position
{
    get { return position; }
    set { position = value; }
}

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


netlib.narod.ru< Назад | Оглавление | Далее >

Сайт управляется системой uCoz