为什么顶点顺序会改变渲染行为
Why Order of Vertices Change Rendering Behaviour
我正在学习初级 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 绘制的正确顶点顺序?
这取决于光栅化器设置,它允许剔除三角形,具体取决于它们在屏幕中时是顺时针顺序还是逆时针顺序 space。
默认情况下 D3D11_RASTERIZER_DESC 具有 属性:
D3D11_CULL_MODE 有 3 个选项:
* D3D11_CULL_NONE
* D3D11_CULL_FRONT
* D3D11_CULL_BACK
要确定哪些三角形是正面或背面,您可以使用 属性 :
正面逆时针
如果为 false,则三角形逆时针方向为背面,顺时针方向为正面。
如果为真,则相反。
默认光栅化器设置(如果您不创建状态并将其分配给管道)是 D3D11_CULL_BACK 和 FrontCounterClockwise=FALSE
所以默认情况下,顺时针三角形不会显示。
如果你想不顾一切地绘制每个三角形,你可以创建一个光栅器状态并使用:
D3D11_CULL_NONE
要创建光栅器状态,请使用 ID3D11Device::CreateRasterizerState
要将结果状态附加到管道,请使用 ID3D11DeviceContext::RSSetState
我正在学习初级 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 绘制的正确顶点顺序?
这取决于光栅化器设置,它允许剔除三角形,具体取决于它们在屏幕中时是顺时针顺序还是逆时针顺序 space。
默认情况下 D3D11_RASTERIZER_DESC 具有 属性: D3D11_CULL_MODE 有 3 个选项: * D3D11_CULL_NONE * D3D11_CULL_FRONT * D3D11_CULL_BACK
要确定哪些三角形是正面或背面,您可以使用 属性 : 正面逆时针
如果为 false,则三角形逆时针方向为背面,顺时针方向为正面。
如果为真,则相反。
默认光栅化器设置(如果您不创建状态并将其分配给管道)是 D3D11_CULL_BACK 和 FrontCounterClockwise=FALSE
所以默认情况下,顺时针三角形不会显示。
如果你想不顾一切地绘制每个三角形,你可以创建一个光栅器状态并使用: D3D11_CULL_NONE
要创建光栅器状态,请使用 ID3D11Device::CreateRasterizerState
要将结果状态附加到管道,请使用 ID3D11DeviceContext::RSSetState