光线追踪相机 - 正交投影转透视投影

4
我正在实现一个光线跟踪器,目前使用正交投影。我想将其转换为透视投影。我知道在正交投影中,你从每个像素发送光线并检查相交点。在透视投影中,光线的起始位置是固定的,而不是从每个像素开始。
因此,我认为在透视投影中,光线的起始位置应该是相机的位置。问题是,我不认为我曾经明确放置过相机,所以我不知道要将我的光线起始位置改变到哪里。
如何确定相机的位置?我尝试了(0, 0, 0),但这只留下了一张空白图像,所以我认为它不正确。

1
如果您有一张空白的图像,那么您的相机没有对准您的对象。当您放置一个透视相机时,您是在放置所有光线起源的点。当您旋转相机或操作其缩放时,您正在操作像素网格,通过该网格将光线投射到场景中。尝试进行数学计算,找出您需要哪些相机参数才能使光线实际命中您的对象。除了这个通用建议外,我无法帮助您,因为我无法从您提供的少量信息中理解您的问题。 - cmaster - reinstate monica
2个回答

2
在正交投影中,每个像素点通过的光线方向相同,就好像这些光线源自于一个放置在无限远处的屏幕后面的摄像机。
在透视投影中,摄像机必须放置在屏幕后面的有限距离处。每条光线都应该从摄像机出发,穿过屏幕上的每个像素点。屏幕和摄像机之间的距离取决于观察角度。

我相信你把术语搞反了。正交投影假定摄像机位置是无限的,因为视锥体的墙壁是平行的。 - Diniden
我的错误。非常感谢! - Sufian Latif

0

你可以通过首先选择透视投影的角度来三角化从相机到物体的距离。一个简单的例子:选择垂直视野(FOV)为60度的角度,假设你的对象中心在(0,0,0),并且你想将相机放置在沿Z轴朝向物体中心的位置。这形成了一个三角形,在这个三角形中,你可以用三角函数公式三角化出距离:distance = (objectHeight/2) / tan(60/2)。因此,你将相机放置在(0,0,distance)处。你可以将这个概念应用于实际物体的位置。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接