虚拟3D世界将空间中的点沿x轴,y轴和z轴映射到三维网格。假设透视摄像机从点(0,0,0)观察虚拟世界,在左手系统中向下看正z轴。想象一下,远平面是2个单位宽,2个单位高,并且它的z坐标是1.这意味着场景左上角的点位于(1,1,1)位置。
直接在摄像机前面的点的水平距离(0,0,1)为1个单位,但到最右角的水平距离为(1,0,1)有点过了1.414个单位。为了保持与直接向前观察时相同的透视感,在1个单位的高度处该距离处的点应该看起来比地平线高0.707个单位。相反,它看起来恰好在地平线上方1个单位。
如果您将相机转向直接指向(1,0,1)处的点,则该方向上物体的垂直尺寸会减小:场景看起来会扭曲。当视野相当宽时,当相机需要转动很多时,这会导致恶心的感觉。
我的理解是否正确?如果是这样,有没有办法在OpenGL / WebGL场景的角落校正这种像差?或者用户已经学会了与之共处的东西?