Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Three.js 缓冲几何体的完整外壳形状_Three.js_Ammo.js - Fatal编程技术网

Three.js 缓冲几何体的完整外壳形状

Three.js 缓冲几何体的完整外壳形状,three.js,ammo.js,Three.js,Ammo.js,我正试图用Ammo.js为我的缓冲几何体创建一个“弹药形状”。我正在使用“Ammo.btconverxhullshape”,但对象已关闭。你能帮我吗 “原件” “关闭” 函数criarConvexHullPhysicsShape(几何){ var coords=geometry.attributes.position.array; var tempBtVec3_1=新弹药。btVector3(0,0,0); var shape=新弹药。btconverxhullshape(); 对于(变量i=0

我正试图用Ammo.js为我的缓冲几何体创建一个“弹药形状”。我正在使用“Ammo.btconverxhullshape”,但对象已关闭。你能帮我吗

“原件”

“关闭”

函数criarConvexHullPhysicsShape(几何){
var coords=geometry.attributes.position.array;
var tempBtVec3_1=新弹药。btVector3(0,0,0);
var shape=新弹药。btconverxhullshape();
对于(变量i=0,il=coords.length;i=(il-3));
形状.添加点(tempBtVec3_1,最后一个);
}
返回形状;
}
编辑:我找到了这个解决方案,我的朋友,谢谢Mugen

function createTriangleShapeByGeometry(geometry) {
    var mesh = new Ammo.btTriangleMesh(true, true);
    var vertices = geometry.vertices;
    for (var i = 0; i < geometry.faces.length; i++) {
        var face = geometry.faces[i];
        if (face instanceof THREE.Face3) {
            mesh.addTriangle(
                new Ammo.btVector3(vertices[face.a].x, vertices[face.a].y, vertices[face.a].z),
                new Ammo.btVector3(vertices[face.b].x, vertices[face.b].y, vertices[face.b].z),
                new Ammo.btVector3(vertices[face.c].x, vertices[face.c].y, vertices[face.c].z),
                false
            );
        } else if (face instanceof THREE.Face4) {
            mesh.addTriangle(
                new Ammo.btVector3(vertices[face.a].x, vertices[face.a].y, vertices[face.a].z),
                new Ammo.btVector3(vertices[face.b].x, vertices[face.b].y, vertices[face.b].z),
                new Ammo.btVector3(vertices[face.d].x, vertices[face.d].y, vertices[face.d].z),
                false
            );
            mesh.addTriangle(
                new Ammo.btVector3(vertices[face.b].x, vertices[face.b].y, vertices[face.b].z),
                new Ammo.btVector3(vertices[face.c].x, vertices[face.c].y, vertices[face.c].z),
                new Ammo.btVector3(vertices[face.d].x, vertices[face.d].y, vertices[face.d].z),
                false
            );
        }
    }
    var shape = new Ammo.btBvhTriangleMeshShape(mesh, true, true);
    return shape;
}
函数createTriangleShapeByGeometry(几何){
var mesh=新弹药。btTriangleMesh(真,真);
var顶点=geometry.vertices;
对于(变量i=0;i
与任何其他边界体积一样,凸面外壳始终是闭合的。因此,恐怕您要查找的是不可能的。

与任何其他边界体积一样,凸面外壳始终是闭合的。因此,恐怕您要找的是不可能的。

Blender 2.8有一个刚体形状类型“Mesh”的选项,可以工作!它存在于3js/ammo.js中吗?我不知道。也许最好直接在
ammo.js
repo上问这个问题,因为它与
three.js
无关。Blender 2.8有一个刚体形状类型“Mesh”的选项,可以工作!它存在于3js/ammo.js中吗?我不知道。也许最好直接在
ammo.js
repo上问这个问题,因为它与
three.js
无关。
function createTriangleShapeByGeometry(geometry) {
    var mesh = new Ammo.btTriangleMesh(true, true);
    var vertices = geometry.vertices;
    for (var i = 0; i < geometry.faces.length; i++) {
        var face = geometry.faces[i];
        if (face instanceof THREE.Face3) {
            mesh.addTriangle(
                new Ammo.btVector3(vertices[face.a].x, vertices[face.a].y, vertices[face.a].z),
                new Ammo.btVector3(vertices[face.b].x, vertices[face.b].y, vertices[face.b].z),
                new Ammo.btVector3(vertices[face.c].x, vertices[face.c].y, vertices[face.c].z),
                false
            );
        } else if (face instanceof THREE.Face4) {
            mesh.addTriangle(
                new Ammo.btVector3(vertices[face.a].x, vertices[face.a].y, vertices[face.a].z),
                new Ammo.btVector3(vertices[face.b].x, vertices[face.b].y, vertices[face.b].z),
                new Ammo.btVector3(vertices[face.d].x, vertices[face.d].y, vertices[face.d].z),
                false
            );
            mesh.addTriangle(
                new Ammo.btVector3(vertices[face.b].x, vertices[face.b].y, vertices[face.b].z),
                new Ammo.btVector3(vertices[face.c].x, vertices[face.c].y, vertices[face.c].z),
                new Ammo.btVector3(vertices[face.d].x, vertices[face.d].y, vertices[face.d].z),
                false
            );
        }
    }
    var shape = new Ammo.btBvhTriangleMeshShape(mesh, true, true);
    return shape;
}