babylon101| 09. Intersect Collisions - mesh(网格交叉碰撞)

在动态的场景中,物体之间是运动和相互作用的。为了得到最好的渲染效果,你需要知道你的网格什么时候相互接触。在本教程中,我们将了解碰撞系统是如何工作的

e438c4c0d507faa9aebf765bc336b9ef557.jpg

本教程将展示两种碰撞检测方法:一种是在两个网格接触时引发碰撞事件,另一种是检测网格与单点之间的接触

我们将讨论上面的场景,第一个球和第二个球(气球)与旋转过的平面碰撞,最后一个球将只在一个点上碰撞

  • Intersect mesh  网格碰撞

这里的重点是检查气球和平面的接触情况,我们将使用“intersectsMesh()”函数,它有两个参数:要检查的网格和判断碰撞的精度(布尔值)。

if (balloon1.intersectsMesh(plan1, false)) {
  balloon1.material.emissiveColor = new BABYLON.Color4(1, 0, 0, 1);
} else {
  balloon1.material.emissiveColor = new BABYLON.Color4(1, 1, 1, 1);
}

为了通过检查网格上的许多细节来避免昂贵的计算,babylon引擎在对象周围创建一个边界框,并测试该框和碰撞网格之间的交集,下面是一个包围框的例子:

Collisions

但是这个边界框的精确程度是可以调节的,这就是为什么我们有第二个参数。简而言之,如果这个参数被设置为true(默认情况下为false),那么边界框更接近网格(OBB边界类型),但是这是一种开销更大的计算,请注意,当网格旋转到某个角度时,这种类型的边界框特别有用,所以在选择之前考虑一下碰撞的细节

Collisions

  • Intersect point  单点碰撞

可以使用的另一个函数是具有特定点的“intersectsPoint()”,如下所示:

var pointToIntersect = new BABYLON.Vector3(10, -5, 0);
if (balloon3.intersectsPoint(pointToIntersect)){
  balloon3.material.emissiveColor = new BABYLON.Color4(1, 0, 0, 1);
}

我们在场景中定义了一个精确的点,如果气球与这个点相交,气球上的任何地方,事件就会被提起,我们改变气球的颜色

参考资料: https://doc.babylonjs.com/babylon101/intersect_collisions_-_mesh

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值