我正在关注初学者级别的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)
};
这取决于栅格化器设置,它可以根据在屏幕空间中显示的三角形是顺时针还是逆时针来剔除三角形。
默认情况下,D3D11_RASTERIZER_DESC具有以下属性:D3D11_CULL_MODE具有3个选项:* D3D11_CULL_NONE* D3D11_CULL_FRONT* D3D11_CULL_BACK
要确定哪些三角形是正向的或背面的,请使用属性:FrontCounterClockwise
如果为false,则三角形为反面,以防它们是逆时针方向,而正面是顺时针。
如果为true,则相反。
[默认光栅化器设置(如果不创建状态并将其分配给管道)为D3D11_CULL_BACK和FrontCounterClockwise = FALSE
因此默认情况下,将不显示顺时针三角形。
如果无论如何都要绘制每个三角形,则可以创建光栅化器状态并使用:D3D11_CULL_NONE
要创建光栅化器状态,请使用ID3D11Device::CreateRasterizerState
要将结果状态附加到管道,请使用ID3D11DeviceContext::RSSetState