我正在寻找一些算法来为图像添加凸镜效果和凹面镜效果。我还想知道如何有效地实现这一点:将算法应用于图像数据或通过包含效果的透明图像覆盖它。但我不认为第二种选择适用于这种情况。
答案 0 :(得分:2)
如果您是手动而不是使用硬件基元,那么bresenham interpolation algorithm
(通常用于线条绘制)是要走的路:错误传播比其他更复杂的方法更有效。< / p>
Bresenham所做的只是插值。不要错过在其他地方使用其高效设计的机会(线路扫描的斜率计算只是插值的众多应用之一:您可以插入另一个维度:2D,3D,透明度,反射,颜色等)。 / p> 25年前,我记得曾经用它来调整位图的大小,甚至在实时3D引擎中进行纹理映射!那是图形加速的视频板花费了大量财富......
答案 1 :(得分:2)
CImg库中有一个鱼眼样本,例如\ CImg_demo.cpp。核心算法看起来非常简单(而且速度很快,通常是这个库)。我认为它是真实光学效果的近似值,但可以修改以处理凸面镜像。我不知道它是否可以扩展到处理“负”曲率。
答案 2 :(得分:1)
您可以使用pre-calculated sin() table
并插值以匹配位图的大小。通过使用偏移或更大的表来实现反效果。
记得80年代的DOS演示(很棒的时候)...