Программирование графики с использованием Direct3D



         

Создание источника света - часть 2


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

Возможно, более интуитивно понятными для этих векторов будут названия передний (forward) и верхний (up) вектор. Передний вектор указывает, куда направлена лицевая сторона фрейма. Верхний вектор указывает куда направлена верхняя грань фрейма (этот вектор иногд называют небесным (sky) вектором).

В нашем коде мы используем передний вектор <0, –20, 20>. Это значит, что лицевая грань фрейма направлена к точке <0, –20, 20>, таким образом, лицевая грань фрейма будет на 20 единиц ниже и на 20 единиц ближе (относительно начала координат). В качестве верхнего вектора мы оставим предлагаемый по умолчанию вектор <0, 1, 0>. Мы подробнее изучим фреймы и их ориентацию в главе 7.

Дальнейшая часть кода функции CreateScene() осуществляет создание и настройку параметров источника зонального света.

slightframe->AddLight(slight); slightframe->AddMoveCallback(MoveLight, NULL); slight->Release(); slight = 0; slightframe->Release(); slightframe = 0;

Функция AddLight() применяется для присоединения источника света к только что настроеному фрейму.

Затем вызывается функция AddMoveCallback(). Эта функция применяется для установки функции обратного вызова, которая будет использоваться для изменения позиции и ориентации фрейма во время выполнения программы. Мы поговорим об обратных вызовах и о функции AddMoveCallback() позже в этой главе.

В конце происходит освобождение указателей slight и slightframe чтобы уведомить объекты, что эти указатели больше не будут использоваться (их область видимости ограничена функцией CreateScene()).




Содержание  Назад  Вперед