I have a piece of cloth (made of a single triangle) that I let it fall on arbitrary triangle meshes (made of two triangles) for collision. The problem I am facing is the cloth just pass through the triangle mesh. The cloth also ignores the gravity value.
// cloth
// vertices
mVertices.emplace_back(4,4,0);
mVertices.emplace_back(8,4,0);
mVertices.emplace_back(4,8,0);
// triangles
mTriangles.emplace_back(0,1,2);
// triangles
std::vectorphysx::PxVec3 triangles;
// triangle 1
triangles.push_back({4,4,4});
triangles.push_back({8,8,4});
triangles.push_back({4,8,4});
// triangle 2
triangles.push_back({4,4,4});
triangles.push_back({8,4,4});
triangles.push_back({8,8,4});
cloth->setSelfCollisionDistance(4.0f);
cloth->setSelfCollisionStiffness(0.9f);
int triangleCount = 2;
nv::cloth::Range triangleR(&triangles[0],
&triangles[0] + triangleCount * 3);
cloth->setTriangles(triangleR, 0, cloth->getNumTriangles());
cloth->setFriction(0.5);
// Note :
//When I use setSphere instead
physx::PxVec4 spheres[1] = {
physx::PxVec4(0.0f, 0.0f, 3.3f, 3.0f)
};
nv::cloth::Range sphereRange(spheres, spheres + 1);
cloth->setSpheres(sphereRange, 0, cloth->getNumSpheres());
//every thing works fine.
//Another odd thing I noticed was when only using setTriangles. The gravity has no effect. Even //though I place gravity to zero
physx::PxVec3 gravity(0.0f, 0.0f, 0.0f);
// or
physx::PxVec3 gravity(0.0f, 0.0f, 9.8f);
// or
physx::PxVec3 gravity(0.0f, 9.8f, 0.0f);
The cloth stills moves in positive z always ignoring the triangles. The position of cloth triangle goes from 0 to 19.23 in single step.
ref : https://docs.nvidia.com/gameworks/content/gameworkslibrary/physx/nvCloth/UserGuide/Index.html