光线追踪基础与DirectX光线追踪入门
1. 光线的数学描述
在光线追踪中,三维光线是一个重要的计算概念。在数学和光线追踪里,光线通常指三维半直线,一般用直线上的区间来表示。由于三维空间中没有类似于二维直线 $y = mx + b$ 的隐式方程,所以通常使用参数形式。
参数直线可以表示为点 $A$ 和 $B$ 的加权平均值:
[P(t) = (1 - t)A + tB]
在编程中,可将其看作函数 $P(t)$,它以实数 $t$ 为输入,返回点 $P$。对于整条直线,参数 $t$ 可以取任意实数值,即 $t \in [-\infty, +\infty]$,随着 $t$ 的变化,点 $P$ 会沿着直线连续移动。
为实现该函数,需要一种表示点 $A$ 和 $B$ 的方法,通常使用笛卡尔坐标,在 API 和编程语言中,这种表示通常称为 vec3 或 float3 ,包含三个实数 $x$、$y$ 和 $z$。同一条直线可以用直线上任意两个不同的点来表示,但选择不同的点会改变给定 $t$ 值所定义的位置。
也可以使用一个点和一个方向向量来表示光线。如图所示,可选择光线方向 $d = B - A$,光线原点 $O$ 为点 $A$,则光线方程为:
[P(t) = O + td]
出于某些原因,如通过点积计算向量之间的余弦值,一些程序会将 $d$ 限制为单位向量 $\hat{d}$,即进行归一化。归一化方向向量的一个有用结果是,$t$ 直接表示从原点的有符号距离。一般来说,任意两个 $t$ 值的差值就是对应点之间的实际距离:
[|P(t_2) - P(t_
超级会员免费看
订阅专栏 解锁全文
86

被折叠的 条评论
为什么被折叠?



