Ejemplo n.º 1
0
bool PxCloth::_createClothPatch()
{
   // Make sure we have a mesh.
   if ( !mClothMesh )
   {
      _initClothMesh();
      if ( !mClothMesh )
         return false;
   }

   // Make sure we can change the world.
   mWorld->releaseWriteLock();

   _releaseCloth();

   NxClothDesc desc;
   desc.globalPose.setRowMajor44( getTransform() );
   desc.thickness = mThickness;
   desc.density = mDensity;
   desc.bendingStiffness = mBendingStiffness;   
   desc.dampingCoefficient = mDampingCoefficient;
   desc.friction = mFriction;
// start jc
   // todo: expose this
   desc.sleepLinearVelocity = 0.0000001f;
// end jc
   
   if ( mBendingEnabled )
      desc.flags |= NX_CLF_BENDING;   
   if ( mDampingEnabled )
      desc.flags |= NX_CLF_DAMPING;
   if ( mTriangleCollisionEnabled )
      desc.flags |= NX_CLF_TRIANGLE_COLLISION;
   if ( mSelfCollisionEnabled )
      desc.flags |= NX_CLF_SELFCOLLISION;

   desc.clothMesh = mClothMesh;    
   desc.meshData = mReceiveBuffers;

   if ( !desc.isValid() )
      return false;

   mCloth = mScene->createCloth( desc );
   mIsVBDirty = true;

   _updateStaticCloth();
   _setupAttachments();

   return true;
}
Ejemplo n.º 2
0
void PhysXCloth::init(NxClothDesc &desc, NxClothMeshDesc &meshDesc)
{
    allocateReceiveBuffers(meshDesc.numVertices, meshDesc.numTriangles);
    cookMesh(meshDesc);
    releaseMeshDescBuffers(meshDesc);

    desc.clothMesh = mClothMesh;
    desc.meshData  = mReceiveBuffers;

    assert(desc.isValid());
    mCloth = mScene->createCloth(desc);
    mCloth->wakeUp();

    mInitDone = true;
}