Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ GLSL玻璃效果加深度剥离_C++_Opengl_Glsl_Shader - Fatal编程技术网

C++ GLSL玻璃效果加深度剥离

C++ GLSL玻璃效果加深度剥离,c++,opengl,glsl,shader,C++,Opengl,Glsl,Shader,我正在渲染一个可能有多个相交透明对象的场景。这使得排序和向后绘制的标准方法成了问题(如果三角形相交,即使对三角形进行排序也不起作用)。因此,我使用GLSL片段着色器实现了深度剥离,以进行第二次深度测试。这很好用 现在我希望能够使用着色器应用某些效果。场景中的一个对象是注射器,我想应用玻璃效果。如果我画回前面,这将很容易-只要在我画注射器时启动着色器,因为它后面的所有东西都已经在帧缓冲区中。然而,当使用深度剥离时,这种方法将不起作用 因此,我的问题是: 使用深度剥离时,如何将着色器效果应用于场景中

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

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

因此,我的问题是:

  • 使用深度剥离时,如何将着色器效果应用于场景中的单个对象
  • 如何将效果着色器与深度剥离着色器组合(假设它们需要同时运行)

  • 我应该注意到,我在使用着色器方面非常新手,因此代码示例非常受欢迎

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

    您所说的“玻璃效果”到底是什么意思?光学失真?我正计划从光学失真开始,因为这取决于知道玻璃后面是什么,这是我想实现的几个其他效果的一个很好的例子。最终,我也会考虑应用折射/反射,但从我所看到的情况来看,这需要一种不同的方法。如果应用效果的对象保证不相交,这会改变情况吗?