我正在尝试为raymarching编写一个opencl内核。一切正常,但结果图像中出现了明显的鱼眼失真,如本例所示:(这应该是一个立方体)
问题在于我为每条射线构造方向向量的方式。
当前,我为内核提供摄像机的俯仰和偏航方向(代码中的pitch
和yaw
)。
然后基于fov(fov
),内核正在计算的像素坐标(ix
和iy
)以及整个帧的宽度和高度({{ 1}},width
),我得到了音高和射线方向的偏航。
最后,我使用先前计算得出的俯仰和偏航构造了单位矢量。
({height
表示浮点数还是双精度数,取决于内核是以双精度还是单浮点精度运行的)
对于上图,varfloat
是Pi / 3,fov
和width
都是500。
height
有人可以告诉我如何计算方向矢量的俯仰角和偏航角,以消除失真吗?