gpt4 book ai didi

bullet - 将 btSoftBodyHelpers::CreateFromTriMesh 与 trimesh 一起使用

转载 作者:行者123 更新时间:2023-12-04 22:01:20 25 4
gpt4 key购买 nike

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

enter image description here
我现在一直在尝试实现软体。
正如我提到的,我确实有三角形形状,我想我可以重新使用三角剖分代码来
使用以下函数创建软体对象:

btSoftBody* psb = btSoftBodyHelpers::CreateFromTriMesh(.....);

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

你们中有人有这样的例子吗? (不是硬编码的,而是来自
btTriangleMesh *mTriMesh = new btTriangleMesh();

类型对象? )

它确实适用于项目符号具有的预定义类型形状,因此我的更新循环和所有工作正常。

最佳答案

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

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->InternalProcessAllTriangles() 迭代网格,但这会使你的网格变得一团糟。

关于bullet - 将 btSoftBodyHelpers::CreateFromTriMesh 与 trimesh 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26112944/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com