在dx11中,顶点由空间位置和各种附加属性组成,D3D允许我们灵活地建立属于自己的顶点格式。要创建一个自定义的顶点格式,必须创建一个包含顶点数据的结构体。例如下面两种不同类型的顶点格式,第一个由位置和颜色组成,另一个由位置、发现和纹理坐标组成。
struct Vertex1
{
XMFLOAT3 Pos;
XMFLOAT4 Color;
};
struct Vertex2
{
XMFLOAT3 Pos;
XMFLOAT3 Normal;
XMFLOAT2 Tex0;
XMFLOAT2 Tex1;
};
在定义了顶点结构体之后,我们要用输入布局(ID3D11InputLayout)来描述该顶点结构体的分量结构,使D3D知道如何使用每个分量。输入布局是一个D3D11_INPUT_ELEMENT_DESC(输入布局描述:input layout descrption)数组。数组中的每个元素描述了顶点结构体的一个分量。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:一个与元素相关的字符串。用于将顶点结构体中的元素映射为顶点着色器参数,如下图。
2.SemanticIndex:附加在语义上的索引值。如上图所示,顶点包含多组纹理信息,但是我们不会分别定义一个SemanticName为"TEXCOORD1"和一个为"TEXCOORD2"的元素。而是定义两个SemanticName都为"TEXCOORD"的元素,但第一个的SemanticIndex为