码迷,mamicode.com
首页 > 编程语言 > 详细

三角形求交算法

时间:2018-06-17 19:50:13      阅读:165      评论:0      收藏:0      [点我收藏+]

标签:ram   rap   说明   TE   计算   算法   fonts   alt   分享   

在光线追踪中,我们常常要处理对于Mesh的渲染,由于Mesh一般由一个个三角形所构成,因此需要我们去计算光线和Mesh每个三角形之间是否存在交点。这可以看做是一个射线和三角形的求交问题。《Fundamentals of Computer Graphics (3rd edition)》中提出了一个in-place的算法,在这里予以介绍。

设光线的起点为e,方向为d,三角形三个顶点为a,b,c。那么可以得到:

e+td=a+β(b-a)+γ(c-a)

其中,β、γ为三角形的重心坐标。β+γ<1。那么可以得到以下公式:

 技术分享图片

将它化为线性方程组:

技术分享图片

那么我们要求解的其实就是β、γ和t,接下来利用Cramer法则求解即可。

技术分享图片

 

技术分享图片

其中矩阵A为:

技术分享图片

当|A|为0,或β+γ>1时,说明光线和该三角形不想交,否则可计算出交点p=e+td

 

三角形求交算法

标签:ram   rap   说明   TE   计算   算法   fonts   alt   分享   

原文地址:https://www.cnblogs.com/wickedpriest/p/9193314.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!