嗯,我现在有一个3D场景,只有一个四边形(绘画),上面有纹理。在绘画和“相机”之间我有一个其他四边形我想表现得像一个光学镜头:扭曲图片“下面”它 如何使用着色器和一些像素缓冲区来实现它?
答案 0 :(得分:3)
这是我前一段时间发现的一个例子,它与你想要的东西非常相似。 http://www.paulsprojects.net/opengl/refract/refract.html
您可能需要稍微修改一下代码才能达到所需的反转效果,但这样可以让您开始走上正轨。
修改强> 顺便说一下,你不需要第二张图像(倒置的小矩形)。只需使用单个背景图像和着色器。
答案 1 :(得分:2)
在绘画和“相机”之间我有一个其他四边形,我想表现得像一个光学镜头:
这是一个棘手的问题。首先必须要了解OpenGL是一个所谓的本地化渲染模型光栅化器,这意味着在外行术语中,它就像铅笔和画笔一样在画布上工作。
因此,它与全局场景表示渲染器(如光线跟踪器)形成鲜明对比。光线跟踪器实际上是在一个完全定义的场景上运行,因为它可以轻松地进行折射等事情。事实上,必须像对待艺术家一样对待OpenGL。因此,您想要创建的任何光学“效果”必须通过使用OpenGL提供的工具掌握各种绘图技术来实现。要创建您想要的效果,您必须实施多阶段过程。
对于折射,您首先将场景渲染为折射对象在所有方向上“看到”(您创建动态立方体贴图),然后使用此立方体贴图作为输入数据来栅格化“折射”对象,其中着色器用于确定击中光栅化碎片的光线的折射方向。
BTW:对于任何其他类似的相互作用效果,折射的含义是什么。在OpenGL中,阴影就像折射一样非常重要。