19 2月

光线(直线)和三角形碰撞检测

今天我们来讲光线追踪之三角形碰撞的检测,三角形是所有不规则物体的基础,为什么这么说呢。因为不规则物体都可以用三角面来表示,是一堆三角面的集合,所以和一个不规则物体进行的光线碰撞检测其实就是和一堆三角形进行碰撞检测。那学过三维软件的同学都知道,我们建模更多的用的是四边面,也可能是多边面,其实这些多边面都能最终转换成三边面,所以今天来介绍怎么进行三角形的碰撞检测。

三角形定义:

triangle

是由三个点确认的一个平面。要确定垂直于面的发现n,有以下公式:

tfo

为了判断一条光线是否和一个三角形相交,首先我们先找到三角形所在的平面,然后再判断,线和平面的交点是否在三角形里面。这个算法牵扯到质心坐标系统Barycentric coordinate (α,β,γ),在平面上的任意点p可表示为:p

满足:α+β+γ=1

如果平面上的点p在三角形内,那么需要满足一下条件:

constaint

那么如果光线和三角形所在的平面的交点p满足上述条件,那么点就在三角形内,即直线和三角形相交。

实际上一个平面空间上我们可以转换成2维平面,我们可以去掉一个轴α。α=1-β-γ

p

可以转化成:

p(β,γ)=a+β(b-a)+γ(c-a)

需要满足条件:

ooo

当β=0:p=a+γ(c-a), 0<γ<1,(c-a)表示一条三角形边

当γ=0:p=a+γ(b-a),0<γ<1,(b-a)表示的三角形的另一条边.

我们替代β+γ=1,β=1-γ。p=b+γ(c-b), 0<γ<1(c-b)表示的是第三条边。

直线方程: p=o+td

我们可以得到方程:finaleq

gratrai

(β,γ)表示轴,α表示原点

Code

发表评论

电子邮件地址不会被公开。