本质上,发生的情况是我的光线追踪器渲染的 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
}
Run Code Online (Sandbox Code Playgroud)
如果您想旋转该视场,您可以使用一种常用技术(例如 4x4 矩阵乘法)。
| 归档时间: |
|
| 查看次数: |
123 次 |
| 最近记录: |