我该如何进行深度独立混合?

时间:2011-09-10 10:12:14

标签: c++ user-interface opengl opengl-3

我正在为一个名为Gwen的GUI工具包开发一个OpenGL 3渲染器。我几乎把所有东西都搞定了,但是我遇到了一些让一切正确混合的问题。我已经按照它们使用的纹理对三角形进行了排序并将它们打包成VBO,所以使用单元测试,它基本上归结为3层:没有纹理的填充矩形,文本,以及使用a的窗口,按钮等皮肤纹理。

填充矩形通常被绘制在其他所有东西之上并混合在一起,但是所有东西背后的背景也是一个填充矩形,所以我不能指望它。如果最后绘制它们会产生Z值冲突(例如:窗口边缘有纹理阴影,因为背景未通过深度测试而变黑),如果先绘制它们,则会出现混合/ z值冲突(例如:一些选择亮点被绘制在上面,而不是像他们应该的那样混合。

我不能指望除了Filled Rects之外能够识别任何特定的图层。不同的图层具有z值的混合,因此我不能仅按照特定顺序绘制它们以使其工作。在写这篇文章的时候,我想到了一种简单的方法,可以将三角形绘制成前后排序,但它可能意味着很多小的绘制调用,我希望避免这些调用。是否有一些方法涉及一些伏都教魔法混合,这将让我保留我的大批三角形?

1 个答案:

答案 0 :(得分:3)

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

没有与订单无关的透明度的简单机制。最好的办法就是按正确的Z顺序渲染事物。