镜头着色器/图像失真

时间:2011-11-06 01:12:34

标签: opengl graphics glsl effects

嗯,我现在有一个3D场景,只有一个四边形(绘画),上面有纹理。在绘画和“相机”之间我有一个其他四边形我想表现得像一个光学镜头:扭曲图片“下面”它 scene i want to archive 如何使用着色器和一些像素缓冲区来实现它?

2 个答案:

答案 0 :(得分:3)

这是我前一段时间发现的一个例子,它与你想要的东西非常相似。 http://www.paulsprojects.net/opengl/refract/refract.html

您可能需要稍微修改一下代码才能达到所需的反转效果,但这样可以让您开始走上正轨。

修改 顺便说一下,你不需要第二张图像(倒置的小矩形)。只需使用单个背景图像和着色器。

答案 1 :(得分:2)

  

在绘画和“相机”之间我有一个其他四边形,我想表现得像一个光学镜头:

这是一个棘手的问题。首先必须要了解OpenGL是一个所谓的本地化渲染模型光栅化器,这意味着在外行术语中,它就像铅笔和画笔一样在画布上工作。

因此,它与全局场景表示渲染器(如光线跟踪器)形成鲜明对比。光线跟踪器实际上是在一个完全定义的场景上运行,因为它可以轻松地进行折射等事情。

事实上,必须像对待艺术家一样对待OpenGL。因此,您想要创建的任何光学“效果”必须通过使用OpenGL提供的工具掌握各种绘图技术来实现。要创建您想要的效果,您必须实施多阶段过程。

对于折射,您首先将场景渲染为折射对象在所有方向上“看到”(您创建动态立方体贴图),然后使用此立方体贴图作为输入数据来栅格化“折射”对象,其中着色器用于确定击中光栅化碎片的光线的折射方向。

BTW:对于任何其他类似的相互作用效果,折射的含义是什么。在OpenGL中,阴影就像折射一样非常重要。