Deterministic simulation for concave and compound collision shapes: added childShapeA/B to b3Contact4 + sort on them
Use tetrahedra instead of barrel for convex demo (until performance for edge-edge is improved) Increased #overlapping pair capacity from 12 to 16 / objec
This commit is contained in:
@@ -52,6 +52,12 @@ static const char* satClipKernelsCL= \
|
||||
"\n"
|
||||
" int m_bodyAPtrAndSignBit;//x:m_bodyAPtr, y:m_bodyBPtr\n"
|
||||
" int m_bodyBPtrAndSignBit;\n"
|
||||
"\n"
|
||||
" int m_childIndexA;\n"
|
||||
" int m_childIndexB;\n"
|
||||
" int m_unused1;\n"
|
||||
" int m_unused2;\n"
|
||||
"\n"
|
||||
"} Contact4;\n"
|
||||
"\n"
|
||||
"\n"
|
||||
@@ -926,6 +932,8 @@ static const char* satClipKernelsCL= \
|
||||
" int bodyB = pairs[pairIndex].y;\n"
|
||||
" c->m_bodyAPtrAndSignBit = rigidBodies[bodyA].m_invMass==0 ? -bodyA:bodyA;\n"
|
||||
" c->m_bodyBPtrAndSignBit = rigidBodies[bodyB].m_invMass==0 ? -bodyB:bodyB;\n"
|
||||
" c->m_childIndexA = -1;\n"
|
||||
" c->m_childIndexB = -1;\n"
|
||||
" for (int i=0;i<nContacts;i++)\n"
|
||||
" {\n"
|
||||
" c->m_worldPos[i] = localPoints[contactIdx[i]];\n"
|
||||
@@ -1036,6 +1044,8 @@ static const char* satClipKernelsCL= \
|
||||
" int bodyB = pairs[pairIndex].y;\n"
|
||||
" c->m_bodyAPtrAndSignBit = rigidBodies[bodyA].m_invMass==0?-bodyA:bodyA;\n"
|
||||
" c->m_bodyBPtrAndSignBit = rigidBodies[bodyB].m_invMass==0?-bodyB:bodyB;\n"
|
||||
" c->m_childIndexA = -1;\n"
|
||||
" c->m_childIndexB = -1;\n"
|
||||
"\n"
|
||||
" for (int i=0;i<nReducedContacts;i++)\n"
|
||||
" {\n"
|
||||
@@ -1167,7 +1177,8 @@ static const char* satClipKernelsCL= \
|
||||
" int bodyB = gpuCompoundPairs[pairIndex].y;\n"
|
||||
" c->m_bodyAPtrAndSignBit = rigidBodies[bodyA].m_invMass==0?-bodyA:bodyA;\n"
|
||||
" c->m_bodyBPtrAndSignBit = rigidBodies[bodyB].m_invMass==0?-bodyB:bodyB;\n"
|
||||
"\n"
|
||||
" c->m_childIndexA = childShapeIndexA;\n"
|
||||
" c->m_childIndexB = childShapeIndexB;\n"
|
||||
" for (int i=0;i<nReducedContacts;i++)\n"
|
||||
" {\n"
|
||||
" c->m_worldPos[i] = pointsIn[contactIdx[i]];\n"
|
||||
@@ -1243,6 +1254,9 @@ static const char* satClipKernelsCL= \
|
||||
" c->m_bodyAPtrAndSignBit = rigidBodies[bodyA].m_invMass==0?-bodyA:bodyA;\n"
|
||||
" c->m_bodyBPtrAndSignBit = rigidBodies[bodyB].m_invMass==0?-bodyB:bodyB;\n"
|
||||
" c->m_worldPos[0] = contactPosB;\n"
|
||||
" c->m_childIndexA = -1;\n"
|
||||
" c->m_childIndexB = -1;\n"
|
||||
"\n"
|
||||
" GET_NPOINTS(*c) = 1;\n"
|
||||
" }//if (dstIdx < numPairs)\n"
|
||||
" }//if ( len <= (radiusA+radiusB))\n"
|
||||
@@ -1287,6 +1301,7 @@ static const char* satClipKernelsCL= \
|
||||
" int bodyIndexA = concavePairsIn[i].x;\n"
|
||||
" int bodyIndexB = concavePairsIn[i].y;\n"
|
||||
" int f = concavePairsIn[i].z;\n"
|
||||
" int childShapeIndexA = f;\n"
|
||||
" \n"
|
||||
" int collidableIndexA = rigidBodies[bodyIndexA].m_collidableIdx;\n"
|
||||
" int collidableIndexB = rigidBodies[bodyIndexB].m_collidableIdx;\n"
|
||||
@@ -1413,12 +1428,13 @@ static const char* satClipKernelsCL= \
|
||||
" float4 sepAxis = separatingNormals[i];\n"
|
||||
" \n"
|
||||
" int shapeTypeB = collidables[collidableIndexB].m_shapeType;\n"
|
||||
" int childShapeIndexB =-1;\n"
|
||||
" if (shapeTypeB==SHAPE_COMPOUND_OF_CONVEX_HULLS)\n"
|
||||
" {\n"
|
||||
" ///////////////////\n"
|
||||
" ///compound shape support\n"
|
||||
" \n"
|
||||
" int childShapeIndexB = concavePairsIn[pairIndex].w;\n"
|
||||
" childShapeIndexB = concavePairsIn[pairIndex].w;\n"
|
||||
" int childColIndexB = gpuChildShapes[childShapeIndexB].m_shapeIndex;\n"
|
||||
" shapeIndexB = collidables[childColIndexB].m_shapeIndex;\n"
|
||||
" float4 childPosB = gpuChildShapes[childShapeIndexB].m_childPosition;\n"
|
||||
@@ -1470,7 +1486,8 @@ static const char* satClipKernelsCL= \
|
||||
" int bodyB = concavePairsIn[pairIndex].y;\n"
|
||||
" c->m_bodyAPtrAndSignBit = rigidBodies[bodyA].m_invMass==0?-bodyA:bodyA;\n"
|
||||
" c->m_bodyBPtrAndSignBit = rigidBodies[bodyB].m_invMass==0?-bodyB:bodyB;\n"
|
||||
"\n"
|
||||
" c->m_childIndexA = childShapeIndexA;\n"
|
||||
" c->m_childIndexB = childShapeIndexB;\n"
|
||||
" for (int i=0;i<nReducedContacts;i++)\n"
|
||||
" {\n"
|
||||
" c->m_worldPos[i] = pointsIn[contactIdx[i]];\n"
|
||||
@@ -1890,7 +1907,9 @@ static const char* satClipKernelsCL= \
|
||||
" int bodyB = pairs[pairIndex].y;\n"
|
||||
" c->m_bodyAPtrAndSignBit = rigidBodies[bodyA].m_invMass==0?-bodyA:bodyA;\n"
|
||||
" c->m_bodyBPtrAndSignBit = rigidBodies[bodyB].m_invMass==0?-bodyB:bodyB;\n"
|
||||
" \n"
|
||||
" c->m_childIndexA =-1;\n"
|
||||
" c->m_childIndexB =-1;\n"
|
||||
"\n"
|
||||
" switch (nReducedContacts)\n"
|
||||
" {\n"
|
||||
" case 4:\n"
|
||||
|
||||
Reference in New Issue
Block a user