Итак, вы создали самые необходимые объекты для 3D рендеринга (объект DirectDraw, устройство рендеринга и объект Viewport). Следующая вещь, которую надо будет сделать - установить начальное состояние освещения и создать и сконфигурировать материал. При необходимости, вы можете изменить эти установки позже. Следующий код прилагает начальное состояние освещения к устройству рендеринга g_d3dDevice путем вызова метода Direct3DDevice7.SetRenderState
В своем первом параметре, SetRenderState передает флаг D3DRENDERSTATE_AMBIENT, ассоциируя вызов с вещественным освещением. Второй аргумент использует метод DirectX7.CreateColorRGBA для установки красного, зеленого и синего значений цвета соответственно в 1.0, 1.0, 1.0 Результирующий свет получается белым. Цвет не использует альфа-компоненту, которая в этом случае также установлена в 1.0 Используйте тип D3DMATERIAL7 для установки свойств материала:
Только что созданный материал не имеет свойств и не может быть использован
в рендеринге. Показанный код изменяте свойтсва материала через тип D3DMATERIAL7,
описывая материал, который будет отражать красную и зеленую компоненту
света. В результате, материал в сцене получится желтого цвета. Теперь, когда материал и свет заданы, следующей ступенью будет задание матриц Мира, Обзора и Проекции. Ориентируясь в этих матрицах, система сможет правильно располагать геометрию объектов, камеру и ориентацию смотрящего. Эти определения матриц поместите в раздел Declarations:
Чтобы создать матрицу Мира, объявите тип D3DMATRIX, matWorld и создайте идентификацию матрицы. Затем, используйте метод Direct3DDevice7.SetTransform с флагом D3DTRANSFORMSTATE_WORLD, чтобы определить матрицу мира.
Чтобы создать матрицу обзора, объявите тип D3DMATRIX, matView и создайте идентификацию матрицы. Затем, передайте координаты камеры в метод DirectX7.ViewMatrix, чтобы создать матрицу обзора. Используйте метод SetTransform, чтобы определить матрицу обзора для устройства рендеринга.
Предыдущий код использует функцию MakeVector, чтобы перевести три точки в тип D3DVECTOR. Вот эта функция. Поместите ее код отдельно!
Чтобы создать матрицу проекции, повторите пункит с созданием типа D3DMATRIX, затем передайте обрезаемые плоскости и поля угла зрения в метод DirectX7.ProjectionMatrix чтобы создать матрицу проекции. Используйте метод SetTransform, чтобы определить матрицу для устройства рендеринга.
В этом коде второй параметр передает в ProjectionMatrix пердставление расстояния до ближайшей обрезаемой плоскости в указаных приложением единицах, а третий параметр представляет расстояние до дальней обрезаемой плоскости. Четвертый параметр - это поле видимого угла зрения в радианах. С матрицами покончено, переходим к приготовлению геометрии для нашей сцены. Приготовление геометрии заключается в определении четырех типоы D3DVECTOR. Тип вектора используется для каждой из трех точек, необходимых для задания треугольника и еще один тип нужен для задания нормали в трехмерном пространстве. Технически, вам не обязательно задавать геометрию на этом этапе, вы можете задать ее позже.
Метод DirectX7.CreateD3DVertex использует члены типа D3DVECTOR, чтобы заполнить тип D3DVERTEX, используя индивидуальные значения, которые представляют компоненты вершин. Заполните массив глобального типа D3DVERTEX, g_TriangleVert информацией о вершинах треугольника.
Этот фрагмент кода находит три точки в трехмерном пространстве, которые определяют треугольник, стоящий вертикально относительно плоскости Z=0. После создания всех относящихся к Direct3D объектов, инициализации сцены, и определения геометрии для сцены, вы можете начать рендеринг сцены. Об этом и пойдет речь дальше.
|