Raytracer根据摄像机角度扭曲立方体?

时间:2015-08-12 20:02:12

标签: java raytracing

基本上,正在发生的事情是我的光线跟踪器渲染的3D立方体有一些奇怪的变形,即使立方体位于屏幕上的同一位置,它也会随着摄像机向上移动而继续恶化。

代码位于http://pastebin.com/HucgjRtx

以下是输出图片:

http://postimg.org/image/5rnfrlkej/

编辑:问题解决为我只是计算向量的角度错误。我发现的最好的方法是根据你的FOV(Z)当前像素X和当前像素Y创建一个矢量,然后对该矢量进行标准化。

1 个答案:

答案 0 :(得分:4)

看起来您正在计算基于欧拉角而不是通常投影的光线。

通常是" 3D"相机被建模,使得相机处于一个点,光线通过与其间隔一定距离的网格投射......顺便说一句,就像看着距离你的脸部一定距离的显示器并将光线投射通过每个像素一样。监视器。

在固定情况下,计算在概念上很简单......例如

double pixelSpacing = 0.005;
double screenDistance = 0.7;
for (int yIndex= -100; yIndex<= 100; yIndex++)
    for (int xIndex= -100; xIndex<= 100; xIndex++) {
        Vector3 ray = new Vector3(
           xIndex * pixelSpacing,
           yIndex * pixelSpacing,
           screenDistance
        );
        ray = vec.normalize();
        // And 'ray' is now a vector with our ray direction
    }

如果要旋转此视野,可以使用常用技巧之一(例如4x4矩阵乘法)。