我正在尝试实现一个简单的光线跟踪算法,因此第一步是使用我在书中找到的这两个方程将像素坐标转换为uvw坐标系iam

其中l,r,b,t是视点,(i,j)是像素索引,(nx,ny)是场景宽度和高度
然后,为了计算规范坐标,我使用

我想要理解前面的公式,以及为什么它们给出了透视投影的uwv坐标,而不是正交投影(当我使用正交投影时,公式仍然会给出结果,就好像使用透视投影一样)。
发布于 2011-08-16 02:56:37
让我们假设你的相机是某种金字塔。它有一个底面,我将其称为“相机屏幕”,金字塔的高度,也称为焦距,将标记为F(或在您的等式中,Ws)。
T(op)
*---------*
|\ /|
| \ / |
| \ / |
| \ / |
L(eft) | *E(ye| R(ight)
| / \ |
| / \ |
| / \ |
|/ \|
*---------*
B(ottom)假设j从下到上(从-Ny/2到+Ny/2,步长为1/Ny),i从左到右(从-Nx/2到+Nx/2,步长为1/Nx)。请注意,如果Ny为偶数,j将上升到Nx/2-1 (当Nx为偶数时也类似)。
当您在图像中从下到上移动时,屏幕上的将从B值移动到T值。在你从下到上的d分数( 0=bottom和1=top之间),你的身高是
Vs = T + (B-T) * d稍微玩玩一下,就会发现分数d实际上是:
d = (j + 0.5) / Ny所以:
Vs = T + (B-T) * (j + 0.5) / Ny类似地:
Us = L + (R-L) * (i + 0.5) / Nx现在,让我们将U表示为从左到右的向量,V从下到上,'W‘从眼睛向前移动。所有这些向量都是归一化的。
现在,假设眼睛位于(0,0)的正上方,恰好在金字塔矩形面的中心上方。
要直接从眼睛转到(0,0),你可以这样做:
Ws * W然后,要从该点转到索引(i,j)屏幕上的另一个点,您需要执行以下操作:
Us * U + Vs * V您将能够看到i = 0的Us = 0和j = 0的Vs = 0 (从B = -T和L = -R开始,因为眼睛直接位于矩形的中心上方)。
最后,如果我们将它们组合在一起,屏幕上索引(i,j)上的一个点是
S = E + Us * U + Vs * V + Ws * W享受吧!
https://stackoverflow.com/questions/7067178
复制相似问题