我正在尝试将透明对象渲染到缓冲区中。我想粗略估计从近似剪裁平面到网格中每个片段的距离之和(不仅仅是最近的一个)。我知道阅读的并发问题(当前总数)&将(新的总数)写入SIMD架构中的缓冲区,但我正在尝试找到一种方法。
为了清楚起见,我将包括一些说明我的问题的ASCI艺术:
│
┌──┼──┐A
│┌─┼──┘B
│└─┼──┐C
└──┼──┘D
│
near-clipping plane
因此,该线表示单个屏幕像素,&在那个像素内,我想记录所有距离之和的值:A,B,C,& D.(而不仅仅是D,就像在正常的z缓冲区中一样。)
有关如何使用着色器完成此操作的任何想法? WebGL会更受欢迎,但直接的OpenGL也是一种选择。
答案 0 :(得分:3)
您可以使用深度测试禁用渲染,一个着色器将片段深度作为片段颜色发出,并使用叠加混合来生成深度和输出。然而,最有可能想要具有平均值。所以你应该发出一个vec2(1/2**bit_depth, depth)
,这样在一个通道中,加法混合会得到总和的表面数量,另一个得到总和的通道,这样你就可以确定第二步的平均值。