3

如何在搅拌机模型上添加物理?我尝试了 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)

截图

4

2 回答 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);

您可以使用我描述的轨道模型和周围的线框来查看我的代码示例,以查看容器。

使用 BoxMesh 物理包装跟踪模型

于 2016-12-18T19:26:36.543 回答
0

检查这个:

  • 你应该换行new THREE.MeshFaceMaterial()Physijs.CreateMaterial而不是相反。
  • 你应该设置Gravity。(我看不到完整的代码,所以只需在您的源代码中查看)
  • 检查您是否不加载 BufferGeometry
  • 检查您是否使用 Physijs.Scene 作为场景对象。

为了防止出现此类问题,请尝试使用 Three.js 构建的WhitestormJS 引擎,并具有内置的物理特性。

于 2016-07-19T20:18:48.680 回答