A-Frame物理系统:定制物理材料

时间:2017-06-16 13:16:45

标签: virtual-reality aframe cannon.js

我使用'A-Frame物理系统'(https://github.com/donmccurdy/aframe-physics-system)在A-Frame中创建了一个场景:

<!DOCTYPE>
<html>
<head>

<script src="aframe.min.js"></script>
<script src="aframe-extras.min.js"></script>
<script src="aframe-physics-system-master/dist/aframe-physics-system.min.js"></script>
</head>

  <a-scene id="myscene" physics>
    <!--CAMERA-->
    <a-entity camera="userHeight: 1.6" look-controls></a-entity>

    <!--BALL1-->
    <a-sphere color="red" radius="0.3" position="5 5 5" dynamic-body></a-sphere>

    <!--BALL2-->
    <a-sphere color="green" radius="0.3" position="6 5 5" dynamic-body></a-sphere>

    <!--GROUND-->
    <a-plane id="ground" height="200" width="200" rotation="-90 0 0" position="0 0 0" metalness="0" roughness="1" static-body></a-plane>

  </a-scene>
</body>
</html>

场景由两个球体和一个平面组成。我想要一个球在击中飞机时比其他球弹跳更多。我从文档中了解到,我们可以使用以下方法更改整个场景的摩擦和恢复等属性:

<a-scene physics="friction: 0.1; restitution: 0.5">
    <!-- ... -->
</a-scene>

但是我想要不同的球体有不同的摩擦力和恢复力值。如果可以在A-Frame中告诉我。提前谢谢!

1 个答案:

答案 0 :(得分:4)

根据physics component documentation:通过CANNON.js JavaScript API可以为不同的对象指定不同的碰撞行为。

对于自定义行为,您需要深入了解Cannon.js documentation并找到您想要的方法和类。尽管如此,实施自定义材料的方式如下:

  • 加农炮物理学是用他们自己的Cannon.world计算/制作的。
  • Cannon Objecs拥有自己的材料
  • Cannon.ContactMaterial定义物理,当这些物体相互碰撞/相互作用时。它需要被添加到Cannon.world中,因为它负责物理学。

有了这些,您可以从以下步骤开始:

  • 获取CANNON.world参考: var world = $('a-scene')[0].systems.physics.world;
  • 创建两个自定义材料: var firstMaterial = new CANNON.Material("firstMaterial"); var secondMaterial = new CANNON.Material("secondMaterial");
  • 将材质应用于a-frame对象: $('#cannon')[0].body.material=firstMaterial; $('floor')[0].body.material=secondMaterial;

  • 创建联系人资料并将其添加到世界 var secondCM = new CANNON.ContactMaterial(firstMaterial,secondMaterial, [restitution = 2]); world.addContactMaterial(secondCM);

Here你可以找到一个工作小提琴。