【问题标题】:Nvidia PhysX - How to cook a TriangleMesh?Nvidia PhysX - 如何制作 TriangleMesh?
【发布时间】:2019-02-11 16:48:56
【问题描述】:

所以我正在尝试将网格制作成 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
  1. PhysX 是否希望我将其他数据填充到 triangles.data 中?
  2. 如果不是,为什么 cookTriangleMesh() 没有返回 true?

【问题讨论】:

  • 索引的缠绕顺序是什么?
  • GitHub 上的 UE4 源代码有一些使用 cookTriangleMesh() 的代码,如果有帮助的话。

标签: c++ game-physics physx


【解决方案1】:

我想我过去也遇到过类似的问题。我认为问题在于meshDesc.triangles.data 期望收到的内容。要么使用数组而不是std::vector,要么直接更改:

meshDesc.triangles.data = indices;

到这里:

meshDesc.triangles.data = &amp;indices[0];

我的代码正在使用此解决方案,如果这解决了您的问题,请更新。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-14
    • 1970-01-01
    • 2019-05-10
    • 2018-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多