三角形与光线相交检测算法详解
// 根据三角形的三个顶点计算出两条边E1和E2,以及边E1和光线方向dir的叉积S1和S2 Vector3f E1 = v1-v0, E2 = v2-v0, S = orig-v0; Vector3f S1 = crossProduct(dir,E2), S2 = crossProduct(S,E1);
// 计算S1和E1的点积,如果小于等于0,则不相交 if (dotProduct(S1,E1)<=0) return false;
// 计算参数tnear、u和v tnear = dotProduct(S2,E2)/dotProduct(S1,E1); u = dotProduct(S1,S)/dotProduct(S1,E1); v = dotProduct(S2,dir)/dotProduct(S1,E1);
// 判断光线是否与三角形相交 if(tnear>=0 && u>=0 && v>=0 && (1-u-v)>=0) return true; return false;
原文地址: https://www.cveoy.top/t/topic/ofrB 著作权归作者所有。请勿转载和采集!