void collision() { unsigned int numCurrentPairs = numPairs[pairSwap]; PfxBroadphasePair *currentPairs = pairsBuff[pairSwap]; //J 衝突検出 //E Detect collisions { PfxDetectCollisionParam param; param.contactPairs = currentPairs; param.numContactPairs = numCurrentPairs; param.offsetContactManifolds = contacts; param.offsetRigidStates = states; param.offsetCollidables = collidables; param.numRigidBodies = numRigidBodies; int ret = pfxDetectCollision(param); if(ret != SCE_PFX_OK) SCE_PFX_PRINTF("pfxDetectCollision failed %d\n",ret); } //J リフレッシュ //E Refresh contacts { PfxRefreshContactsParam param; param.contactPairs = currentPairs; param.numContactPairs = numCurrentPairs; param.offsetContactManifolds = contacts; param.offsetRigidStates = states; param.numRigidBodies = numRigidBodies; int ret = pfxRefreshContacts(param); if(ret != SCE_PFX_OK) SCE_PFX_PRINTF("pfxRefreshContacts failed %d\n",ret); } }
void collision() { unsigned int numCurrentPairs = numPairs[pairSwap]; PfxBroadphasePair *currentPairs = pairsBuff[pairSwap]; //J 衝突検出 //E Detect collisions { PfxDetectCollisionParam param; param.contactPairs = currentPairs; param.numContactPairs = numCurrentPairs; param.offsetContactManifolds = contacts; param.offsetRigidStates = states; param.offsetCollidables = collidables; param.numRigidBodies = numRigidBodies; int ret = pfxDetectCollision(param); if(ret != SCE_PFX_OK) SCE_PFX_PRINTF("pfxDetectCollision failed %d\n",ret); } //J リフレッシュ //E Refresh contacts { PfxRefreshContactsParam param; param.contactPairs = currentPairs; param.numContactPairs = numCurrentPairs; param.offsetContactManifolds = contacts; param.offsetRigidStates = states; param.numRigidBodies = numRigidBodies; int ret = pfxRefreshContacts(param); if(ret != SCE_PFX_OK) SCE_PFX_PRINTF("pfxRefreshContacts failed %d\n",ret); } //J アイランド生成 //E Create simulation islands { PfxGenerateIslandParam param; param.islandBuff = islandBuff; param.islandBytes = 32*NUM_RIGIDBODIES; param.pairs = currentPairs; param.numPairs = numCurrentPairs; param.numObjects = numRigidBodies; PfxGenerateIslandResult result; int ret = pfxGenerateIsland(param,result); if(ret != SCE_PFX_OK) SCE_PFX_PRINTF("pfxGenerateIsland failed %d\n",ret); island = result.island; //J ジョイント分のペアを追加 //E Add joint pairs to islands ret = pfxAppendPairs(island,jointPairs,numJoints); if(ret != SCE_PFX_OK) SCE_PFX_PRINTF("pfxAppendPairs failed %d\n",ret); } }
void collision() { unsigned int numCurrentPairs = numPairs[pairSwap]; PfxBroadphasePair *currentPairs = pairsBuff[pairSwap]; //J 衝突検出 //E Detect collisions { PfxDetectCollisionParam param; param.contactPairs = currentPairs; param.numContactPairs = numCurrentPairs; param.offsetContactManifolds = contacts; param.offsetRigidStates = states; param.offsetCollidables = collidables; param.numRigidBodies = numRigidBodies; int ret = pfxDetectCollision(param); if(ret != SCE_PFX_OK) SCE_PFX_PRINTF("pfxDetectCollision failed %d\n",ret); } curTotalContacts = 0; for(PfxUInt32 i=0;i<numCurrentPairs;i++) { PfxConstraintPair &pair = currentPairs[i]; PfxUInt16 iA = pfxGetObjectIdA(pair); PfxUInt16 iB = pfxGetObjectIdB(pair); PfxUInt32 iConstraint = pfxGetConstraintId(pair); PfxContactManifold &contact = contacts[iConstraint]; curTotalContacts += contact.getNumContacts(); } //J リフレッシュ //E Refresh contacts { PfxRefreshContactsParam param; param.contactPairs = currentPairs; param.numContactPairs = numCurrentPairs; param.offsetContactManifolds = contacts; param.offsetRigidStates = states; param.numRigidBodies = numRigidBodies; int ret = pfxRefreshContacts(param); if(ret != SCE_PFX_OK) SCE_PFX_PRINTF("pfxRefreshContacts failed %d\n",ret); } }
void collision() { //J 衝突検出 //E Detect collisions { PfxDetectCollisionParam param; param.contactPairs = pairs; param.numContactPairs = numPairs; param.offsetContactManifolds = contacts; param.offsetRigidStates = states; param.offsetCollidables = collidables; param.numRigidBodies = numRigidBodies; int ret = pfxDetectCollision(param); if(ret != SCE_PFX_OK) SCE_PFX_PRINTF("pfxDetectCollision failed %d\n",ret); } }