6.1 顶点和顶点布局
5.5.1 节已经讲过,在 Direct3D 中,顶点由空间位置和各种附加属性组成,Direct3D 可
以让我们灵活地建立属于我们自己的顶点格式;换句话说,它允许我们定义顶点的分量。要
创建一个自定义的顶点格式,我们必须先创建一个包含顶点数据的结构体。例如,下面是两
种不同类型的顶点格式;一个由位置和颜色组成,另一个由位置、法线和纹理坐标组成。
struct Vertex1
{
XMFLOAT3 Pos;
XMFLOAT4 Color;
};
struct Vertex2
{
XMFLOAT3 Pos;
XMFLOAT3 Normal;
XMFLOAT2 Tex0;
XMFLOAT2 Tex1;
};
在定义了顶点结构体之后,我们必须设法描述该顶点结构体的分量结构,使 Direct3D
知道该如何使用每个分量。这一描述信息是以输入布局(ID3D11InputLayout)的形式提供
给 Direct3D 的 。 输 入 布 局 是 一 个 D3D11_INPUT_ELEMENT_DESC 数 组 。
D3D11_INPUT_ELEMENT_DESC 数组中的每个元素描述了顶点结构体的一个分量。比如,
当顶点结构体包含两个分量时,对应的 D3D11_INPUT_ELEMENT_DESC 数组会包含两个
元 素 。 我 们 将 D3D11_INPUT_ELEMENT_DESC 称 为 输 入 布 局 描 述 ( input layout
description)。D3D11_INPUT_ELEMENT_DESC 结构体定义如下:
typedef struct D3D11_INPUT_ELEMENT_DESC {
LPCSTR SemanticName;
UINT SemanticIndex;
DXGI_FORMAT Format;
UINT InputSlot;
UINT AlignedByteOffset
D3D11_INPUT_CLASSIFICATION InputSlotClass;
UINT InstanceDataStepRate;
} D3D11_INPUT_ELEMENT_DESC;
1.SemanticName:一个与元素相关的字符串。它可以是任何有效的语义名。语义
(semantic)用于将顶点结构体中的元素映射为顶点着色器参数(参见图 6.1)。