three.js - 在 blender 模型上添加物理,三.js Physijs

标签 three.js physics physijs

如何在 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

最佳答案

也许是一个老问题,但我遇到了同样的问题,并选择将模型包装在 BoxMesh“容器”中,并将模型添加为容器的子级。下面是我使用的轨道模型的示例。然后设置 child 的位置,使其位于网格内部。对于更复杂的模型,我猜测一种方法是将各个几何图形与其他 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

关于three.js - 在 blender 模型上添加物理,三.js Physijs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20836940/

相关文章:

javascript - 不要在 three.js 中加载 obj 模型上的纹理

python - 粒子与盒子内壁的碰撞

javascript - Physij 碰撞事件

ios - 将 Sprite Kit Physics Body 移动到用户触摸的位置而不通过

math - 给定所有 4 个顶点位置,求不规则四面体的高度

javascript - 使用 Physi.js 进行玩家运动/物理

javascript - 在 ThreeJS 中将物理添加到 OBJ 模型

javascript - DAT GUI - 调整输入字段的大小

javascript - 如何将正交相机转换为透视并返回?

javascript - 三.js导入模型抗锯齿