more work towards CPU version
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
154
Demos3/CpuDemos/rigidbody/RigidBodyDemo.cpp
Normal file
154
Demos3/CpuDemos/rigidbody/RigidBodyDemo.cpp
Normal 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);
|
||||
}
|
||||
47
Demos3/CpuDemos/rigidbody/RigidBodyDemo.h
Normal file
47
Demos3/CpuDemos/rigidbody/RigidBodyDemo.h
Normal 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
|
||||
|
||||
@@ -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"
|
||||
|
||||
|
||||
@@ -84,7 +84,7 @@ enum
|
||||
};
|
||||
|
||||
b3AlignedObjectArray<const char*> demoNames;
|
||||
int selectedDemo = 0;
|
||||
int selectedDemo = 1;
|
||||
GpuDemo::CreateFunc* allDemos[]=
|
||||
{
|
||||
//ConcaveCompound2Scene::MyCreateFunc,
|
||||
|
||||
@@ -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"
|
||||
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
@@ -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"
|
||||
|
||||
|
||||
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user