DX11中的顶点绕组顺序

3

我正在尝试使用dx11绘制一个简单的正方形,但是每个三角形的索引顺序决定了它是否显示出来。我将光栅化器状态中的裁剪模式设置为无,但似乎没有改变任何东西。

如果我指定第一个三角形的顶点为0、1、2而不是2、1、0,则该三角形不会显示出来。所以我的问题是,无论裁剪模式如何,我是否需要以特定的方式对三角形的顶点进行排序?

P.S. 我正在绘制一个三角形列表而不是一个带状图案。

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);

1
DX 顺时针方向。 - CodeAngry
@CodeAngry 不正确。DirectX 可以配置。您可以自由选择 CW(顺时针)或 CCW(逆时针)的绕向方式。 - Gavin Williams
1个回答

7
所以我的问题是,无论剔除模式如何,我是否需要按特定方式排序三角形的顶点?
定义/绘制顶点时,请按顺时针顺序,并保持默认的剔除模式不变。
要确定三角形是否可以显示,您必须考虑两个因素:
1. 前面的面,或者称之为绕组顺序,默认情况下,Direct3D将定义为顺时针顺序的顶点视为前面的面,而除前面的面外的所有面都是背面。
2. 剔除模式,默认情况下,Direct3D将剔除反向顺序定义的后向面(顶点)。
您可以在D3D11_RASTERIZER_DESC结构中设置正面和剔除模式。
当您将剔除模式更改为NONE时,您没有看到差异的原因是两个三角形都是按相同顺序排列的,而D3D11_CULL_NONE表示未剔除任何面。
如果三角形1是按顺时针方向排列的,而三角形2是按逆时针方向排列的,则在将剔除模式设置为D3D11_CULL_FRONT或D3D11_CULL_BACK时,您只会看到一个三角形;而将其设置为D3D11_CULL_NONE时,则会同时看到两个三角形。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接