C++ DX11中的顶点缠绕顺序

C++ DX11中的顶点缠绕顺序,c++,directx,vertices,culling,C++,Directx,Vertices,Culling,我试图用dx11画一个简单的正方形,但是每个三角形的索引顺序决定它是否出现。在光栅化器状态下,我将消隐模式设置为“无”,但它似乎没有改变任何东西 如果我将第一个三角形的顶点指定为0,1,2,而不是2,1,0,则三角形不会显示。所以我的问题是,我是否需要以特定的方式对三角形的顶点进行排序,而不考虑消隐模式 另外,我画的是一个三角形列表,不是条带 UINT indices[] = {2, 1, 0, 1, 3, 0}; MeshVertex vertices

我试图用dx11画一个简单的正方形,但是每个三角形的索引顺序决定它是否出现。在光栅化器状态下,我将消隐模式设置为“无”,但它似乎没有改变任何东西

如果我将第一个三角形的顶点指定为0,1,2,而不是2,1,0,则三角形不会显示。所以我的问题是,我是否需要以特定的方式对三角形的顶点进行排序,而不考虑消隐模式

另外,我画的是一个三角形列表,不是条带

UINT indices[] = {2, 1, 0, 
                  1, 3, 0};


MeshVertex vertices[] = 
{
    { Vector3(1.0f, 1.0f, 0.0f)}, //Top Right
    { Vector3(-1.0f, -1.0f, 0.0f)}, //Bottom Left
    { Vector3(1.0f, -1.0f, 0.0f)}, //Bottom Right
    { Vector3(-1.0f, 1.0f, 0.0f)} //Top Left
};

mesh = new Mesh(vertices, indices, 4, 6, shader);
我的问题是,我需要对三角形的顶点进行排序吗 不考虑剔除模式的具体方式

**按顺时针顺序定义/绘制顶点,不要更改默认的消隐模式**

要确定是否可以显示三角形,必须考虑两个因素

  • 前面,或者您称之为缠绕顺序,默认情况下Direct3D将按顺时针顺序定义的顶点视为前面,并且除前面之外的所有面都是背面
  • 默认情况下,剔除模式Direct3D将剔除背面(顶点按逆时针顺序定义的面)
  • 可以在结构中设置正面和消隐模式

    将剔除模式更改为“无”时未看到差异的原因是,两个三角形的顺序相同,D3D11_CULL_NONE表示未剔除任何面


    如果三角形1按顺时针顺序排列,三角形2按逆时针顺序排列,则在将消隐模式设置为D3D11_cull_FRONT或D3D11_cull_BACK时,您将只看到一个三角形,而在将其设置为D3D11_cull_NONE时,您将只看到两个三角形。

    DX按顺时针顺序排列。