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 | < Назад | Оглавление | Далее > |