improve BasicDemo, better mouse handling, add colors to drawing

This commit is contained in:
Erwin Coumans
2014-05-21 09:59:24 -07:00
parent 7f300a877f
commit 28f19f1bab
6 changed files with 25 additions and 11 deletions

View File

@@ -39,7 +39,7 @@ void BasicDemoPhysicsSetup::initPhysics()
{ {
btScalar mass(0.); btScalar mass(0.);
createRigidBody(mass,groundTransform,groundShape); createRigidBody(mass,groundTransform,groundShape, btVector4(0,0,1,1));
} }
@@ -99,7 +99,7 @@ btBoxShape* BasicDemoPhysicsSetup::createBoxShape(const btVector3& halfExtents)
return box; return box;
} }
btRigidBody* BasicDemoPhysicsSetup::createRigidBody(float mass, const btTransform& startTransform,btCollisionShape* shape) btRigidBody* BasicDemoPhysicsSetup::createRigidBody(float mass, const btTransform& startTransform,btCollisionShape* shape, const btVector4& color)
{ {
btAssert((!shape || shape->getShapeType() != INVALID_SHAPE_PROXYTYPE)); btAssert((!shape || shape->getShapeType() != INVALID_SHAPE_PROXYTYPE));

View File

@@ -11,6 +11,7 @@ class btDiscreteDynamicsWorld;
class btTransform; class btTransform;
class btVector3; class btVector3;
class btBoxShape; class btBoxShape;
#include "LinearMath/btVector3.h"
#include "LinearMath/btAlignedObjectArray.h" #include "LinearMath/btAlignedObjectArray.h"
@@ -31,7 +32,7 @@ struct BasicDemoPhysicsSetup
virtual void stepSimulation(float deltaTime); virtual void stepSimulation(float deltaTime);
virtual btRigidBody* createRigidBody(float mass, const btTransform& startTransform,btCollisionShape* shape); virtual btRigidBody* createRigidBody(float mass, const btTransform& startTransform,btCollisionShape* shape, const btVector4& color=btVector4(1,0,0,1));
virtual btBoxShape* createBoxShape(const btVector3& halfExtents); virtual btBoxShape* createBoxShape(const btVector3& halfExtents);

View File

@@ -68,13 +68,13 @@ void BasicDemo::exitPhysics()
//SimpleOpenGL3App* m_glApp; //SimpleOpenGL3App* m_glApp;
btRigidBody* MyBasicDemoPhysicsSetup::createRigidBody(float mass, const btTransform& startTransform,btCollisionShape* shape) btRigidBody* MyBasicDemoPhysicsSetup::createRigidBody(float mass, const btTransform& startTransform,btCollisionShape* shape, const btVector4& color)
{ {
btRigidBody* body = BasicDemoPhysicsSetup::createRigidBody(mass,startTransform,shape); btRigidBody* body = BasicDemoPhysicsSetup::createRigidBody(mass,startTransform,shape);
int graphicsShapeId = shape->getUserIndex(); int graphicsShapeId = shape->getUserIndex();
btAssert(graphicsShapeId>=0); btAssert(graphicsShapeId>=0);
btVector3 localScaling = shape->getLocalScaling(); btVector3 localScaling = shape->getLocalScaling();
float color[]={0.3,0.3,1,1};
int graphicsInstanceId = m_glApp->m_instancingRenderer->registerGraphicsInstance(graphicsShapeId,startTransform.getOrigin(),startTransform.getRotation(),color,localScaling); int graphicsInstanceId = m_glApp->m_instancingRenderer->registerGraphicsInstance(graphicsShapeId,startTransform.getOrigin(),startTransform.getRotation(),color,localScaling);
body->setUserIndex(graphicsInstanceId); body->setUserIndex(graphicsInstanceId);

View File

@@ -11,7 +11,7 @@ struct MyBasicDemoPhysicsSetup : public BasicDemoPhysicsSetup
{ {
SimpleOpenGL3App* m_glApp; SimpleOpenGL3App* m_glApp;
virtual btRigidBody* createRigidBody(float mass, const btTransform& startTransform,btCollisionShape* shape); virtual btRigidBody* createRigidBody(float mass, const btTransform& startTransform,btCollisionShape* shape, const btVector4& color);
virtual btBoxShape* createBoxShape(const btVector3& halfExtents); virtual btBoxShape* createBoxShape(const btVector3& halfExtents);
}; };

View File

@@ -5,7 +5,9 @@
Bullet2RigidBodyDemo::Bullet2RigidBodyDemo(SimpleOpenGL3App* app) Bullet2RigidBodyDemo::Bullet2RigidBodyDemo(SimpleOpenGL3App* app)
:m_glApp(app), :m_glApp(app),
m_pickedBody(0), m_pickedBody(0),
m_pickedConstraint(0) m_pickedConstraint(0),
m_controlPressed(false),
m_altPressed(false)
{ {
m_config = 0; m_config = 0;
m_dispatcher = 0; m_dispatcher = 0;
@@ -113,8 +115,8 @@ btVector3 Bullet2RigidBodyDemo::getRayTo(int x,int y)
bool Bullet2RigidBodyDemo::mouseMoveCallback(float x,float y) bool Bullet2RigidBodyDemo::mouseMoveCallback(float x,float y)
{ {
// if (m_data->m_altPressed!=0 || m_data->m_controlPressed!=0) //if (m_data->m_altPressed!=0 || m_data->m_controlPressed!=0)
// return false; //return false;
if (m_pickedBody && m_pickedConstraint) if (m_pickedBody && m_pickedConstraint)
{ {
@@ -143,7 +145,7 @@ bool Bullet2RigidBodyDemo::mouseButtonCallback(int button, int state, float x, f
if (state==1) if (state==1)
{ {
if(button==0)// && (m_data->m_altPressed==0 && m_data->m_controlPressed==0)) if(button==0 && (!m_altPressed && !m_controlPressed))
{ {
btVector3 camPos; btVector3 camPos;
m_glApp->m_instancingRenderer->getCameraPosition(camPos); m_glApp->m_instancingRenderer->getCameraPosition(camPos);

View File

@@ -5,6 +5,8 @@
#include "../../AllBullet2Demos/BulletDemoInterface.h" #include "../../AllBullet2Demos/BulletDemoInterface.h"
#include "OpenGLWindow/b3gWindowInterface.h"
class Bullet2RigidBodyDemo : public BulletDemoInterface class Bullet2RigidBodyDemo : public BulletDemoInterface
{ {
public: public:
@@ -19,7 +21,8 @@ public:
btVector3 m_oldPickingPos; btVector3 m_oldPickingPos;
btVector3 m_hitPos; btVector3 m_hitPos;
btScalar m_oldPickingDist; btScalar m_oldPickingDist;
bool m_controlPressed;
bool m_altPressed;
public: public:
@@ -35,6 +38,14 @@ public:
virtual bool mouseButtonCallback(int button, int state, float x, float y); virtual bool mouseButtonCallback(int button, int state, float x, float y);
virtual bool keyboardCallback(int key, int state) virtual bool keyboardCallback(int key, int state)
{ {
if (key==B3G_CONTROL)
{
m_controlPressed = (state==1);
}
if (key==B3G_ALT)
{
m_altPressed = (state==1);
}
return false; return false;
} }