我尝试在 Input Assembler 设置为三角形带的情况下创建这个 2D 三角形:
1.(0.0f, 0.0f, 0.5f)
2.(-0.5f, 0.0f, 0.5f)
3.(-0.5f, -0.5f, 0.5f)
但是,没有绘制三角形,实际上在渲染目标上没有绘制任何内容,甚至没有绘制一条线。我搞砸了,然后我交换了坐标2
和3
,它起作用了。三角形是按照我的意图绘制的。这种奇怪行为的原因是什么?
我尝试在 Input Assembler 设置为三角形带的情况下创建这个 2D 三角形:
1.(0.0f, 0.0f, 0.5f)
2.(-0.5f, 0.0f, 0.5f)
3.(-0.5f, -0.5f, 0.5f)
但是,没有绘制三角形,实际上在渲染目标上没有绘制任何内容,甚至没有绘制一条线。我搞砸了,然后我交换了坐标2
和3
,它起作用了。三角形是按照我的意图绘制的。这种奇怪行为的原因是什么?
您按逆时针顺序定义顶点,Direct3D 默认情况下会剔除按逆时针顺序定义的面,因此您的三角形在背面剔除期间被剔除,因此您没有渲染任何内容。
在 DirectX 中绘制三角形时应该考虑两件事。
您定义顶点的顺序决定了正面和背面。正面是按顺时针顺序定义顶点的正面,请尝试按顺时针顺序定义顶点。
剔除模式指定如何剔除背面三角形,尝试使用 D3D11_CULL_NONE 来测试您的代码,这将确保每个三角形都将被渲染,而不管顶点的定义顺序如何。
绘制三角形条带时应该小心,因为背面剔除标志会在偶数三角形上自动翻转。考虑下图。对于第一个三角形v1v2v3,剔除模式是逆时针的,它将被渲染,对于第二个三角形v2v3v4,剔除模式翻转为顺时针,它也会被渲染。对于第三个三角形,剔除模式再次变回,依此类推。如果要渲染这样的三角形带,则应按以下顺序定义顶点:v1、v2、v3、v4、... vn。