从像素坐标获取uvw坐标以进行光线跟踪

时间:2011-08-15 15:46:59

标签: math graphics 3d vector-graphics raytracing

我正在尝试实现一种简单的光线跟踪算法 所以第一步是将像素坐标转换为uvw坐标系 我使用我在书中找到的那两个方程式 enter image description here

其中l,r,b,t是视锥体点,(i,j)是像素索引,(nx,ny)是场景宽度和高度

然后计算我使用的规范坐标

enter image description here

我想了解前面的方程式以及为什么它们为透视投影提供uwv坐标而不是正交投影(当我使用正交投影时,方程式仍然给出了使用透视投影的结果)

1 个答案:

答案 0 :(得分:3)

让我们假设您的相机是某种金字塔。它有一个底面,我称之为“相机屏幕”,金字塔的高度,也称为焦距,将被标记为F(或在你的等式中,Ws)。

         T(op)
       *---------*
       |\       /|
       | \     / |
       |  \   /  |
       |   \ /   |
L(eft) |    *E(ye| R(ight)
       |   / \   |
       |  /   \  |
       | /     \ |
       |/       \|
       *---------*
         B(ottom)

我们假设j从底部到顶部(从-Ny/2+Ny/21/Ny为步长),i从左到右正确(从-Nx/2+Nx/2,步骤为1/Nx)。请注意,如果Ny是偶数,则j上升到Nx/2-1(当Nx为偶数时类似)。

当您在图片中从下到上,在屏幕上时,您会从B值移至T值。从底部到顶部的分数d(0 =底部和1 =顶部)之间,您的身高是

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

您可以看到Us = 0的{​​{1}}和i = 0的{​​{1}}(Vs = 0j = 0以及B = -T直接位于矩形的中心上方。)

最后,如果我们将它组合在一起,屏幕上索引L = -R的一个点是

(i,j)

享受!