首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用btSoftBodyHelpers::CreateFromTriMesh和trimesh

使用btSoftBodyHelpers::CreateFromTriMesh和trimesh
EN

Stack Overflow用户
提问于 2014-09-30 04:44:29
回答 1查看 685关注 0票数 4

为了在我的项目中获得对软体的支持,我已经尝试了一段时间了,我已经添加了所有原语,包括静态三角形网格,如下所示:

我一直在尝试实施软组织。正如我所提到的,我确实有三角形的形状,我想我可以重复使用三角剖分代码来创建具有以下功能的软体对象:

代码语言:javascript
复制
btSoftBody* psb = btSoftBodyHelpers::CreateFromTriMesh(.....);

我用硬编码的兔子网格成功地做到了这一点,但是现在我想在这个函数中插入任何三角化的网格。但我有点搞不清楚到底要输入哪些参数(如何从我的三角网格中获得正确的参数)。

你们中有人有这样的例子吗?(不是硬编码的,而是从

代码语言:javascript
复制
btTriangleMesh *mTriMesh = new btTriangleMesh();

类型对象?)

它确实适用于子弹所具有的预定义类型形状,所以我的update循环和所有这些都很好。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-15 11:26:05

这是2.81版(假设顶点存储为PHY_FLOAT,索引存储为PHY_INTEGER):

代码语言:javascript
复制
btTriangleMesh *mTriMesh = new btTriangleMesh();

// ...

const btVector3 meshScaling = mTriMesh->getScaling();

btAlignedObjectArray<btScalar> vertices;
btAlignedObjectArray<int> triangles;

for (int part=0;part< mTriMesh->getNumSubParts(); part++)
{
    const unsigned char * vertexbase;
    const unsigned char * indexbase;

    int indexstride;
    int stride,numverts,numtriangles;
    PHY_ScalarType type, gfxindextype;

    mTriMesh->getLockedReadOnlyVertexIndexBase(&vertexbase,numverts,type,stride,&indexbase,indexstride,numtriangles,gfxindextype,part);

    for (int gfxindex=0; gfxindex < numverts; gfxindex++)
    {
        float* graphicsbase = (float*)(vertexbase+gfxindex*stride);
        vertices.push_back(graphicsbase[0]*meshScaling.getX());
        vertices.push_back(graphicsbase[1]*meshScaling.getY());
        vertices.push_back(graphicsbase[2]*meshScaling.getZ());
    }

    for (int gfxindex=0;gfxindex < numtriangles; gfxindex++)
    {
        unsigned int* tri_indices= (unsigned int*)(indexbase+gfxindex*indexstride);
        triangles.push_back(tri_indices[0]);
        triangles.push_back(tri_indices[1]);
        triangles.push_back(tri_indices[2]);
    }
}

btSoftBodyWorldInfo worldInfo;

// Setup worldInfo...
// ....

btSoftBodyHelper::CreateFromTriMesh(worldInfo, &vertices[0], &triangles[0], triangles.size()/3 /*, randomizeConstraints = true*/);

一种更慢、更通用的方法是使用mTriMesh->InternalProcessAll三角()迭代网格,但这将使您的网格成为一个汤。

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

https://stackoverflow.com/questions/26112944

复制
相关文章

相似问题

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