Skip to content

Commit

Permalink
more work towards concave trimesh support (no working yet)
Browse files Browse the repository at this point in the history
  • Loading branch information
erwincoumans committed Jul 7, 2012
1 parent 1d77771 commit 40dbe85
Show file tree
Hide file tree
Showing 4 changed files with 45 additions and 11 deletions.
40 changes: 37 additions & 3 deletions opencl/gpu_rigidbody_pipeline/btGpuNarrowPhaseAndSolver.cpp
Expand Up @@ -696,7 +696,6 @@ void btGpuNarrowphaseAndSolver::computeContactsAndSolver(cl_mem broadphasePairs,
m_internalData->m_pBufContactOutGPU,
nContactOut, cfgNP, *m_internalData->m_convexPolyhedraGPU,
*m_internalData->m_convexVerticesGPU,
//*m_internalData->m_convexVerticesGPU,
*m_internalData->m_uniqueEdgesGPU,
*m_internalData->m_convexFacesGPU,
*m_internalData->m_convexIndicesGPU,
Expand All @@ -707,6 +706,7 @@ void btGpuNarrowphaseAndSolver::computeContactsAndSolver(cl_mem broadphasePairs,

if (broadphasePairsGPU.size())
{
BT_PROFILE("concave-convex");
btAlignedObjectArray<int2> hostPairs;
broadphasePairsGPU.copyToHost(hostPairs);
m_internalData->m_bodyBufferGPU->copyToHost(*m_internalData->m_bodyBufferCPU);
Expand All @@ -726,9 +726,9 @@ void btGpuNarrowphaseAndSolver::computeContactsAndSolver(cl_mem broadphasePairs,
printf("concave x\n");

int collidableA = bodyA.m_collidableIdx;
int collidableB = bodyB.m_collidableIdx;
int collidableIndexB = bodyB.m_collidableIdx;
int shapeA = m_internalData->m_collidablesCPU[collidableA].m_shapeIndex;
int shapeB = m_internalData->m_collidablesCPU[collidableB].m_shapeIndex;
int shapeB = m_internalData->m_collidablesCPU[collidableIndexB].m_shapeIndex;
objLoader* obj = m_concaveMeshes[shapeA];

for (int f=0;f<obj->faceCount;f++)
Expand All @@ -738,6 +738,40 @@ void btGpuNarrowphaseAndSolver::computeContactsAndSolver(cl_mem broadphasePairs,
{
if (face->vertex_count<=4)
{

int bodyIndexA = pair.x;
int bodyIndexB = pair.y;
btAlignedObjectArray<btCollidable> hostCollidablesA;
btAlignedObjectArray<ConvexPolyhedronCL> hostConvexDataA;
int collidableIndexA = 0;
btAlignedObjectArray<btVector3> verticesA;
btAlignedObjectArray<btVector3> uniqueEdgesA;
btAlignedObjectArray<btGpuFace> facesA;
btAlignedObjectArray<int> indicesA;


m_internalData->m_gpuSatCollision->computeConvexConvexContactsGPUSATSingle(
bodyIndexA, bodyIndexB,
collidableIndexA, collidableIndexB,
m_internalData->m_bodyBufferCPU,
0,
m_internalData->m_pBufContactOutGPU,
nContactOut,cfgNP,
hostConvexDataA,
*m_internalData->m_convexPolyhedraGPU,
verticesA,
uniqueEdgesA,
facesA,
indicesA,
*m_internalData->m_convexVerticesGPU,
*m_internalData->m_uniqueEdgesGPU,
*m_internalData->m_convexFacesGPU,
*m_internalData->m_convexIndicesGPU,
hostCollidablesA,
*m_internalData->m_collidablesGPU);



//indicesPtr->push_back(face->vertex_index[0]);
//indicesPtr->push_back(face->vertex_index[1]);
//indicesPtr->push_back(face->vertex_index[2]);
Expand Down
6 changes: 3 additions & 3 deletions opencl/gpu_rigidbody_pipeline2/BulletDataExtractor.cpp
Expand Up @@ -3,9 +3,9 @@ int NUM_OBJECTS_Y = 25;
int NUM_OBJECTS_Z = 25;


float X_GAP = 4.3f;
float Y_GAP = 4.f;
float Z_GAP = 4.3f;
float X_GAP = 2.3f;
float Y_GAP = 2.f;
float Z_GAP = 2.3f;

#include "BulletDataExtractor.h"
#include "BulletSerialize/BulletFileLoader/btBulletFile.h"
Expand Down
6 changes: 3 additions & 3 deletions opencl/gpu_rigidbody_pipeline2/ConvexHullContact.cpp
Expand Up @@ -820,7 +820,7 @@ void GpuSatCollision::computeConvexConvexContactsGPUSATSingle(
btAssert(numPoints);

Contact4& contact = m_hostContactOut[nContacts];
contact.m_batchIdx = i;
contact.m_batchIdx = 0;//i;
contact.m_bodyAPtrAndSignBit = (bodyBuf->at(bodyIndexA).m_invMass==0)? -bodyIndexA:bodyIndexA;
contact.m_bodyBPtrAndSignBit = (bodyBuf->at(bodyIndexB).m_invMass==0)? -bodyIndexB:bodyIndexB;

Expand Down Expand Up @@ -870,7 +870,7 @@ void GpuSatCollision::computeConvexConvexContactsGPUSAT( const btOpenCLArray<int
btAlignedObjectArray<float4> hostNormals;
btAlignedObjectArray<int> hostHasSep;

bool findSeparatingAxisOnGpu = false;
bool findSeparatingAxisOnGpu = true;


{
Expand Down Expand Up @@ -1291,7 +1291,7 @@ void GpuSatCollision::computeConvexConvexContactsGPUSAT( const btOpenCLArray<int
btAssert(numPoints);

Contact4& contact = m_hostContactOut[nContacts];
contact.m_batchIdx = i;
contact.m_batchIdx = 0;//i;
contact.m_bodyAPtrAndSignBit = (hostBodyBuf[indexA].m_invMass==0)? -m_hostPairs[i].x:m_hostPairs[i].x;
contact.m_bodyBPtrAndSignBit = (hostBodyBuf[indexB].m_invMass==0)? -m_hostPairs[i].y:m_hostPairs[i].y;

Expand Down
4 changes: 2 additions & 2 deletions opencl/gpu_rigidbody_pipeline2/main.cpp
Expand Up @@ -38,7 +38,7 @@ subject to the following restrictions:
#include "OpenGLInclude.h"

static bool printStats = true;
bool pauseSimulation = true;
bool pauseSimulation = false;
bool shootObject = false;
extern btVector3 m_cameraPosition;
extern btVector3 m_cameraTargetPosition;
Expand Down Expand Up @@ -206,7 +206,7 @@ int main(int argc, char* argv[])

if (printStats && !pauseSimulation)
{
static int count = 1;
static int count = 3;
count--;
if (count<0)
{
Expand Down

0 comments on commit 40dbe85

Please sign in to comment.