从THREE.Mesh或THREE.Geometry创建CANNON.RigidBody

usa*_*nds 5 javascript three.js cannon.js

我正在THREE.Mesh使用如下THREE.JSONLoader对象创建一个对象:

// Create castle.
loader.load('/Meshes/CastleTower.js', function(geometry, materials) {
    var tmp_material = new THREE.MeshLambertMaterial();
    THREE.ColorUtils.adjustHSV(tmp_material.color, 0, 0, 0.9);

    var castle = new THREE.Mesh(geometry, tmp_material);
    castle.scale.set(0.2, 0.2, 0.2);
    castle.rotation.setX(-Math.PI/2);
    scene.add(castle);
});
Run Code Online (Sandbox Code Playgroud)

是否可以CANNON.RigidBodyTHREE.Mesh(var castle)或THREE.Geometry(var geometry)对象创建?您可以阅读此内容的另一种方法是:如何使任何自定义THREE.Mesh"可靠"?

更新

我使用了Blender,从盒子中创建了一个新城堡,并将其导出为Three.js格式.如果将质量设置0为a CANNON.Body,则它保持静态.完美地解决了......

Doi*_*del 1

这取决于模型的物理表示的精确程度。我对 cannon.js 不太熟悉,但这里有一些我知道的选项:

  • 在你的塔上使用“computeBoundingBox”并使用这些边界创建一个 cannon.js 框
  • 以类似的方式使用“computeBoundingSphere”
  • 将物理学用于凹面(即任意)网格。这是最消耗性能的方式。Cannon.js 这里有一个例子:http://schteppe.github.io/cannon.js/demos/bunny.html

一种非 cannon.js 相关的方法是使用 Recast。Recast 将为您加载 .obj 文件,并根据您的设置为您创建导航网格。然后你可以在那里走动(如果你有类似 RTS 鸟瞰游戏或到处跑的机器人,那就太棒了)。可以在这里找到重铸的 javascript 端口: https: //github.com/vincent/recast.js

希望这可以帮助!