Haskell-Raytracer相机定义 - 翻转y轴

时间:2014-01-10 11:51:49

标签: math haskell camera coordinates raytracing

我对简单光线跟踪器的相机实现有疑问。到目前为止,我已经像这样实现了视图平面的坐标轴

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

0 个答案:

没有答案