社区
游戏开发
帖子详情
D3D中MESH是否被1个平面所分割MESH与1个平面相交的检测判断的代码如何做?
renxu350
2011-04-12 08:48:09
如题,D3D中MESH与1个平面相交的检测判断如何做?
也就是MESH是否被1个平面所分割,
常用的,通常的做法有什么具体的详细的函数,代码什么的?
...全文
147
3
打赏
收藏
D3D中MESH是否被1个平面所分割MESH与1个平面相交的检测判断的代码如何做?
如题,D3D中MESH与1个平面相交的检测判断如何做? 也就是MESH是否被1个平面所分割, 常用的,通常的做法有什么具体的详细的函数,代码什么的?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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,323
社区成员
23,684
社区内容
发帖
与我相关
我的任务
游戏开发
游戏开发相关内容讨论专区
复制链接
扫一扫
分享
社区描述
游戏开发相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章