我对简单光线跟踪器的相机实现有疑问。到目前为止,我已经像这样实现了视图平面的坐标轴
constructAxes :: Position -> LookAtVec -> UpVec -> Axes
constructAxes pos lookAt up = (xAxe, yAxe, zAxe)
where zAxe = normalise $ pos `sub` lookAt
xAxe = normalise $ zAxe `cross` up
yAxe = normalise $ xAxe `cross` zAxe
获得([1,0,0],[0,1,0],[0,0,-1])系统。但事实证明,这种配置导致翻转的y轴(正值沿着负y轴移动物体)。所以我改变了y轴的定义
yAxe = normalise $ xAxe `cross` vnegate zAxe
但为什么我要这样做呢?我的讲座材料和其他一些资源没有提到这样的问题。
我的第二个问题与无限平面的交点有关。当我想得到正确的结果时,我必须用[0,-1,0]
来定义平面的法线,尽管从我的观点来看它必须是[0,1,0]
(但是看起来整个平面也是倒置的)在y方向)。这是描述相机定义的结果吗?
我很欣赏一些提示。
Meiner
PS:这是该计划的相关代码:http://lpaste.net/1844512493116850176