【发布时间】:2021-02-21 11:11:12
【问题描述】:
是否可以实现自定义深度缓冲区值,以便实现非传递排序?例如
Red > Green
Green > Blue
Blue > Red
我想这将在片段着色器或其他东西中实现,仅当像素根据上述模式位于现有像素之上时才写入像素。请注意,由于它是不可传递的,因此不可能为每种颜色分配一个数值并保留顺序。
换句话说,我想要一个自定义 z 缓冲区,其中每个元素都是非传递类型。因此,z 缓冲区将是一个充满Red、Green 或Blue 值的大表。为每个分配一个数字,然后根据上面的模式进行比较以确定哪个在顶部。如果所有三种颜色都在同一个片段上,那么我不在乎哪一种在上面。
下图说明了我的意思(这是我希望它能够做到的):
(来自维基百科的图片)
我想要的东西在 OpenGL 中是否可行,还是我太过分了?如果可能,性能下降会有多严重?
【问题讨论】:
-
@KaiBurjack 感谢您的建议,但我不只是想满足我给出的人为示例。我相信将您的解决方案推广到任意排列的彩色对象是不可能的。我真的需要一个非传递 z 排序
-
@KaiBurjack 我确实举了一个例子......关键是你不能只解决这个例子然后说你已经解决了整个广义问题。我想要一个自定义的 z 缓冲区。我会尽量让这个问题更清楚
-
等等,你想要的只是简单地制作某种颜色的片段覆盖另一种颜色的片段,而不考虑深度值?
-
"这就是我希望它能够做的事情" 你想要的没有意义。如果这三个都重叠会发生什么?应该是什么颜色?既然不涉及“深度”,这些如何算作“深度缓冲区”?
-
我认为您可以使用帧缓冲区来完成此操作。
标签: opengl glsl shader depth-buffer