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

17.2. Использование данных вершин

Рассмотрим следующее объявление вершины:

D3DVERTEXELEMENT9 decl[] =
{
     {0, 0,  D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT,
             D3DDECLUSAGE_POSITION, 0},
     {0, 12, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT,
             D3DDECLUSAGE_NORMAL, 0},
     {0, 24, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT,
             D3DDECLUSAGE_NORMAL, 1},
     {0, 36, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT,
             D3DDECLUSAGE_NORMAL, 2},
     D3DDECL_END()
};

Нам необходим способ указать соответствие между элементами объявления вершины и членами данных входной структуры вершинного шейдера. Это соответствие описывается во входной структуре путем указания для каждого члена данных конструкции вида тип-использования[индекс-использования]. Эта запись идентифицирует элемент объявления вершины по его типу использования и индексу использования. Тот элемент данных вершины, который идентифицирован по указанным параметрам, будет отображен на член данных входной структуры. Например, для приведенного выше примера определение входной структуры может выглядеть так:

struct VS_INPUT
{
     vector position    : POSITION;
     vector normal      : NORMAL0;
     vector faceNormal1 : NORMAL1;
     vector faceNormal2 : NORMAL2;
};

 

ПРИМЕЧАНИЕ
Если мы не указываем индекс использования, подразумевается, что он равен 0. Таким образом запись POSITION означает то же самое, что и POSITION0.

Здесь элемент 0 в decl, идентифицируемый по типу использования POSITION и индексу использования 0, отображается на элемент входной структуры position. Элемент 1 в decl, идентифицируемый по типу использования NORMAL и индексу использования 0, отображается на элемент входной структуры normal. Элемент 2 в decl, идентифицируемый по типу использования NORMAL и индексу использования 1, отображается на элемент входной структуры faceNormal1. Элемент 3 в decl, идентифицируемый по типу использования NORMAL и индексу использования 2, отображается на элемент входной структуры faceNormal2.

Входная структура вершинного шейдера поддерживает следующие типы использования:

Здесь n — это необязательное целое число в диапазоне [0, 15].

ПРИМЕЧАНИЕ
Еще раз напоминаем, что некоторые типы использования, такие как BLENDWEIGHTS, TANGENT, BINORMAL, BLENDINDICES и TESSFACTOR, в этой книге не рассматриваются.

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

struct VS_OUTPUT
{
     vector position : POSITION;
     vector diffuse  : COLOR0;
     vector specular : COLOR1;
};

Выходная структура вершинного шейдера поддерживает следующие типы использования:

Здесь n — это необязательное целое число в диапазоне [0, 15].


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

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