求交运算
大多数求交无外基本就是写出射线方程和被交物体的方程,然后联立求解,根据一直条件是否符合
射线方程
球方程
\[ \left(T- Origin \right)= R^2 \]平面方程
\[\left(P-Pos_0 \right)* \vec{n} = 0 \]1. 射线与球的求交
求交就好了,最后对t分情况讨论 t的大小然后取值
2.射线与三角形的求交
传统求交方法即联立,求得下式
然后对于t求出的交点坐标是否在三角形内还需进一步判定,可用重心坐标求解
还有一种更高效的方法求交
Möller-Trumbore 算法的核心思想是一步到位的计算出光线是否与三角形相交,主要利用到的知识点是三角形的重心坐标。它是由Tomas Moller 和Ben Trumbore 于1997 年在一篇题名为“Fast, Minimum Storage Ray/Triangle Intersection”的论文中介绍
由三角形内一点都可以由一下方程表示
\[P = \left(1 - \alpha- \beta \right)A + \alpha B+ \beta C \]所以射线与三角形求交可写成如下
\[O+ D*t = \left(1 - \alpha- \beta \right)A + \alpha B+ \beta C \]化简
\[\vec{AO} = \alpha\vec{AB} + \beta\vec{AC} - tD \]写成矩阵形式
\[\begin{pmatrix} \vec{AB}& \vec{AC}& -\vec{D} \end{pmatrix} \begin{pmatrix} \alpha\\ \beta\\ t \end{pmatrix} = \vec{AO} \]求解\(\alpha、\beta、t\)问题就转换为了求解该方程组问题了,只需要使用克拉默法则即可求出\(\alpha、\beta、t\)三个值
克拉默法则
若线性方程的系数矩阵可逆(非奇异),即系数行列式 D≠0,则线性方程有唯一解,其解为
\(x_i = \frac{D_i}{D}\)
最后对比\(\alpha、\beta、t\)是否在\(\left(0,1\right)\)内即可 (具体原因可学习重心坐标)
标签:求交,right,图形学,beta,vec,alpha,left From: https://www.cnblogs.com/a2leaf/p/17793704.html