D3D中MESH是否被1个平面所分割MESH与1个平面相交的检测判断的代码如何做?

renxu350 2011-04-12 08:48:09
如题,D3D中MESH与1个平面相交的检测判断如何做?
也就是MESH是否被1个平面所分割,
常用的,通常的做法有什么具体的详细的函数,代码什么的?
...全文
137 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Sou2012 2011-04-13
  • 打赏
  • 举报
回复
可以把mesh生成一个包围盒, 然后再和平面做检测。
Sou2012 2011-04-13
  • 打赏
  • 举报
回复
虑3D中由极值点pmin和pmax定义的AABB和以标准方式定义的平面:p . n = d,其中n为单位向量,平面与AABB必须处于相同的坐标系中。

一种简单的静态测试方法是,计算矩形边界框顶点和n的点积,通过比较点积和d,来检测边界框的顶点是否完全在平面的一边,或是在另外一边。如果所有点积都大于d,那么整个边界框就在平面的正面所指的一侧;如果所有的点积都小于d,那么整个边界框就在平面的反面所指的一侧。

实际上,不需要检测全部的8个顶点,可以用和变换AABB类似的技巧,例如,如果nx > 0,点积最小的顶点是x = xmin,点积最大的顶点是x= xmax。如果nx < 0,则得出的是相反的结论。对ny、nz也有同样的结论。我们计算最小和最大点积的值,如果最小点积大于d或最大点积小于d,说明它们不相交;否则,两个点在平面的两边,说明边界框与平面相交。

接下来进行动态测试,我们假设平面是静止的(以一个移动物体为参考来考虑它们的相交性检测会比较简单)。边界框的位移由单位向量d和长度L定义,和前面一样,先求得点积最大和最小的顶点,并在t=0时作一次相交性检测,如果边界框和平面最初没有相交,那么一定是离平面最近的顶点先接触平面,它可能就是前一步检测出的两个顶点之一。如果只对与平面的"正面"碰撞感兴趣,那么总是使用点积最小的顶点。一旦检测出先接触到平面的顶点,就可以利用射线与平面的相交性测试来解决问题。
IONPhantom 2011-04-13
  • 打赏
  • 举报
回复
如果不需要非常精确的话就用包围盒,检测8个点是否在平面的两侧,如果都在一侧就无穿越
检测点在一个平面的某一侧总不能不会吧

8,325

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧