【问题标题】:Odd behaviour when trying to create triangle using TriangleStrip Topologu尝试使用 TriangleStrip Topologu 创建三角形时的奇怪行为
【发布时间】:2012-11-08 19:36:50
【问题描述】:

我尝试在 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,它起作用了。三角形是按照我的意图绘制的。这种奇怪行为的原因是什么?

【问题讨论】:

    标签: directx directx-11 directx-10


    【解决方案1】:

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

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

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

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

    Front face and vertex normals

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

    Culling state

    cull mode for DirectX11

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

    Triangle Strips

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多