DirectX/OpenGL中的三角形绘制顺序

9

在3D API中,绘制三角形的顺序是否保证与索引缓冲区中的顺序相同?

例如,如果我在单个绘制调用中有两个重叠的三角形,并且深度测试被禁用,最终哪个三角形将可见,第一个还是第二个?

或者我需要发出单独的绘制调用,以确保第2个三角形出现在第1个三角形的上方?

1个回答

9

在OpenGL中,确实保留了顺序,因此可以使用画家算法,例如在渲染半透明几何图形时。

至于Direct3D,我不确定,但我认为同样也适用。


谢谢!你有官方文档的链接吗,证明顺序会被保留吗?像Adreno或Xbox GPU这样的平铺架构,在多个瓷砖中分别进行绘图,不会影响这一点吗? - kaalus
1
@kaalus:我可以保证顺序,但是我找不到DX的参考资料。GL至少在4.2核心配置文件的p115中有一个提及。平铺不会影响它。 - Bahbar
1
@Bahbar确实,它只是顺便提到了。这是实际文本:“同一着色器类型的调用相对顺序未定义。当着色器在原语B上工作时发出存储可能会在原语A的存储之前完成,即使原语A在原语B之前指定。即使是片段着色器,片段着色器输出按原语顺序写入帧缓冲区,但由片段着色器调用执行的存储不是。” - kaalus
3
@kaalus:我找到了最初的提及。2.1 GL基础知识,第5页的最后一段:必须在任何后续的原语影响帧缓冲区之前完全绘制一个原语。 - Bahbar
@kaalus 抱歉回复晚了,但这个答案仍然正确吗?我可以信任它吗? - khokm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接