Algo - 光线追踪:像鸡蛋一样的球体

时间:2014-05-22 18:51:46

标签: geometry raytracing

我目前正在研究一个名为“Raytracer”的项目。 我遇到一个问题,当它们没有居中时,球体是椭圆形的。

以下是我的代码的摘录:

int           i;
int           j;
t_ray         vect;
i = -1;

vect.x = 100. - cam.x;

while (++i < screenx)
{
    j = -1;

    vect.y = ((screenx / 2.) - i - cam.y) * -1.;

    while (++j < screeny)
    {
        vect.z = (screeny / 2.) - j - cam.z;
    }
}

3 个答案:

答案 0 :(得分:3)

这可能不是一个错误,而只是透视投影如何运作的现实。当相机直接观察球体时,投影是圆形的,但当它远离中心时,它会扭曲。欲了解更多信息,请阅读POV-Ray wiki中的此链接:http://wiki.povray.org/content/Knowledgebase:Misconceptions#Topic_3

答案 1 :(得分:0)

以这种方式,矢量在不同像素上具有不同的长度。您应该在最后对矢量进行标准化(将组件除以矢量长度)

答案 2 :(得分:0)

现在可能已经很晚了,但要给你答案,你的问题&#34;实际上被称为&#34;鱼眼&#34;。我也解决了这个问题。有很多方法可以避免这个问题。最简单的方法是增加相机与场景之间的距离。这不是更清洁的方式。

你也可以规范你的光线,这里有一些原因:

。保持每条射线的相同距离比

。保持每条光线与其相邻光线之间的相同角度

。使许多交叉点计算更容易