О D3DFVF_XYZRHW - запись о вершине содержит проекции координат, глубину и координату W. Следует помнить, что в этом случае координаты уже разделены на W. Это единственный случай, когда библиотека отсекает точки не по каноническому квадрату размером 2x2; О D3DFVF_N0RMAL - запись содержит компоненты нормали; О D3DFVF_DI FFUSE - запись содержит код цвета матовой поверхности; О D3DFVF_SPECULAR - запись содержит второй код цвета, характеризующий, например, зеркальное отражение; О D3DFVF_TEX0 - запись содержит координаты текстуры первого уровня.

Методу SetFVFC) передается сочетание флагов, объединенных операцией ИЛИ. Так, вершину можно определить следующей структурой: Struct SCREENVERTEX {

FLOAT х. у. z. w; DWORD color; }

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

Для задания треугольника потребуется объявить массив из трех элементов типа SCREENVERTEX. При этом графическая библиотека во время вывода примитивов кроме растровой развертки будет выполнять только отсечение на плоскости по границам окна. Конвейер библиотеки не должен выполнять проецирование и вычисление освещенности, так как это уже было вычислено приложением. Таким образом, независимо от того, есть ускоритель в системе или нет, указанные операции удалены из конвейера, потому что их выполняет приложение.

Если нужно задействовать все этапы конвейера, то в структуру надо включить нормали, текстурные координаты и координаты вершины в пространстве, как это показано в следующем объявлении:

struct R00MVERTEX
{
D3DXVECT0R3 position; D3DXVECT0R3 normal ; FLOAT tu. tv; }

Использованный в данном объявлении тип JD3DVECT0R объявлен в файле d3d9types.h. Его определение приведено ниже:

typedef struct _D3DVECT0R {
float x;
float y;
float z; } D3DVECT0R;

Можно также использовать класс D3DXVECT0R3, который является наследником D3DVECT0R. В этом классе объявлены конструкторы, перегружены операции сложения, вычитания и умножения векторов.


⇐ Предыдущая| |Следующая ⇒