1

我尝试在 Input Assembler 设置为三角形带的情况下创建这个 2D 三角形:

1.(0.0f, 0.0f, 0.5f)
2.(-0.5f, 0.0f, 0.5f)
3.(-0.5f, -0.5f, 0.5f)

但是,没有绘制三角形,实际上在渲染目标上没有绘制任何内容,甚至没有绘制一条线。我搞砸了,然后我交换了坐标23,它起作用了。三角形是按照我的意图绘制的。这种奇怪行为的原因是什么?

4

1 回答 1

6

您按逆时针顺序定义顶点,Direct3D 默认情况下会剔除按逆时针顺序定义的面,因此您的三角形在背面剔除期间被剔除,因此您没有渲染任何内容。

在 DirectX 中绘制三角形时应该考虑两件事。

  1. 您定义顶点的顺序。
  2. 当前使用的剔除模式。

您定义顶点的顺序决定了正面和背面。正面是按顺时针顺序定义顶点的正面,请尝试按顺时针顺序定义顶点。

在此处输入图像描述

正面和顶点法线

剔除模式指定如何剔除背面三角形,尝试使用 D3D11_CULL_NONE 来测试您的代码,这将确保每个三角形都将被渲染,而不管顶点的定义顺序如何。

剔除状态

DirectX11 的剔除模式

绘制三角形条带时应该小心,因为背面剔除标志会在偶数三角形上自动翻转。考虑下图。对于第一个三角形v1v2v3,剔除模式是逆时针的,它将被渲染,对于第二个三角形v2v3v4,剔除模式翻转为顺时针,它也会被渲染。对于第三个三角形,剔除模式再次变回,依此类推。如果要渲染这样的三角形带,则应按以下顺序定义顶点:v1、v2、v3、v4、... vn。

三角带

三角带

于 2012-11-09T01:31:13.793 回答