光线追踪器根据相机角度扭曲立方体?

Ano*_*oob 0 java raytracing

本质上,发生的情况是我的光线追踪器渲染的 3D 立方体出现了一些奇怪的扭曲,随着相机向上移动,这种扭曲会继续恶化,即使立方体位于屏幕上的同一位置。

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

这是输出的图片:

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

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

Kag*_*nar 5

看起来您正在根据欧拉角而不是通常的投影来计算要投射的光线。

通常,“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
    }
Run Code Online (Sandbox Code Playgroud)

如果您想旋转该视场,您可以使用一种常用技术(例如 4x4 矩阵乘法)。