我正在从一本3D计算机图形书中学习,试图为教育目的实现我自己的软件渲染器。在本书开始讨论透视投影之前,一切都很顺利,它有点令人困惑。
这本书(3D游戏编程大师的诀窍)谈论的是计算d
:从视点到视平面的距离。如果我们从书中看到这张扫描图像(我希望安德尔不介意,因为我试过联系他询问但没有回复):
嗯,这里很明显,除了数字之外,作者的意思是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
因此,如果我们成倍增加或分开则无关紧要。