【问题标题】:How should I do depth independent blending?我应该如何进行深度无关混合?
【发布时间】:2011-09-10 10:12:14
【问题描述】:

我正在为名为@9​​87654321@ 的GUI 工具包开发OpenGL 3 渲染器。我几乎让所有东西都正常工作,但我在让所有东西正确融合时遇到了一些问题。我已经按照它们使用的纹理对三角形进行了排序,并将它们打包到 VBO 中,因此通过单元测试,它基本上可以归结为 3 层:没有纹理的填充矩形、文本以及窗口、按钮等使用皮肤纹理。

填充矩形通常绘制在其他所有内容之上并混合在一起,但所有内容背后的背景也是填充矩形,所以我不能指望它。如果您最后绘制它们,则存在 Z 值冲突(例如:窗口的边缘周围有一个带纹理的阴影,由于背景未通过深度测试而变黑),如果您先绘制它们,则会出现混合/z 值冲突(例如: 一些选择高光被绘制在顶部而不是像他们应该的那样混合)。

我不能指望能够识别除填充矩形之外的任何特定层。不同的层有混合的 z 值,所以我不能只是按照一定的顺序绘制它们来使事情正常工作。在写这篇文章时,我想到了一个简单的方法来绘制从前到后排序的三角形,但这可能意味着很多小的绘制调用,我希望避免这种情况。有没有一些涉及巫毒魔法混合的方法,可以让我保留我的大批量三角形?

【问题讨论】:

  • 格温很棒。但它会融合吗?

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


【解决方案1】:

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

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

【讨论】:

  • 我只是不想把它搞得太糟糕,因为其他人可能最终会使用它。我有点期待“按 z 排序”的答案,但这并不需要我提出任何问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-05
  • 2023-03-10
  • 2015-03-26
  • 1970-01-01
  • 2016-03-13
  • 1970-01-01
相关资源
最近更新 更多