所以我想把一个网格煮成一个 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-loader:https ://github.com/Bly7/OBJ-Loader 。加载一个简单的立方体会返回 36 个顶点和 36 个索引,就像它应该做的那样。
加载 obj 时,我只是这样做:
indices = my_loader.LoadedIndices;
我可以确认这对于顶点、uvs 和法线非常有效。'indices' 的定义如下:
std::vector<unsigned int> indices
- PhysX 是否希望我将其他数据填充到 triangles.data 中?
- 如果不是,为什么 cookTriangleMesh() 没有返回 true?