Physics-Based Ray Tracing

Ray-Triangle Intersection

有很多关于光线和三角形求交的算法,这里学习一下包含三角形的参数平面重心坐标算法,因为它不包含除了三角形顶点的长期存储。

为了将一个光线和参数平面求交,我们设置了一个笛卡尔坐标方程组:

image-20230325224858566

等号左边是光线经过了多少t和三角形相交,右边是光线和三角形交点坐标在三角形参数平面上的uv坐标。

在参数平面上,所有点都是abc三个点的线性组合,也就是说:

image-20230325225105321

其中beta和gamma需要当且仅当$\beta>0,\ \gamma>0,\ \beta+\gamma<1$时,交点才在三角形上。从上面的方程可以得到关于t,beta,gamma的方程组:

image-20230325225425703

易转换为线性系统:

image-20230325225447936

经典的算法是用克拉默法则(Cramer’s Rule)嗯算。这里貌似也只讲了克拉默法则嗯算,算出t,beta和gamma。

最后程序的结果是这样

image-20230325230411118

image-20230325230447319

不过为啥我看的shader里面的求交算的比这个麻烦很多,因为涉及到很多数值计算上的细节。