请选择 进入手机版 | 继续访问电脑版

NX二次开发

 找回密码
 立即注册
查看: 475|回复: 1

[技术分享] 转载:射线和三角形的相交检测

[复制链接]

558

主题

755

帖子

3524

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3524
发表于 2018-7-27 08:34:01 | 显示全部楼层 |阅读模式
最近公司给新人出题,就是求射线集与三角形面片集的相交点。
这个算法很经典,请参考资料:
http://www.cnblogs.com/graphics/archive/2010/08/09/1795348.html
在上面这个地址中,它计算的结果,似乎是计算的射线与三角形所在面的交点,不是三角形本身。
大家可以验证一下……
另外:作者提供的源代码,应该还有问题,既然是射线,如果是有方向的,他这个貌似没有考虑,而是当成了直线与三角面求交点。
  1. // Determine whether a ray intersect with a triangle
  2. // Parameters
  3. // orig: origin of the ray
  4. // dir: direction of the ray
  5. // v0, v1, v2: vertices of triangle
  6. // t(out): weight of the intersection for the ray
  7. // u(out), v(out): barycentric coordinate of intersection

  8. bool IntersectTriangle(const Vector3& orig, const Vector3& dir,
  9.     Vector3& v0, Vector3& v1, Vector3& v2,
  10.     float* t, float* u, float* v)
  11. {
  12.     // E1
  13.     Vector3 E1 = v1 - v0;

  14.     // E2
  15.     Vector3 E2 = v2 - v0;

  16.     // P
  17.     Vector3 P = dir.Cross(E2);

  18.     // determinant
  19.     float det = E1.Dot(P);

  20.     // keep det > 0, modify T accordingly
  21.     Vector3 T;
  22.     if( det >0 )
  23.     {
  24.         T = orig - v0;
  25.     }
  26.     else
  27.     {
  28.         T = v0 - orig;
  29.         det = -det;
  30.     }

  31.     // If determinant is near zero, ray lies in plane of triangle
  32.     if( det < 0.0001f )
  33.         return false;

  34.     // Calculate u and make sure u <= 1
  35.     *u = T.Dot(P);
  36.     if( *u < 0.0f || *u > det )
  37.         return false;

  38.     // Q
  39.     Vector3 Q = T.Cross(E1);

  40.     // Calculate v and make sure u + v <= 1
  41.     *v = dir.Dot(Q);
  42.     if( *v < 0.0f || *u + *v > det )
  43.         return false;

  44.     // Calculate t, scale parameters, ray intersects triangle
  45.     *t = E2.Dot(Q);

  46.     float fInvDet = 1.0f / det;
  47.     *t *= fInvDet;
  48.     *u *= fInvDet;
  49.     *v *= fInvDet;

  50.     return true;
  51. }
复制代码


回复

使用道具 举报

2

主题

40

帖子

261

积分

终日乾乾

Rank: 3Rank: 3

积分
261
发表于 2018-7-28 07:34:21 | 显示全部楼层
学习了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋| ( 蜀ICP备16014681号

GMT+8, 2018-12-19 05:55 , Processed in 0.076937 second(s), 24 queries .

Powered by www.nxopen.cn

© 2001-2013 nxopen.cn

快速回复 返回顶部 返回列表