Opengl 禁用从glsl写入深度缓冲区
所有几何图形都存储在一个VBO中(透明+不透明)。我无法对几何进行排序。如何在不丢失数据颜色的情况下禁用从glsl写入深度缓冲区?您不能 我无法对几何进行排序 为什么??你认为这一切都在一个VBO里?然后我得到了一个好消息:完全可以从缓冲区对象的一个子集进行绘制。你不能 我无法对几何进行排序Opengl 禁用从glsl写入深度缓冲区,opengl,glsl,alphablending,depth-buffer,Opengl,Glsl,Alphablending,Depth Buffer,所有几何图形都存储在一个VBO中(透明+不透明)。我无法对几何进行排序。如何在不丢失数据颜色的情况下禁用从glsl写入深度缓冲区?您不能 我无法对几何进行排序 为什么??你认为这一切都在一个VBO里?然后我得到了一个好消息:完全可以从缓冲区对象的一个子集进行绘制。你不能 我无法对几何进行排序 为什么??你认为这一切都在一个VBO里?然后我得到了一个好消息:完全可以仅从缓冲区对象的子集进行绘制。如果我理解正确,您希望禁用深度写入,因为您同时绘制不透明和透明对象。除了它在GLSL中不能以这种方式工作
为什么??你认为这一切都在一个VBO里?然后我得到了一个好消息:完全可以仅从缓冲区对象的子集进行绘制。如果我理解正确,您希望禁用深度写入,因为您同时绘制不透明和透明对象。除了它在GLSL中不能以这种方式工作之外,它不会产生你想要的东西,如果它能产生的话 如果您只是禁用了“深度临时写入”,则透明对象后面的不透明对象将覆盖它,而不管z顺序如何 您真正想做的是:
请注意,正如DatenWalf已经指出的那样,多个对象位于一个VBO中并不意味着您不能绘制它们的子集,也不意味着您不能按任何顺序绘制多个子集。毕竟,VBO只保存一些顶点,由您决定按哪个顺序绘制它们的哪些组。如果我理解正确,您希望禁用深度写入,因为您同时绘制不透明和透明对象。除了它在GLSL中不能以这种方式工作之外,它不会产生你想要的东西,如果它能产生的话 如果您只是禁用了“深度临时写入”,则透明对象后面的不透明对象将覆盖它,而不管z顺序如何 您真正想做的是:
请注意,正如DatenWalf已经指出的那样,多个对象位于一个VBO中并不意味着您不能绘制它们的子集,也不意味着您不能按任何顺序绘制多个子集。毕竟,VBO只保存一些顶点,这取决于您以何种顺序绘制其中的哪些组。我应该在下一个规则中缩短VBO中的多边形:检测不透明多边形并在VBO的开头移动HI,然后绘制。是吗?我应该在下一个规则中缩短vbo中的多边形:检测不透明的多边形并在vbo的开头移动HI,然后绘制。是吗?我不明白为什么客户端代码上会有这样的负担。在自动处理片段之后,这样做要容易上千倍,而且在不涉及CPU计算的情况下,会大大提高性能。我越来越确信OpenGL在编写越来越愚蠢的标准时不会使用他们的大脑。@lukasz1985:之所以如此沉重,是因为你只有一个深度值。具有透明对象的场景在对象重叠的每个片段中具有多个深度,但只能保留一个深度(最接近眼睛的不透明深度)。对于透明对象,它们在任何给定片段上绘制的Z顺序没有很好的定义(OpenGL无法预先知道),但这对结果非常重要。因此,您必须在应用程序级别对它们进行排序。使用原子操作系统和“fat”缓冲区,可以实现您设想的“千倍容易”的方式,但这有巨大的需求。。。。。。在内存和带宽上,它只在最新的硬件上运行,而且这两者都不是一件小事(参见类似的例子)。OpenGL也必须考虑到不是顶级的硬件,而且当你没有两位数千兆字节的视频内存可用时,它仍然必须工作。因此,不幸的是,它不可能是进化的全部。@lukasz1985:嗯,不。。。“高级”意味着对纹理和缓冲区对象进行原子操作,在帧缓冲区中实现每个片段的链表,并在着色器中对它们进行排序。那种简单的东西。如果你想要可预测的、可复制的,这真的不是那么容易