more work towards CPU version

This commit is contained in:
erwincoumans
2013-08-30 08:06:46 -07:00
parent f3c764102f
commit 0ccb6922a8
39 changed files with 889 additions and 37 deletions

View File

@@ -99,11 +99,14 @@ struct EmptyDemo : public CpuDemo
};
#include "rendering/RenderDemo.h"
#include "rigidbody/RigidBodyDemo.h"
b3AlignedObjectArray<const char*> demoNames;
int selectedDemo = 0;
CpuDemo::CreateFunc* allDemos[]=
{
RigidBodyDemo::MyCreateFunc,
RenderDemo::MyCreateFunc,
EmptyDemo::MyCreateFunc,
};
@@ -623,7 +626,7 @@ int main(int argc, char* argv[])
bool useGpu = false;
int maxObjectCapacity=128*1024;
int maxObjectCapacity=1024*1024;//128*1024;
int maxShapeCapacityInBytes=128*1024;
//maxObjectCapacity = b3Max(maxObjectCapacity,ci.arraySizeX*ci.arraySizeX*ci.arraySizeX+10);

View File

@@ -16,7 +16,9 @@ static b3Vector4 colors[4] =
void RenderDemo::initPhysics(const ConstructionInfo& ci)
{
m_instancingRenderer = ci.m_instancingRenderer;
m_instancingRenderer ->setCameraDistance(10);
float target[4]={0,0,0,0};
m_instancingRenderer->setCameraTargetPosition(target);
int strideInBytes = 9*sizeof(float);
int numVertices = sizeof(cube_vertices)/strideInBytes;
int numIndices = sizeof(cube_indices)/sizeof(int);

View File

@@ -0,0 +1,154 @@
#include "RigidBodyDemo.h"
#include "OpenGLWindow/GLInstancingRenderer.h"
#include "OpenGLWindow/ShapeData.h"
#include "Bullet3Common/b3Quaternion.h"
#include "Bullet3Collision/BroadPhaseCollision/b3DynamicBvhBroadphase.h"
#include "Bullet3Collision/NarrowPhaseCollision/b3CpuNarrowPhase.h"
#include "Bullet3Dynamics/b3CpuRigidBodyPipeline.h"
#include "Bullet3Dynamics/shared/b3IntegrateTransforms.h"
#include "Bullet3Collision/NarrowPhaseCollision/b3Config.h"
#include "Bullet3Collision/NarrowPhaseCollision/b3CpuCollisionWorld.h"
static b3Vector4 colors[4] =
{
b3MakeVector4(1,0,0,1),
b3MakeVector4(0,1,0,1),
b3MakeVector4(0,1,1,1),
b3MakeVector4(1,1,0,1),
};
void RigidBodyDemo::initPhysics(const ConstructionInfo& ci)
{
m_instancingRenderer = ci.m_instancingRenderer;
int x_dim=30;
int y_dim=30;
int z_dim=30;
int aabbCapacity = x_dim*y_dim*z_dim+1;
b3Config config;
m_bp = new b3DynamicBvhBroadphase(aabbCapacity);
m_np = new b3CpuNarrowPhase(config);
m_cd = new b3CpuCollisionWorld(m_bp,m_np);
m_rb = new b3CpuRigidBodyPipeline(m_np,m_bp, config);
m_instancingRenderer ->setCameraDistance(100);
float target[4]={0,0,0,0};
m_instancingRenderer->setCameraTargetPosition(target);
int strideInBytes = 9*sizeof(float);
int numVertices = sizeof(cube_vertices)/strideInBytes;
int numIndices = sizeof(cube_indices)/sizeof(int);
int shapeId = ci.m_instancingRenderer->registerShape(&cube_vertices[0],numVertices,cube_indices,numIndices);
{
static int curColor=0;
b3Vector4 color = colors[curColor];
curColor++;
curColor&=3;
b3Vector3 position = b3MakeVector3(0,0,0);//((j+1)&1)+i*2.2,1+j*2.,((j+1)&1)+k*2.2);
b3Quaternion orn(0,0,0,1);
b3Vector4 scaling=b3MakeVector4(100,1,100,1);
int id = ci.m_instancingRenderer->registerGraphicsInstance(shapeId,position,orn,color,scaling);
float mass=0.f;
int collidableIndex = m_np->registerConvexHullShape(&cube_vertices[0],strideInBytes,numVertices, scaling);
int bodyIndex = m_rb->getNumBodies();
m_cd->addCollidable(bodyIndex,collidableIndex,position,orn);
int userData=-1;
int rbid = m_rb->registerPhysicsInstance(mass, position, orn, collidableIndex, userData);
}
ci.m_instancingRenderer->writeTransforms();
{
b3Vector4 scaling=b3MakeVector4(1,1,1,1);
int collidableIndex = m_np->registerConvexHullShape(&cube_vertices[0],strideInBytes,numVertices, scaling);
for (int x=-x_dim/2;x<x_dim/2;x++)
{
//for (int y=-y_dim/2;y<y_dim/2;y++)
for (int y=1;y<y_dim;y++)
{
for (int z=-z_dim/2;z<z_dim/2;z++)
{
static int curColor=0;
b3Vector4 color = colors[curColor];
curColor++;
curColor&=3;
b3Vector3 position = b3MakeVector3(x*2,y*2,z*2);
b3Quaternion orn(0,0,0,1);
int id = ci.m_instancingRenderer->registerGraphicsInstance(shapeId,position,orn,color,scaling);
float mass=1.f;
int userData=-1;
int bodyIndex = m_rb->getNumBodies();
m_cd->addCollidable(bodyIndex,collidableIndex,position,orn);
int rbid = m_rb->registerPhysicsInstance(mass, position, orn, collidableIndex, userData);
}
}
}
}
printf("num objects = %d\n",m_rb->getNumBodies());
}
void RigidBodyDemo::exitPhysics()
{
delete m_rb;
m_rb=0;
delete m_np;
m_np=0;
delete m_bp;
m_bp=0;
}
void RigidBodyDemo::renderScene()
{
{
B3_PROFILE("writeSingleInstanceTransformToCPU");
const b3RigidBodyData* bodies = m_rb->getBodyBuffer();
//sync transforms
int numBodies = m_rb->getNumBodies();
for (int i=0;i<numBodies;i++)
{
m_instancingRenderer->writeSingleInstanceTransformToCPU(&bodies[i].m_pos.x,bodies[i].m_quat,i);
}
}
{
B3_PROFILE("writeTransforms");
m_instancingRenderer->writeTransforms();
}
{
B3_PROFILE("renderScene");
m_instancingRenderer->renderScene();
}
}
void RigidBodyDemo::clientMoveAndDisplay()
{
m_rb->stepSimulation(1.f/60.f);
}

View File

@@ -0,0 +1,47 @@
#ifndef B3_RIGID_BODY_DEMO_H
#define B3_RIGID_BODY_DEMO_H
#include "../CpuDemo.h"
struct RigidBodyDemo : public CpuDemo
{
struct b3DynamicBvhBroadphase* m_bp;
struct b3CpuNarrowPhase* m_np;
class b3CpuCollisionWorld* m_cd;
struct b3CpuRigidBodyPipeline* m_rb;
GLInstancingRenderer* m_instancingRenderer;
virtual void initPhysics(const ConstructionInfo& ci);
virtual void exitPhysics();
virtual void renderScene();
virtual void clientMoveAndDisplay();
virtual const char* getName() {
return "RigidBodyDemo";
}
virtual bool mouseMoveCallback(float x,float y)
{
return false;
}
virtual bool mouseButtonCallback(int button, int state, float x, float y)
{
return false;
}
virtual bool keyboardCallback(int key, int state)
{
return false;
}
static CpuDemo* MyCreateFunc()
{
CpuDemo* demo = new RigidBodyDemo;
return demo;
}
};
#endif //B3_RIGID_BODY_DEMO_H

View File

@@ -27,7 +27,7 @@ subject to the following restrictions:
#include "Bullet3OpenCL/ParallelPrimitives/b3LauncherCL.h"
#include "Bullet3OpenCL/RigidBody/b3GpuRigidBodyPipeline.h"
#include "Bullet3OpenCL/RigidBody/b3GpuNarrowPhase.h"
#include "Bullet3OpenCL/RigidBody/b3Config.h"
#include "Bullet3Collision/NarrowPhaseCollision/b3Config.h"
#include "../rigidbody/GpuRigidBodyDemoInternalData.h"
#include "../gwenUserInterface.h"
#include "Bullet3Dynamics/ConstraintSolver/b3Point2PointConstraint.h"
@@ -36,7 +36,7 @@ subject to the following restrictions:
#include "OpenGLWindow/GLPrimitiveRenderer.h"
#include "Bullet3OpenCL/Raycast/b3GpuRaycast.h"
#include "Bullet3OpenCL/NarrowphaseCollision/b3ConvexUtility.h"
#include "Bullet3Collision/NarrowPhaseCollision/b3ConvexUtility.h"
#include "OpenGLWindow/GLRenderToTexture.h"

View File

@@ -84,7 +84,7 @@ enum
};
b3AlignedObjectArray<const char*> demoNames;
int selectedDemo = 0;
int selectedDemo = 1;
GpuDemo::CreateFunc* allDemos[]=
{
//ConcaveCompound2Scene::MyCreateFunc,

View File

@@ -17,13 +17,13 @@
#include "Bullet3OpenCL/ParallelPrimitives/b3LauncherCL.h"
#include "Bullet3OpenCL/RigidBody/b3GpuRigidBodyPipeline.h"
#include "Bullet3OpenCL/RigidBody/b3GpuNarrowPhase.h"
#include "Bullet3OpenCL/RigidBody/b3Config.h"
#include "Bullet3Collision/NarrowPhaseCollision/b3Config.h"
#include "../rigidbody/GpuRigidBodyDemoInternalData.h"
#include "../gwenUserInterface.h"
#include "Bullet3Dynamics/ConstraintSolver/b3Point2PointConstraint.h"
#include "OpenGLWindow/GLPrimitiveRenderer.h"
#include "Bullet3OpenCL/Raycast/b3GpuRaycast.h"
#include "Bullet3OpenCL/NarrowphaseCollision/b3ConvexUtility.h"
#include "Bullet3Collision/NarrowPhaseCollision/b3ConvexUtility.h"
#include "OpenGLWindow/GLRenderToTexture.h"

View File

@@ -21,7 +21,7 @@ extern bool enableExperimentalCpuConcaveCollision;
#include "OpenGLWindow/GLInstancingRenderer.h"
#include "Bullet3Common/b3Quaternion.h"
#include "Bullet3Common/b3Matrix3x3.h"
#include "Bullet3OpenCL/NarrowphaseCollision/b3ConvexUtility.h"
#include "Bullet3Collision/NarrowPhaseCollision/b3ConvexUtility.h"
#include "OpenGLWindow/ShapeData.h"
#include "Bullet3OpenCL/RigidBody/b3GpuRigidBodyPipeline.h"

View File

@@ -13,11 +13,11 @@
#include "Bullet3OpenCL/ParallelPrimitives/b3LauncherCL.h"
#include "Bullet3OpenCL/RigidBody/b3GpuRigidBodyPipeline.h"
#include "Bullet3OpenCL/RigidBody/b3GpuNarrowPhase.h"
#include "Bullet3OpenCL/RigidBody/b3Config.h"
#include "Bullet3Collision/NarrowPhaseCollision/b3Config.h"
#include "GpuRigidBodyDemoInternalData.h"
#include"../../Wavefront/tiny_obj_loader.h"
#include "Bullet3Common/b3Transform.h"
#include "Bullet3OpenCL/NarrowphaseCollision/b3ConvexUtility.h"
#include "Bullet3Collision/NarrowPhaseCollision/b3ConvexUtility.h"
#include "../gwenUserInterface.h"
#include "OpenGLWindow/GLInstanceGraphicsShape.h"

View File

@@ -13,7 +13,7 @@
#include "Bullet3OpenCL/ParallelPrimitives/b3LauncherCL.h"
#include "Bullet3OpenCL/RigidBody/b3GpuRigidBodyPipeline.h"
#include "Bullet3OpenCL/RigidBody/b3GpuNarrowPhase.h"
#include "Bullet3OpenCL/RigidBody/b3Config.h"
#include "Bullet3Collision/NarrowPhaseCollision/b3Config.h"
#include "GpuRigidBodyDemoInternalData.h"
#include "Bullet3Common/b3Transform.h"

View File

@@ -13,13 +13,13 @@
#include "Bullet3OpenCL/ParallelPrimitives/b3LauncherCL.h"
#include "Bullet3OpenCL/RigidBody/b3GpuRigidBodyPipeline.h"
#include "Bullet3OpenCL/RigidBody/b3GpuNarrowPhase.h"
#include "Bullet3OpenCL/RigidBody/b3Config.h"
#include "Bullet3Collision/NarrowPhaseCollision/b3Config.h"
#include "GpuRigidBodyDemoInternalData.h"
#include "../gwenUserInterface.h"
#include "Bullet3Dynamics/ConstraintSolver/b3Point2PointConstraint.h"
#include "OpenGLWindow/GLPrimitiveRenderer.h"
#include "Bullet3OpenCL/Raycast/b3GpuRaycast.h"
#include "Bullet3OpenCL/NarrowphaseCollision/b3ConvexUtility.h"
#include "Bullet3Collision/NarrowPhaseCollision/b3ConvexUtility.h"
#include "Bullet3Dynamics/ConstraintSolver/b3FixedConstraint.h"
#include "OpenGLWindow/GLRenderToTexture.h"

View File

@@ -11,7 +11,7 @@
#include "Bullet3OpenCL/ParallelPrimitives/b3LauncherCL.h"
#include "Bullet3OpenCL/RigidBody/b3GpuRigidBodyPipeline.h"
#include "Bullet3OpenCL/RigidBody/b3GpuNarrowPhase.h"
#include "Bullet3OpenCL/RigidBody/b3Config.h"
#include "Bullet3Collision/NarrowPhaseCollision/b3Config.h"
#include "GpuRigidBodyDemoInternalData.h"
#include "Bullet3Collision/BroadPhaseCollision/b3DynamicBvhBroadphase.h"
#include "Bullet3Collision/NarrowPhaseCollision/b3RigidBodyCL.h"

View File

@@ -4,7 +4,7 @@
#include "Bullet3OpenCL/Initialize/b3OpenCLUtils.h"
#include "Bullet3OpenCL/ParallelPrimitives/b3OpenCLArray.h"
#include "Bullet3Common/b3Vector3.h"
#include "Bullet3OpenCL/RigidBody/b3Config.h"
#include "Bullet3Collision/NarrowPhaseCollision/b3Config.h"
struct GpuRigidBodyDemoInternalData
{

View File

@@ -12,7 +12,7 @@
#include "Bullet3OpenCL/ParallelPrimitives/b3LauncherCL.h"
#include "Bullet3OpenCL/RigidBody/b3GpuRigidBodyPipeline.h"
#include "Bullet3OpenCL/RigidBody/b3GpuNarrowPhase.h"
#include "Bullet3OpenCL/RigidBody/b3Config.h"
#include "Bullet3Collision/NarrowPhaseCollision/b3Config.h"
#include "GpuRigidBodyDemoInternalData.h"
#include "../gwenUserInterface.h"

View File

@@ -11,7 +11,7 @@
#include "Bullet3OpenCL/ParallelPrimitives/b3LauncherCL.h"
#include "Bullet3OpenCL/RigidBody/b3GpuRigidBodyPipeline.h"
#include "Bullet3OpenCL/RigidBody/b3GpuNarrowPhase.h"
#include "Bullet3OpenCL/RigidBody/b3Config.h"
#include "Bullet3Collision/NarrowPhaseCollision/b3Config.h"
#include "GpuSoftBodyDemoInternalData.h"
#include "Bullet3Collision/BroadPhaseCollision/b3DynamicBvhBroadphase.h"
#include "stb_image/stb_image.h"