GLSL玻璃效果加深度剥离

时间:2013-05-04 14:18:18

标签: c++ opengl glsl shader

我正在处理一个可能有多个交叉透明对象的场景。这使得排序和绘制的标准方法有问题(如果三角形相交,甚至排序三角形也不起作用)。所以我使用GLSL片段着色器实现了深度剥离,以进行第二次深度测试。它很棒。

现在我希望能够使用着色器应用某些效果。场景中的一个对象是注射器,我想应用玻璃效果。如果我回到前面,这很容易 - 只需在我绘制注射器时启动着色器,因为它背后的所有内容都已经在帧缓冲区中。但是,使用深度剥离时,这种方法不起作用。

所以我的问题是:

  1. 如何在使用深度剥离时将着色器效果应用于场景中的单个对象?
  2. 如何将效果着色器与深度削皮着色器结合使用(假设它们需要同时运行)?
  3. 我应该注意到我在使用着色器时非常新,所以感谢代码示例!

1 个答案:

答案 0 :(得分:0)

如果没有光线追踪,我会感到惊讶。据我所知,使用折射着色器的方法是在环境贴图中进行纹理查找。此映射可以预先计算,也可以在单独的渲染过程中即时计算。对于后一个选项,对于使用着色器的每个对象,您需要一个单独的环境贴图和一个额外的通道。我有点怀疑,如果物体彼此相交,那是可能的。即使是这样,对于每个传球,你还需要另外几次传球来进行深度剥离。现在,如果您还希望深度剥离着色器通过考虑周围物体的折射,这很快就会失控。