Directx 为什么顶点顺序会更改渲染行为

Directx 为什么顶点顺序会更改渲染行为,directx,directx-11,Directx,Directx 11,我正在学习初级DirectX教程。我已经意识到,我在顶点缓冲区中放置顶点的顺序决定了渲染的成败。例如,这将绘制一个三角形 myVertex vertices[] = { XMFLOAT3(0.0f, 0.4f, 0.5f), XMFLOAT3(0.4f, -0.4f, 0.5f), XMFLOAT3(-0.4f, -0.4f, 0.5f), }; 虽然这没有什么吸引力 myVertex vertices[] = { XMFLOAT3(-0.4f, -0.4f,

我正在学习初级DirectX教程。我已经意识到,我在顶点缓冲区中放置顶点的顺序决定了渲染的成败。例如,这将绘制一个三角形

myVertex vertices[] = {
    XMFLOAT3(0.0f, 0.4f, 0.5f),
    XMFLOAT3(0.4f, -0.4f, 0.5f),
    XMFLOAT3(-0.4f, -0.4f, 0.5f),
};
虽然这没有什么吸引力

myVertex vertices[] = {
    XMFLOAT3(-0.4f, -0.4f, 0.5f),
    XMFLOAT3(0.4f, -0.4f, 0.5f),
    XMFLOAT3(0.0f, 0.4f, 0.5f)
};
  • 这两种情况下都应该有效吗
  • 如果没有,如何确定Directx绘制顶点的正确顺序

这取决于光栅化器设置,该设置允许根据三角形在屏幕空间中是顺时针排列还是逆时针排列来剔除三角形

默认情况下,具有以下属性: D3D11_CULL_模式,具有3个选项: *D3D11_剔除_无 *D3D11_消隐_前 *D3D11_剔除_后

要确定哪些三角形是正面三角形或背面三角形,请使用以下特性: 正向逆时针

若为false,则三角形为后向(若为逆时针方向),前向为顺时针方向

如果是真的,则相反

默认光栅化器设置(如果未创建状态并将其指定给管道)为D3D11_CULL_BACK and front逆时针=FALSE

因此,默认情况下,将不显示顺时针三角形

如果要绘制每个三角形,可以创建光栅化器状态并使用: D3D11_剔除_无

要创建光栅化器状态,请使用


要将结果状态附加到管道,请使用

搜索:背面消隐。我想这在directx 11中是默认启用的