子弹/弹药中的刚体(形状)来自three.js中的网格

Łuk*_*ski 2 physics bulletphysics three.js ammo.js

我正在将 bullet/ammo.js 与three.js 一起使用。我有一个 3d 网格,我想使用精确的形状与软体进行碰撞检测。有没有办法从网格(在three.js中)创建一个3d刚体(在子弹中)?

下面是一个例子:http : //kidzinski.com/miamisura/lazy3d/(请稍等片刻,下载 3d 模型)。我有一块布落在 3d 身体上,我需要模拟这块布与身体的碰撞。

如果我从根本上误解了某些东西,我是这些框架的新手,抱歉。

And*_*Ray 5

看起来您可以做一些工作将任意 Three.js 网格转换为 Bullet 凹面网格。这是由 Physi.js 支持的,它是一种即插即用的解决方案,可将 Three.js 直接链接到 ammo.js。我个人不建议使用该项目 (Physi.js),但您可以查看源代码以了解它们如何实现凹面网格。

首先,他们遍历几何体以在physi.js 的这些行上创建“三角形”数据对象的自定义列表

for ( i = 0; i < geometry.faces.length; i++ ) {
    face = geometry.faces[i];
    if ( face instanceof THREE.Face3) {
        triangles.push([
            ...
Run Code Online (Sandbox Code Playgroud)

然后将这些三角形传递给 Ammo.js 以new Ammo.btBvhTriangleMeshShape在这些行上创建一个:

for ( i = 0; i < description.triangles.length; i++ ) {
    ...
    triangle_mesh.addTriangle( _vec3_1, _vec3_2, _vec3_3, true );
}

...

shape = new Ammo.btBvhTriangleMeshShape( triangle_mesh, true, true );
Run Code Online (Sandbox Code Playgroud)

这应该是构建您自己的 Ammo.js 自定义网格的良好起点。