Как создать несоприкасающееся твердое тело в PhysX

Мне нужно сделать NULL как твердое тело в PhysX 3.2. Несталкивающийся - только как опорная точка. Есть ли способ это сделать? Мне просто нужно это, чтобы решить некоторые комбинации суставов. заранее спасибо


person Krzycho    schedule 05.06.2014    source источник


Ответы (1)


Сначала создайте фильтр для пар:

PxFilterFlags Simplefilter( PxFilterObjectAttributes attributes0, 
     PxFilterData filterData0, 
     PxFilterObjectAttributes attributes1, 
     PxFilterData filterData1, 
     PxPairFlags& pairFlags, 
     const void* constantBlock,
     PxU32 constantBlockSize )
     {
        if(filterData0.word0 = -99) //-99 is random                                        
        {
            return PxFilterFlag::eKILL;
        }
        pairFlags =  PxPairFlag::eRESOLVE_CONTACTS;
        pairFlags |= PxPairFlag::eCONTACT_DEFAULT;
        pairFlags |= PxPairFlag::eNOTIFY_TOUCH_FOUND;
        pairFlags |= PxPairFlag::eNOTIFY_CONTACT_POINTS;
        return PxFilterFlag::eDEFAULT;
     }

Затем при создании PxScene добавьте эту строку:

PxSceneDesc sceneDesc(gPhysicsSDK->getTolerancesScale());
...
sceneDesc.filterShader = Simplefilter;
gScene = gPhysicsSDK->createScene(sceneDesc);

Наконец, сделайте формы вашего актера (в моем примере gSphere) не коллизируемыми:

unsigned int nbShapes = gSphere->getNbShapes();

PxShape** shapes = new PxShape*[nbShapes];
if(nbShapes > 0)
{
    gSphere->getShapes(shapes,nbShapes,0);
    for(unsigned int j = 0; j< nbShapes; j++)
    {
        PxFilterData data;
        data.word0 = -99; // the same number above

        shapes[j]->setSimulationFilterData(data);
    }
}  
person Semih Kekül    schedule 27.06.2014