Поделиться через


Форматы координат текстуры (Direct3D 9)

Координаты текстуры в Direct3D могут включать один, два, три или четыре элемента с плавающей запятой для обращения к текстурам с различными уровнями измерения. Трехмерная текстура — поверхность текстуры с размерами 1 на n текселей — адресуется одной координатой текстуры. В наиболее распространенном случае, двумерные текстуры, рассматриваются с помощью двух координат текстур, которые обычно называются you и v. Direct3D поддерживает два типа трехмерных текстур: карты кубических сред и объемные текстуры. Карты кубических сред на самом деле не являются трехмерными, но они рассматриваются с помощью вектора из 3 элементов. Дополнительные сведения см. в разделе Сопоставление кубических сред (Direct3D 9).

Как описано в разделе Коды FVF для фиксированных функций (Direct3D 9), приложения кодируют координаты текстуры в формате вершин. Формат вершины может включать несколько наборов координат текстуры. Используйте D3DFVF_TEX0 по D3DFVF_TEX8 D3DFVF , чтобы описать формат вершин, который не содержит координат текстуры или целых восемь наборов.

Каждый набор координат текстуры может содержать от одного до четырех элементов. Флаги D3DFVF_TEXTUREFORMAT1 D3DFVF_TEXTUREFORMAT4 описывают количество элементов в координате текстуры в наборе, но сами по себе эти флаги не используются. Скорее, D3DFVF_TEXCOORDSIZEN набор макросов использует эти флаги для создания битовых шаблонов, описывающих количество элементов, используемых определенным набором координат текстуры в формате вершин. Эти макросы принимают один параметр, определяющий индекс набора координат, количество элементов которого определяется. В следующем примере показано, как используются эти макросы.

// This vertex format contains two sets of texture coordinates.
// The first set (index 0) has 2 elements, and the second set 
// has 1 element. The description for this vertex format would be: 
//     dwFVF = D3DFVF_XYZ  | D3DFVF_NORMAL | D3DFVF_DIFFUSE | D3DFVF_TEX2 |
//             D3DFVF_TEXCOORDSIZE2(0) | D3DFVF_TEXCOORDSIZE1(1); 
//
typedef struct CVF
{
    D3DVECTOR position;
    D3DVECTOR normal;
    D3DCOLOR  diffuse;
    float     u, v;   // 1st set, 2D
    float     t;      // 2nd set, 1D
} CustomVertexFormat;

Примечание

За исключением сопоставлений с кубическими средами и текстур объемов, растеризаторы не могут обращаться к текстурам, используя более двух элементов. Приложения могут предоставлять до трех элементов для координат текстуры, но только если текстура является кубической картой, текстурой объема или флагом преобразования текстуры D3DTTFF_PROJECTED. Флаг D3DTTFF_PROJECTED позволяет растеризатору разделить первые два элемента на третий (или n). Дополнительные сведения см. в разделе Преобразования координат текстуры (Direct3D 9).

 

Координаты текстуры