我正在尝试使用 openGL 在图像上创建 lomo 鱼眼效果。
我应该使用立方体映射和鱼眼投影吗?有没有我可以参考的开源?
您可以绘制带有纹理的图像的单个四边形,并使用片段着色器根据需要扭曲每个像素的纹理坐标。你必须自己做所有的数学运算,但看起来上一篇文章可能是一个很好的起点。
使问题标题超出图像的效果以产生“真实”的鱼眼视图,即。可用视野 180+ 度...
有两种稍微不同的方法可以使现有管道适应鱼眼视图(使用“简单”OpenGL)。两者都需要最多 6 次场景渲染 - 对于将投影到平面屏幕的“盒子”的每一侧。每个侧面/表面必须是方形的 - 或者应该是,取决于方法 - 并且可能小于原始的完整视口。
所需的边数取决于要求的鱼眼视野有多宽。在典型的 FPS 中,对于 130 的 FOV - 三边就足够了。对于高达 220 的 FOV - 五面。
方法 1 更简单,并提供更好的结果。
陷阱:
这当然取决于特定引擎的细节。我不确定这适用于 OpenGL 3.3+ 核心配置文件的效果如何,但想法应该是相同的。
通过在顶点着色器中进行鱼眼变换,可以一次将世界绘制到鱼眼。但!它需要充分(预先)细分的原始几何图形。或者,可以使用几何着色器和/或镶嵌着色器来组织 GPU 上的镶嵌/变换反馈。也许后者应该从头开始构建到渲染中。
有关使用 Quake 1 引擎的隔离良好的示例,请参阅Fisheye 和 Panorama OpenGL FPS以及此差异。不幸的是,顶点着色器示例丢失了。