1

I have recently been working on a project that involves the PhysX library. I need to create a PxRigidDynamic actor from a triangle mesh. I saw the example that the documentation provided, but I have some issues with this method.

The issues that I had were mainly:

  • The object wasn't effected by gravity, and would just sit there and vibrate (Although, I have a feeling I did something else wrong)
  • From what I have read, to create a rigid body from a triangle mesh, the object needs to be kinematic. This then throws an error when I try to change the object's velocity.

Here is how I am currently creating the triangle mesh:

PhysX::PxTriangleMeshDesc meshDesc;
meshDesc.points.count = numVertices;
meshDesc.points.stride = sizeof(float) * 3;
meshDesc.points.data = vertices;
meshDesc.triangles.count = numIndices;
meshDesc.triangles.stride = 3 * sizeof(uint32_t);
meshDesc.triangles.data = indices;

PhysX::PxDefaultMemoryOutputStream writeBuffer;
PhysX::PxTriangleMeshCookingResult::Enum result;
bool status = cooking->cookTriangleMesh(meshDesc, writeBuffer, &result);
if (!status)
    return false;

PhysX::PxDefaultMemoryInputData readBuffer(writeBuffer.getData(),
    writeBuffer.getSize());
PhysX::PxTriangleMesh* triangleMesh = 
    physics->createTriangleMesh(readBuffer);

dynamicObject = physics->createRigidDynamic(PhysX::PxTransform(PhysX::PxVec3(0.0f)));
if (!dynamicObject)
    return false;
dynamicObject->setMass(10.0f);
dynamicObject->setRigidBodyFlag(
    PhysX::PxRigidBodyFlag::eKINEMATIC, true);

material = physics->createMaterial(0.5f, 0.5f, 0.6f);
if (!material)
    return false;

shape = PhysX::PxRigidActorExt::createExclusiveShape(
    *dynamicObject,
    PhysX::PxTriangleMeshGeometry(triangleMesh,
        PhysX::PxMeshScale(PhysX::PxVec3(scale.x, scale.y, scale.z))),
    *material
);
if (!shape)
    return false;

How can I solve these issues? If this isn't possible, I would like to know how to convert a triangle mesh into a convex mesh.

0 Answers0