提问人:SebastienL 提问时间:10/10/2023 更新时间:10/10/2023 访问量:43
C++ 光线投射,质疑鱼眼校正
C++ Raycasting, questioning the fish eye correction
问:
我正在实现基于 2D 地图的等距 (C++) 渲染,就像 1992 年的 Wolfenstein3D 游戏一样。我想实现我自己的解决方案,所以初始版本是幼稚的方法,我不对到下一个像元交叉点的距离做出任何假设。这是一个重要的精度,因为这种不同的方法使得将我的代码与现有版本进行比较变得更加困难。
与所有光线投射教程一样,我偶然发现了鱼眼效果,并且不得不纠正它,因为效果非常巨大:
我实现了给定的解决方案,即沿着投影计划的法线投影物体距离,或乘以cos(beta),Beta 是 FoV 角度。在检查了我的一些系统参数后,我得出了一些可以接受的东西,但还不是 youtube 中一些教程中介绍的完美解决方案。如果现在墙壁是平坦的,由于这种校正,我会得到另一个错误,在 FoV 的边缘更近地看到物体。
正如你所看到的,我只想有直线,但我仍然会得到一些烦人的曲线。我做了一些测试,教程中建议的鱼眼校正并没有完全加起来。当我们进行校正时,根据我们使用的 FoV 角度,我们不会为同一物体找到相同的距离。因此,如果我只是旋转播放器而不进行平移,我会看到对象的大小发生变化。当我直视它们时,校正值为 1,当我在 FoV 的边缘看到它们时,它们看起来会更大,因为 cos(Beta) 产生的值介于 0 和 1 之间。
我想知道,有没有办法完全消除这种影响,还是会一直存在?你可以看看我的完整实现。
答: 暂无答案
评论