尝试使用TriangleStrip Topologu创建三角形时的奇怪行为

dev*_*roy 1 directx directx-11 directx-10

我试图在输入汇编器设置为三角形条带的情况下创建这个2D三角形:

1.(0.0f, 0.0f, 0.5f)
2.(-0.5f, 0.0f, 0.5f)
3.(-0.5f, -0.5f, 0.5f)
Run Code Online (Sandbox Code Playgroud)

但是,没有绘制三角形,实际上渲染目标上没有绘制任何内容,甚至没有绘制单行.我搞砸周围,然后我换坐标23,和它的工作.正如我想要的那样绘制三角形.这种奇怪行为的原因是什么?

zdd*_*zdd 6

您可以按逆时针顺序定义顶点,默认情况下Direct3D将以逆时针顺序剔除面,因此在背面剔除过程中您的三角形被剔除,因此您无法渲染任何内容.

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

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

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

在此输入图像描述

正面和顶点法线

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

剔除状态

DirectX11的剔除模式

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

三角形条

三角带