Nvidia PhysX - Как приготовить TriangleMesh? - PullRequest
0 голосов
/ 11 февраля 2019

Итак, я пытаюсь приготовить сетку в 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 и нормалей.'index' определяется следующим образом:

std::vector<unsigned int> indices
  1. Ожидает ли PhysX того, чтобы я заполнил другие данные в triangles.data?
  2. Если нет, то почему cookTriangleMesh () не возвращает true?
...