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 矩阵乘法)。
基本上,发生的事情是我的光线追踪器渲染的 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 矩阵乘法)。