我应该如何做深度独立的混合

How should I do depth independent blending?

本文关键字:混合 独立 深度 何做 我应该      更新时间:2023-10-16

我正在制作一个名为Gwen的GUI工具包的opengl3渲染器。我几乎所有的工作,但我有一些问题,使一切正确混合。我已经根据它们使用的纹理对三角形进行了排序,并将它们打包到一个VBO中,所以在单元测试中,它基本上可以归结为3层:没有纹理的填充矩形,文本,以及使用皮肤纹理的窗口,按钮等。

填充矩形通常绘制在其他所有东西的顶部并混合在一起,但一切背后的背景也是一个填充矩形,所以我不能指望。如果你最后画它们,就会有z值冲突(例如:窗口的边缘有一个纹理阴影,因为背景没有通过深度测试而变成黑色),如果你先画它们,就会有混合/z值冲突(例如:一些选择高光被画在上面,而不是像它们应该的那样混合)。

我不能指望能够识别任何特定的层,除了填充矩形。不同的层有不同的z值,所以我不能按照一定的顺序来画。在写这篇文章的时候,我想到了一个简单的方法来绘制三角形,但这可能意味着很多小的绘制调用,这是我希望避免的。有没有什么方法能让我保留大量的三角形呢?

您正在绘制GUI;批处理不应该是您的首要任务,因为GUI并不能做很多事情。GUI几乎永远不会成为您的性能瓶颈。这有过早优化的味道;首先,让它工作。然后,如果它太慢,让它工作得更快。

没有简单的机制来实现与顺序无关的透明度。最好的方法是按照适当的Z轴顺序来呈现。