光线-双线性曲面求交

计算机图形学中的许多技术,例如光线追踪,均需要计算光线与物体之间的交点。通常情况下,求交的物体可能是球体、三角形或多边形,但其他类型的表面也是有可能的。这里,我们将讨论光线和双线性曲面之间的求交计算。

本文中的算法来自犹他大学Shaun D. Ramsey,Kristin Potter,Charles Hansen等人于2004年发表的一篇论文《Ray Bilinear Patch Intersection》

基础知识

在光线追踪中,光线的表达形式如下:

p⃗ (t)=r⃗ +tq⃗ ,t01

其中, r⃗  表示光线的起点,向量 q⃗  表示光线的方向。光线上的任意一点 p⃗  均可由一个参数t的值确定。

双线性曲面的四个顶点 (p⃗ 00,p⃗ 01,p⃗ 02,p⃗ 03) 。每个点的贡献被描述为参数 (u,v) 的权重,任意一点 p 可以被如下公式表示,其中(u,v)[0,1]2

p⃗ (u,v)=(1u)(1v)p⃗ 00+(1u)vp⃗ 01+u(1v)p⃗ 10+uvp⃗ 112

用下列变量进行替换:

a⃗ =p⃗ 11p⃗ 10p⃗ 01+p⃗ 003.1

b⃗ =p⃗ 10p⃗ 003.2

c⃗ =p⃗ 01p⃗ 003.3

d⃗ =p⃗ 003.4

得到的双线性曲面的公式如下:

p⃗ (u,v)=uva⃗ +ub⃗ +vc⃗ +d⃗ 4

求交过程

为了计算光线与双线性曲面的交点,设光线与双线性曲面相等:

r⃗ +tq⃗ =uva⃗ +ub⃗ +vc⃗ +d⃗ 5

其中, t,u v 是未知的。

要解决求交问题的第一步就是要求出t

t=(uvax+ubx+vcx+dxrx)/qx6.1

t=(uvay+uby+vcy+dyry)/qy6.2

t=(uvaz+ubz+vcz+dzrz)/qz6.3

目前有3个等式和3个未知数。可以通过将 x y方程设置为等于 z 方程并分解u v 来消除未知数t

uv(axqzazqx)+u(bxqzbzqx)+v(cxqzczqx)+(dxrx)qz(dzrz)qx=07

uv(ayqzazqy)+u(byqzbzqy)+v(cyqzczqy)+(dyry)qz(dzrz)qy=08

可以用以下变量进行替换:

A1=axqzazqx

B1=bxqzbzqx

C1=cxqzczqx

D1=(dxrx)qz(dzrz)qx

A2=ayqzazqy

B2=byqzbzqy

C2=cyqzczqy

D2=(dyry)qz(dzrz)qy

将方程简化为以下两个方程,存在两个未知数:

uvA1+uB1+vC1+D1=09

uvA2+uB2+vC2+D2=010

用方程10来求解 u 如下:

u=(vC2D2)(vA2+B2)11

用方程9消除 u 可得:

(vC2D2)(vA2+B2)vA1+(vC2D2)(vA2+B2)B1+vC1+D1=0

通分合并同类项可得分子部分如下:

v2(A2C1A1C2)+v(A2D1A1D2+B2C1B1C2)+(B2D1B1D2)=012

方程12是标准二次方程。解出 v 后,我们利用公式11去求解相关交点的u值。然而,根据曲面和光线,等式11的分母对于有效的交点可能变为零。为了解决这个问题,在求解 u 之前将公式7和公式8设置为相等。由此得出了u的第二个表达式:

u=v(C1C2)+(D1D2)v(A2A1)+(B2B1)13

通过上述推导,我们将实现光线-双线性曲面的求交算法。

算法过程

对于给定的光线和双线性曲面,可以利用算法3.1来计算交点。算法首先会调用二次方程求解函数返回 v 的0、1或者2个解,这取决于交点的个数,如图1所示。


这里写图片描述
图1 双线性曲面与多条光线相交,光线也许会完全错过曲面(A),与曲面相交一次(B),与曲面相交两次(C)

算法3.1过程如下:


这里写图片描述

对于v的每个解,其中 v[0,1] ,相关 u t的值利用算法3.2进行计算。由于光线与双线性曲面相交数次,因此要准确地选出正确的交点。论文中的算法选择 t 最小时的那个交点,此时t大于或等于0。这个 t 对应光线与双线性曲面之间的第一个交点。

算法3.2过程如下:


这里写图片描述

当二次方程的根确定时,就将其传给算法3.2,用来计算u t 的值。由于使用公式11计算u值可能得出无效的解(原因在求交过程中已阐明),因此由公式9和10联立推导出 u 的第二种公式如公式13所示。算法3.3通过选择等式11和13的分母的最大绝对值来计算u值。这种方法可以确保计算出来的 u 值是有效的。如果u[0,1],则不是交点,且将不再计算 (u,v) 对应的 t 值。

算法3.3过程如下:


这里写图片描述

为了计算t的值,我们使用公式2来计算 p⃗  。对于给定的 p⃗  ,我们使用公式1或6来求解 t 。由于光线方程的公式在求解t时存在除法,算法3.4选择 q⃗  分量绝对值最大的进行计算(避免零除)。

算法3.4过程如下:


这里写图片描述

以上就是光线-双线性曲面求交的整个过程。

参考文献

论文题目:《Ray Bilinear Patch Intersection》
出版源:《Journal of Graphics Tools》 , 2004 , 9 (3) :41-47
作者:Shaun D. Ramsey , Kristin Potter , Charles Hansen

源码下载

http://shaunramsey.com/research/bp/

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值