Graphics 光线跟踪中如何选择焦距?

Graphics 光线跟踪中如何选择焦距?,graphics,raytracing,Graphics,Raytracing,我刚开始做一个光线跟踪项目。这里有一个非常基本的问题:我有摄像机在世界坐标中的位置。如何确定视图平面的位置? 为了清楚起见:已经提供了相机信息:我的相机位于(0,1,10),指向(0,0,-1),向上方向为(0,1,0)。对于透视视图:gluPerspective(45,1.0,0.1100)。我不知道相机位置是用作视图平面还是视点。谢谢。您想要45视场和1纵横比这意味着焦距f是 f = (w/2) / tan(45/2) = (h/2) / tan(45/2) 其中w和h是胶片平面的宽度和高

我刚开始做一个光线跟踪项目。这里有一个非常基本的问题:我有摄像机在世界坐标中的位置。如何确定视图平面的位置?
为了清楚起见:已经提供了相机信息:我的相机位于(0,1,10),指向(0,0,-1),向上方向为(0,1,0)。对于透视视图:gluPerspective(45,1.0,0.1100)。我不知道相机位置是用作视图平面还是视点。谢谢。

您想要45视场和1纵横比这意味着焦距
f

f = (w/2) / tan(45/2) = (h/2) / tan(45/2)
其中
w
h
是胶片平面的宽度和高度

如果平面已标准化(在[-1,1]^2中),
f
仅为:

f = 1/tan(45/2)
在右手坐标系中,光线原点将为
(0,0,f)

相机与焦距无关。
您可以通过摄影机变换在世界空间中变换光线,也可以使用摄影机的倒数变换摄影机空间中的世界。

我建议您看看scratchapixel的这一课,它是CG编程技术的知识库:

此外:


在这种情况下,视图平面应位于何处,您能否更具体一些?我在进行转换时仍然遇到问题。这取决于您,但放置视图平面的好位置是在图像空间中以(0,0,0)为中心的平面z=0内,并在[-1,1]^2中进行规格化。查看一些光线跟踪代码或教程,了解光线和视图平面是如何设置的,网上有很多资源。例如,Szirmay Kalos有一些关于这个主题的好的免费书籍()哦,我刚刚意识到我可以在设置视图平面后手动将像素坐标转换为世界坐标。谢谢你的帮助。