From 51869dceda2b7c50196d2076c1a9fccb682fb403 Mon Sep 17 00:00:00 2001 From: "erwin.coumans" Date: Sat, 24 Jul 2010 06:52:55 +0000 Subject: [PATCH] tweak OpenCL particle demo --- Demos/ParticlesOpenCL/ParticlesDemo.cpp | 8 +++---- Demos/ParticlesOpenCL/ParticlesOCL.cl | 24 +++++++++---------- .../btParticlesDemoDynamicsWorld.cpp | 2 +- .../btParticlesDynamicsWorld.h | 7 +++--- 4 files changed, 21 insertions(+), 20 deletions(-) diff --git a/Demos/ParticlesOpenCL/ParticlesDemo.cpp b/Demos/ParticlesOpenCL/ParticlesDemo.cpp index 331c73c22..64f0b47dc 100644 --- a/Demos/ParticlesOpenCL/ParticlesDemo.cpp +++ b/Demos/ParticlesOpenCL/ParticlesDemo.cpp @@ -23,7 +23,7 @@ subject to the following restrictions: #define ARRAY_SIZE_X 32 #define ARRAY_SIZE_Y 32 //#define ARRAY_SIZE_Y 16 -#define ARRAY_SIZE_Z 16 +#define ARRAY_SIZE_Z 32 //16 //#define ARRAY_SIZE_Z 1 //#define DIST btScalar(2.f) @@ -308,9 +308,9 @@ void ParticlesDemo::init_scene_directly() { btVector3 jitter = 0.01f * 0.03f * btVector3(frand(), frand(), frand()); m_pWorld->m_hVel[i]= btVector3(0,0,0); - m_pWorld->m_hPos[i].setX((spacing * x) + DEF_PARTICLE_RADIUS -WORLD_SIZE+jitter.getX()); - m_pWorld->m_hPos[i].setY((spacing * y) + DEF_PARTICLE_RADIUS -WORLD_SIZE+jitter.getY()); - m_pWorld->m_hPos[i].setZ((spacing * z) + DEF_PARTICLE_RADIUS -WORLD_SIZE+jitter.getZ()); + m_pWorld->m_hPos[i].setX((spacing * x) + 2*DEF_PARTICLE_RADIUS -WORLD_SIZE+jitter.getX()); + m_pWorld->m_hPos[i].setY((spacing * y) + 2*DEF_PARTICLE_RADIUS -WORLD_SIZE+jitter.getY()); + m_pWorld->m_hPos[i].setZ((spacing * z) + 2*DEF_PARTICLE_RADIUS -WORLD_SIZE+jitter.getZ()); } } } diff --git a/Demos/ParticlesOpenCL/ParticlesOCL.cl b/Demos/ParticlesOpenCL/ParticlesOCL.cl index 2ddf9cd9f..e8ddddbfc 100644 --- a/Demos/ParticlesOpenCL/ParticlesOCL.cl +++ b/Demos/ParticlesOpenCL/ParticlesOCL.cl @@ -144,34 +144,34 @@ __kernel void kIntegrateMotion( int numParticles, float4 worldMax = *((__global float4*)(pParams + 2)); - if(pos.x < (worldMin.x + particleRad)) + if(pos.x < (worldMin.x + 2*particleRad)) { - pos.x = worldMin.x + particleRad; + pos.x = worldMin.x + 2*particleRad; vel.x *= boundaryDamping; } - if(pos.x > (worldMax.x - particleRad)) + if(pos.x > (worldMax.x - 2*particleRad)) { - pos.x = worldMax.x - particleRad; + pos.x = worldMax.x - 2*particleRad; vel.x *= boundaryDamping; } - if(pos.y < (worldMin.y + particleRad)) + if(pos.y < (worldMin.y + 2*particleRad)) { - pos.y = worldMin.y + particleRad; + pos.y = worldMin.y + 2*particleRad; vel.y *= boundaryDamping; } - if(pos.y > (worldMax.y - particleRad)) + if(pos.y > (worldMax.y - 2*particleRad)) { - pos.y = worldMax.y - particleRad; + pos.y = worldMax.y - 2*particleRad; vel.y *= boundaryDamping; } - if(pos.z < (worldMin.z + particleRad)) + if(pos.z < (worldMin.z + 2*particleRad)) { - pos.z = worldMin.z + particleRad; + pos.z = worldMin.z + 2*particleRad; vel.z *= boundaryDamping; } - if(pos.z > (worldMax.z - particleRad)) + if(pos.z > (worldMax.z - 2*particleRad)) { - pos.z = worldMax.z - particleRad; + pos.z = worldMax.z - 2*particleRad; vel.z *= boundaryDamping; } // write back position and velocity diff --git a/Demos/ParticlesOpenCL/btParticlesDemoDynamicsWorld.cpp b/Demos/ParticlesOpenCL/btParticlesDemoDynamicsWorld.cpp index 57aa8b25c..4da7f523c 100644 --- a/Demos/ParticlesOpenCL/btParticlesDemoDynamicsWorld.cpp +++ b/Demos/ParticlesOpenCL/btParticlesDemoDynamicsWorld.cpp @@ -268,7 +268,7 @@ void btParticlesDynamicsWorld::grabSimulationData() m_simParams.m_collisionDamping = 0.025f;//0.02f; m_simParams.m_spring = 0.5f; m_simParams.m_shear = 0.1f; - m_simParams.m_attraction = 0.0f; + m_simParams.m_attraction = 0.001f; diff --git a/Demos/ParticlesOpenCL/btParticlesDynamicsWorld.h b/Demos/ParticlesOpenCL/btParticlesDynamicsWorld.h index 0076b651e..682e840b9 100644 --- a/Demos/ParticlesOpenCL/btParticlesDynamicsWorld.h +++ b/Demos/ParticlesOpenCL/btParticlesDynamicsWorld.h @@ -42,10 +42,11 @@ subject to the following restrictions: #include "btParticlesSharedDefs.h" #include "btParticlesSharedTypes.h" -#define PARTICLES_MAX_PARTICLES (65536) + #define PARTICLES_MAX_NEIGHBORS (32) #define DEF_PARTICLE_RADIUS (0.023f) -#define WORLD_SIZE 1.9f +//#define WORLD_SIZE 1.9f +#define WORLD_SIZE 1.f enum { @@ -137,7 +138,7 @@ public: btParticlesDynamicsWorld(btDispatcher* dispatcher,btBroadphaseInterface* pairCache,btConstraintSolver* constraintSolver,btCollisionConfiguration* collisionConfiguration, - int maxObjs = PARTICLES_MAX_PARTICLES, int maxNeighbors = PARTICLES_MAX_NEIGHBORS) + int maxObjs , int maxNeighbors = PARTICLES_MAX_NEIGHBORS) : btDiscreteDynamicsWorld(dispatcher, pairCache, constraintSolver, collisionConfiguration) { m_cxMainContext = 0;