DX11中的顶点缠绕顺序

问题描述 投票:2回答:1

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

如果我将第一个三角形的顶点指定为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);
c++ directx vertices culling
1个回答
5
投票

所以我的问题是,我是否需要对三角形中的三角形的顶点进行排序不管剔除模式是什么?

**以顺时针顺序定义/绘制顶点,并且不要更改默认的剔除模式。**

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

  1. 正面,或者您称其为缠绕顺序,默认情况下Direct3D将按顺时针顺序定义的顶点视为正面,除正面以外的所有面均为背面。
  2. 默认情况下,Direct3D的剔除模式将剔除背面(以逆时针顺序定义顶点的面)。

您可以在D3D11_RASTERIZER_DESC结构中设置正面和淘汰模式

将剔除模式更改为NONE时看不到差异的原因是,两个三角形的顺序相同,D3D11_CULL_NONE表示没有剔除任何面。

如果三角形1沿顺时针方向而三角形2沿逆时针方向,则仅当将消隐模式设置为D3D11_CULL_FRONT或D3D11_CULL_BACK时,您会看到一个三角形,而当将其设置为D3D11_CULL_NONE时,您将看到两个三角形。

© www.soinside.com 2019 - 2024. All rights reserved.