我目前正在研究一个名为“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;
}
}
答案 0 :(得分:3)
这可能不是一个错误,而只是透视投影如何运作的现实。当相机直接观察球体时,投影是圆形的,但当它远离中心时,它会扭曲。欲了解更多信息,请阅读POV-Ray wiki中的此链接:http://wiki.povray.org/content/Knowledgebase:Misconceptions#Topic_3
答案 1 :(得分:0)
以这种方式,矢量在不同像素上具有不同的长度。您应该在最后对矢量进行标准化(将组件除以矢量长度)
答案 2 :(得分:0)
现在可能已经很晚了,但要给你答案,你的问题&#34;实际上被称为&#34;鱼眼&#34;。我也解决了这个问题。有很多方法可以避免这个问题。最简单的方法是增加相机与场景之间的距离。这不是更清洁的方式。
你也可以规范你的光线,这里有一些原因:
。保持每条射线的相同距离比
。保持每条光线与其相邻光线之间的相同角度
。使许多交叉点计算更容易