因此,我正在尝试将网格划分为PxTriangleMesh。这是我的代码(实际上是从文档中复制粘贴的):
PxTriangleMeshDesc meshDesc;
meshDesc.points.count = vertices->size();
meshDesc.points.stride = sizeof(PxVec3);
meshDesc.points.data = vertices;
meshDesc.triangles.count = vertices->size() / 3;
meshDesc.triangles.stride = 3 * sizeof(unsigned int);
meshDesc.triangles.data = indices;
assert(meshDesc.isValid());
PxDefaultMemoryOutputStream writeBuffer;
PxTriangleMeshCookingResult::Enum result;
bool status = my_cooking->cookTriangleMesh(meshDesc, writeBuffer, &result);
if (!status)
return NULL;
PxDefaultMemoryInputData readBuffer(writeBuffer.getData(), writeBuffer.getSize());
return p.createTriangleMesh(readBuffer);
断言不会失败,但是
my_cooking->cookTriangleMesh(..)
返回状态“假”。我想我的索引有问题,但是文档提供的关于他们希望我填写的内容的信息很少。我正在使用这个小的OBJ加载器:https://github.com/Bly7/OBJ-Loader。加载简单的多维数据集将返回36个顶点和36个索引,就像它应该这样做一样。
在加载obj时,我只是这样做:
indices = my_loader.LoadedIndices;
我可以确认这对于顶点,uvs和法线非常有效。 'indices'的定义如下:
std::vector<unsigned int> indices
答案 0 :(得分:0)
我认为我过去也有类似的问题。我认为问题在于meshDesc.triangles.data
希望收到什么。要么使用数组而不使用std::vector
,要么直接更改它:
meshDesc.triangles.data = indices;
对此:
meshDesc.triangles.data = &indices[0];
我的代码正在使用该解决方案,如果可以解决您的问题,请更新。