我正在使用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);
});
是否可以从CANNON.RigidBody
(THREE.Mesh
)或var castle
(THREE.Geometry
)对象创建var geometry
? 您可以阅读此内容的另一种方法是:如何使任何自定义THREE.Mesh
“固定”?
我使用了Blender,从盒子中创建了一个新城堡,并将exported创建为Three.js格式。如果您将质量设置为0
的{{1}},则它仍然是静态的。 This完美地完成了......
答案 0 :(得分:1)
这取决于你的模型的物理代表应该有多精确。我对cannon.js不太熟悉,但这里有一些我知道的选项:
非cannon.js相关方法将是例如使用重播。 Recast会为您加载.obj文件,并根据您的设置为您创建导航网格。然后你可以在那里走动(如果你有像游戏一样的RTS鸟瞰图,或者跑来跑去的机器人,那就太棒了)。可以在此处找到重新构建的JavaScript端口:https://github.com/vincent/recast.js
希望这有帮助!
答案 1 :(得分:0)
我有一个类似的问题,并创造了必要的"点"和"面孔" (如Cannon文档中所述)来自THREE.Geometry(此处称为geometry
),具有以下两个函数:
cannonPoints = geometry.vertices.map(function(v) {
return new CANNON.Vec3( v.x, v.y, v.z )
})
cannonFaces = geometry.faces.map(function(f) {
return [f.a, f.b, f.c]
})