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

Raytracer warps cube based on camera angle?

基本上,发生的事情是我的光线追踪器渲染的 3D 立方体出现了一些奇怪的变形,随着相机向上移动,这种变形会继续恶化,即使立方体在屏幕上的同一位置也是如此。

密码在http://pastebin.com/HucgjRtx

这是输出的图片:

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

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

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

通常对“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 矩阵乘法)。