首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >来自three.js网格的项目符号/ammo.js中的刚体(形状)

来自three.js网格的项目符号/ammo.js中的刚体(形状)
EN

Stack Overflow用户
提问于 2016-09-12 06:58:51
回答 2查看 4.2K关注 0票数 2

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

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

我刚接触这些框架,如果我从根本上误解了什么,很抱歉。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-12 09:55:26

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

首先,它们在几何上循环以在these lines of physi.js上创建一个自定义的“三角形”数据对象列表

代码语言:javascript
复制
for ( i = 0; i < geometry.faces.length; i++ ) {
    face = geometry.faces[i];
    if ( face instanceof THREE.Face3) {
        triangles.push([
            ...

然后将这些三角形传递给Ammo.js以生成new Ammo.btBvhTriangleMeshShape on these lines

代码语言:javascript
复制
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 );

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

票数 5
EN

Stack Overflow用户

发布于 2017-01-04 16:34:30

在web周围有很多线索,Physijs凹面网格不能与拼接一起工作。就像我在bullet相关论坛中搜索这个话题时发现的那样,btBvhTriangleMeshShape似乎并不打算在ammo.js中使用collission。

对我来说起作用的是btConvexHullShape:

代码语言:javascript
复制
var triangle, triangle_mesh = new Ammo.btTriangleMesh;
var btConvexHullShape = new Ammo.btConvexHullShape();
var _vec3_1 = new Ammo.btVector3(0,0,0);
var _vec3_2 = new Ammo.btVector3(0,0,0);
var _vec3_3 = new Ammo.btVector3(0,0,0);
for ( i = 0; i < triangles.length; i++ ) {
    triangle = triangles[i];
    _vec3_1.setX(triangle[0].x);
    _vec3_1.setY(triangle[0].y);
    _vec3_1.setZ(triangle[0].z);
    btConvexHullShape.addPoint(_vec3_1,true);
    _vec3_2.setX(triangle[1].x);
    _vec3_2.setY(triangle[1].y);
    _vec3_2.setZ(triangle[1].z);
    btConvexHullShape.addPoint(_vec3_2,true);
    _vec3_3.setX(triangle[2].x);
    _vec3_3.setY(triangle[2].y);
    _vec3_3.setZ(triangle[2].z);
    btConvexHullShape.addPoint(_vec3_3,true);
    triangle_mesh.addTriangle(
        _vec3_1,
        _vec3_2,
        _vec3_3,
        true
    );
}
return btConvexHullShape;

在使用the学习基于物理的3d的过程中,我还想提到以下最佳实践:当使用复杂模型时,创建一个低多边形模型,您可以将其推送到该转换器函数,而不是原始模型,否则您将遇到堆栈溢出。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39441459

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档