为Blender模型添加物理效果,使用Three.js Physijs。

3

我该如何在Blender模型上添加物理效果? 我尝试了ConvexMesh和ConcaveMesh,但是没有成功。

var mesh = {... blender exporter ...}

var loader = new THREE.JSONLoader();
var mesh_obj = loader.parse(mesh,'./');
var mesh_materials = mesh_obj.materials;
var mesh_geometry = mesh_obj.geometry;

var _materials=[];
for ( var i = 0, i<mesh_materials.length;i ++ ) {
 var materialv = Physijs.createMaterial(mesh_materials[i],0.8,0.1);
 _materials.push(materialv)
}

mesh = new Physijs.ConcaveMesh(mesh_geometry, new THREE.MeshFaceMaterial(_materials),0 );
scene.add(mesh)

screenshoot


你能给我们展示一个例子吗?没有实际的代码很难进行调试。 - Gero3
有什么解决方案吗? - riccardolardi
2个回答

1
也许是一个老问题,但我有同样的问题,并选择将模型包装在一个 BoxMesh "容器"中,并将模型作为容器的子元素添加。下面我有一个使用的轨道模型示例。然后设置子元素的位置,使其位于网格内部。对于更复杂的模型,我猜想一种方法是使用其他 Physijs 形状来封装各个几何体。
var box_container = new Physijs.BoxMesh(
    new THREE.CubeGeometry( 1, 0.7, 1.5 ),
    new THREE.MeshBasicMaterial({ transparent: true, opacity: 0.0 })
    // Uncomment the next line to see the wireframe of the container shape
    // new THREE.MeshBasicMaterial({ wireframe: true, opacity: 0.5 })
);
// Assuming your model has already been imported
var track = global_models.track.clone();

track.position.set(0,0,0);
box_container.add(track);

你可以看到一个使用我描述的轨迹模型的代码示例,周围带有线框以查看容器。

Track model with a BoxMesh wrapping for physics


0

请检查:

  • 您应该将new THREE.MeshFaceMaterial()包装在Physijs.CreateMaterial中,而不是相反。
  • 您应该设置重力。(我无法看到完整的代码,所以请在源代码中检查)
  • 检查是否未加载BufferGeometry
  • 检查是否使用了Physijs.Scene作为场景对象。

为了避免这样的问题,请尝试WhitestormJS引擎,它是使用three.js构建的,并具有内置物理功能。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接