【发布时间】:2011-11-06 01:12:33
【问题描述】:
嗯,我目前有一个 3d 场景,上面只有一个带有纹理的四边形(绘画)。在这幅画和“相机”之间,我放置了另一个四边形,我想表现得像一个光学镜头:扭曲“下方”的图片 如何最好使用着色器和一些像素缓冲区来实现它?
【问题讨论】:
标签: opengl graphics glsl effects
嗯,我目前有一个 3d 场景,上面只有一个带有纹理的四边形(绘画)。在这幅画和“相机”之间,我放置了另一个四边形,我想表现得像一个光学镜头:扭曲“下方”的图片 如何最好使用着色器和一些像素缓冲区来实现它?
【问题讨论】:
标签: opengl graphics glsl effects
这是我不久前发现的一个示例,它的功能与您想要的非常相似。 http://www.paulsprojects.net/opengl/refract/refract.html
您可能需要稍微修改代码以实现您想要的反转效果,但这会让您走上正确的道路。
编辑: 顺便说一句,您不需要第二张图像(倒置的小矩形)。只需使用单个背景图像和着色器。
【讨论】:
在这幅画和“相机”之间,我放置了另一个四边形,我想表现得像一个光学镜头:
这是一个棘手的问题。首先必须了解 OpenGL 是一种所谓的本地化渲染模型光栅化器,通俗地说,它就像画布上的铅笔和画笔一样工作。
因此,它的工作方式与光线追踪器等全局场景表示渲染器形成了鲜明对比。光线追踪器实际上是在完全定义的场景上运行的,因此它可以轻松处理诸如折射之类的事情。
确实,我们必须像艺术家对待工具一样对待 OpenGL。因此,您想要创建的任何光学“效果”都必须通过掌握 OpenGL 提供的工具可能的各种绘图技术来实现。要创建您想要的效果,您必须实施多阶段流程。
对于折射,您首先将场景渲染为折射对象在所有方向上“看到”(创建动态立方体贴图),然后将此立方体贴图用作栅格化“折射”对象的输入数据,其中着色器用于确定照射到光栅化片段的光线的折射方向。
顺便说一句:折射适用于任何其他类似的相互作用效果。阴影与 OpenGL 中的折射一样重要。
【讨论】: