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++ 尝试使用OpenGL着色器在场景中添加失真效果_C++_Opengl_Shader_Fragment Shader - Fatal编程技术网

C++ 尝试使用OpenGL着色器在场景中添加失真效果

C++ 尝试使用OpenGL着色器在场景中添加失真效果,c++,opengl,shader,fragment-shader,C++,Opengl,Shader,Fragment Shader,我正在尝试构建一个着色器,该着色器会扭曲最终图像,更具体地说,它会产生波浪效果,有点像这样: 但当对象移动时,其“几何体”会移动 这个 是我想要应用失真的图像 现在,它不必是随机的,它不需要被定位在特定的区域。只是一个 整个渲染图像中的静态正弦模式就是我要寻找的 当我在谷歌上搜索这个问题时,我找到的最接近的是线程。但是OP想要在纹理上应用效果,这不是我想要的。 无论哪种方式,我尝试使用代码,我得到了以下结果: 如您所见,变形仅应用于纹理,它作为固定纹理而不是整个场景。如果我移动立方体,变形

我正在尝试构建一个着色器,该着色器会扭曲最终图像,更具体地说,它会产生波浪效果,有点像这样:

但当对象移动时,其“几何体”会移动

这个

是我想要应用失真的图像

现在,它不必是随机的,它不需要被定位在特定的区域。只是一个 整个渲染图像中的静态正弦模式就是我要寻找的

当我在谷歌上搜索这个问题时,我找到的最接近的是线程。但是OP想要在纹理上应用效果,这不是我想要的。 无论哪种方式,我尝试使用代码,我得到了以下结果:

如您所见,变形仅应用于纹理,它作为固定纹理而不是整个场景。如果我移动立方体,变形将充当纹理,并随立方体一起移动。不是真的像一面扭曲的镜子

我还指出,我不能更改片段着色器上像素的坐标,例如,使立方体所在的像素更多地位于顶部,或更多地位于底部(如正弦曲线)。片段着色器只选择片段光栅化的颜色


那么,是否可以使用GLSL着色器实现这种效果?如果是,如何进行?

您需要两次渲染过程。第一种方法将场景渲染到绑定到纹理的帧缓冲区中。第二种方法获得均匀的纹理,并将要实现的后期效果渲染到默认帧缓冲区。因此,只需在片段着色器中对当前像素的纹理进行适当的查找和映射,就可以实现预期效果。教程:是的,两个通行证就是方法…@Scheff,太棒了,谢谢!我来看看:)