透视投影视图平面距离计算混淆?

时间:2016-03-27 18:35:33

标签: math graphics rendering projection perspectivecamera

我正在从一本3D计算机图形书中学习,试图为教育目的实现我自己的软件渲染器。在本书开始讨论透视投影之前,一切都很顺利,它有点令人困惑。

这本书(3D游戏编程大师的诀窍)谈论的是计算d:从视点到视平面的距离。如果我们从书中看到这张扫描图像(我希望安德尔不介意,因为我试过联系他询问但没有回复):

enter image description here

嗯,这里很明显,除了数字之外,作者的意思是0.5 *宽度而不是宽度。

然后他继续说:

tan(θ) = opposite/adjacent = y/x, and in this case, y is the distance and x is related to the width.

查看该图,我无法看到这是正确的,因为角度θ/2的反面是W/2而相邻的是d。所以:

tan(θ/2) = (W/2) / d =>
d * tan(θ/2) = (W/2) =>
d = (W/2) / tan(θ/2)

我错了吗?我错过了什么吗?作者是否意味着别的什么?

感谢任何想法/想法/解释。

编辑:虽然在本书的代码中,它确实可以正常运作'当使用乘法时,但它不正确。因为对象应该变小,所以使用更高的FOV值,这就是划分正确的原因。但是如果使用乘法,则较大对象获得的FOV越高。我认为作者没有注意到这一点,因为他大多数时间使用90度FOV角度而tan(90/2)=1因此,如果我们成倍增加或分开则无关紧要。

0 个答案:

没有答案