【发布时间】:2012-01-12 09:48:52
【问题描述】:
所有几何图形都存储在一个 VBO 中(透明 + 不透明)。我无法对几何进行排序。如何在不丢失数据颜色的情况下禁用从 glsl 写入深度缓冲区?
【问题讨论】:
-
我应该在下一条规则中在 vbo 中短接多边形:检测不透明的多边形并在 VBO 的开头移动他,然后绘制。对吗?
标签: opengl glsl alphablending depth-buffer
所有几何图形都存储在一个 VBO 中(透明 + 不透明)。我无法对几何进行排序。如何在不丢失数据颜色的情况下禁用从 glsl 写入深度缓冲区?
【问题讨论】:
标签: opengl glsl alphablending depth-buffer
如果我理解正确,您想禁用深度写入,因为您同时绘制不透明和透明对象。除了它在 GLSL 中不能以这种方式工作之外,它不会产生你想要的东西,如果它产生了。
如果您只是禁用深度写入ad hoc,则在透明对象之后的不透明对象将覆盖它,而不管 z 顺序如何。
你真正想做的是:
如果由于某种原因,您无法对 不透明 几何图形进行排序(尽管确实没有理由不能这样做?),没关系 - 它会稍微慢一些因为它不会剔除片段,但会产生相同的图像。
如果由于某种原因,您无法对 透明 几何图形进行排序,则在多个透明对象重叠的情况下,您将不得不期待不正确的结果。这可能会或可能不会引起注意(特别是如果顺序是“随机的”,即逐帧更改,这将非常明显 - 否则您实际上可能会侥幸逃脱,尽管它不正确。
请注意,正如 datenwolf 已经指出的那样,多个对象位于一个 VBO 中的事实并不意味着您不能绘制它们的子集,或者以您想要的任何顺序绘制多个子集。毕竟,一个 VBO 只包含一些顶点,这取决于你按什么顺序绘制它们中的哪些组。
【讨论】:
你不能。
我无法对几何图形进行排序。
为什么?你认为是因为这一切都在一个 VBO 中吗?然后我得到了好消息:完全可以从缓冲区对象的子集中进行绘制。
【讨论】: