added python binding for debugdraw,

tweaked friction, some more preparations but no real functionality added yet
This commit is contained in:
Erwin Coumans 2005-08-02 14:59:49 +00:00
parent 292c03ab8e
commit 558b8daf67
7 changed files with 52 additions and 26 deletions

@ -390,9 +390,6 @@ ECHO Done
<File
RelativePath="..\LinearMath\GEN_random.h">
</File>
<File
RelativePath="..\LinearMath\IDebugDraw.h">
</File>
<File
RelativePath="..\LinearMath\SimdMatrix3x3.h">
</File>

@ -508,6 +508,10 @@
RelativePath="..\LinearMath\GEN_random.h"
>
</File>
<File
RelativePath="..\LinearMath\IDebugDraw.h"
>
</File>
<File
RelativePath="..\LinearMath\SimdMatrix3x3.h"
>

@ -3,6 +3,9 @@
#include "NarrowPhaseCollision/PersistentManifold.h"
//this constant needs to be set up so different solvers give 'similar' results
#define FRICTION_CONSTANT 120.f
ContactJoint::ContactJoint(PersistentManifold* manifold,int index,bool swap,RigidBody* body0,RigidBody* body1)
:m_manifold(manifold),
@ -15,9 +18,6 @@ m_body1(body1)
int m_numRows = 3;
//float gContactFrictionFactor = 0.f;//12.f;//30.5f;//100.f;//1e30f;//2.9f;
void ContactJoint::GetInfo1(Info1 *info)
{
@ -150,7 +150,8 @@ void ContactJoint::GetInfo2(Info2 *info)
c2[1] = ccc2[1];
c2[2] = ccc2[2];
float friction = 20.f*m_body0->getFriction() * m_body1->getFriction();
float friction = FRICTION_CONSTANT*m_body0->getFriction() * m_body1->getFriction();
// first friction direction
if (m_numRows >= 2)

@ -91,15 +91,15 @@ class SimdQuadWord
m_unusedW=w;
}
SIMD_FORCE_INLINE SimdQuadWord()
:m_x(0.f),m_y(0.f),m_z(0.f),m_unusedW(0.f)
SIMD_FORCE_INLINE SimdQuadWord() :
m_x(0.f),m_y(0.f),m_z(0.f),m_unusedW(0.f)
{
}
SIMD_FORCE_INLINE SimdQuadWord(const SimdScalar& x, const SimdScalar& y, const SimdScalar& z)
:m_x(x),m_y(y),m_z(z)
//todo, remove this in release/simd ?
,m_unusedW(0.f)
,m_unusedW(1e30f)
{
}

@ -173,6 +173,7 @@ static struct Scene *GetSceneForName2(struct Main *maggie, const STR_String& sce
#include "KX_PythonInit.h"
#ifdef USE_BULLET
#include "IDebugDraw.h"
@ -187,7 +188,7 @@ struct BlenderDebugDraw : public IDebugDraw
virtual void DrawLine(const SimdVector3& from,const SimdVector3& to,const SimdVector3& color)
{
if (m_debugMode == 1)
if (m_debugMode >0)
{
MT_Vector3 kxfrom(from[0],from[1],from[2]);
MT_Vector3 kxto(to[0],to[1],to[2]);
@ -260,9 +261,9 @@ void KX_BlenderSceneConverter::ConvertScene(const STR_String& scenename,
{
CcdPhysicsEnvironment* ccdPhysEnv = new CcdPhysicsEnvironment();
ccdPhysEnv->setDebugDrawer(new BlenderDebugDraw());
//disable / enable debug drawing (contact points, aabb's etc)
// ccdPhysEnv->setDebugMode(1);
//todo: get a button in blender ?
//disable / enable debug drawing (contact points, aabb's etc)
//ccdPhysEnv->setDebugMode(1);
destinationscene->SetPhysicsEnvironment(ccdPhysEnv);
break;
}

@ -133,7 +133,7 @@ void KX_ConvertSumoObject( KX_GameObject* gameobj,
smmaterial->m_fh_normal = kxmaterial->m_fh_normal;
smmaterial->m_fh_spring = kxmaterial->m_fh_spring;
smmaterial->m_friction = kxmaterial->m_friction;
smmaterial->m_restitution = 0.f;//kxmaterial->m_restitution;
smmaterial->m_restitution = kxmaterial->m_restitution;
SumoPhysicsEnvironment* sumoEnv =
(SumoPhysicsEnvironment*)kxscene->GetPhysicsEnvironment();
@ -854,7 +854,6 @@ static CollisionShape* CreateBulletShapeFromMesh(RAS_MeshObject* meshobj, bool p
void KX_ConvertBulletObject( class KX_GameObject* gameobj,
class RAS_MeshObject* meshobj,
class KX_Scene* kxscene,
@ -864,10 +863,7 @@ void KX_ConvertBulletObject( class KX_GameObject* gameobj,
{
CcdPhysicsEnvironment* env = (CcdPhysicsEnvironment*)kxscene->GetPhysicsEnvironment();
assert(env);
bool dyna = false;
@ -912,8 +908,12 @@ void KX_ConvertBulletObject( class KX_GameObject* gameobj,
halfExtents /= 2.f;
//todo: do this conversion internally !
//SimdVector3 he (halfExtents[0]-CONVEX_DISTANCE_MARGIN ,halfExtents[1]-CONVEX_DISTANCE_MARGIN ,halfExtents[2]-CONVEX_DISTANCE_MARGIN );
//he = he.absolute();
SimdVector3 he (halfExtents[0],halfExtents[1],halfExtents[2]);
he = he.absolute();
bm = new BoxShape(he);
bm->CalculateLocalInertia(ci.m_mass,ci.m_localInertiaTensor);
@ -929,7 +929,6 @@ void KX_ConvertBulletObject( class KX_GameObject* gameobj,
);
bm = new CylinderShapeZ(halfExtents);
bm->CalculateLocalInertia(ci.m_mass,ci.m_localInertiaTensor);
bm->SetMargin(0.05f);
break;
}
@ -948,7 +947,6 @@ void KX_ConvertBulletObject( class KX_GameObject* gameobj,
bm = new ConeShape(objprop->m_boundobject.c.m_radius,objprop->m_boundobject.c.m_height);
bm->CalculateLocalInertia(ci.m_mass,ci.m_localInertiaTensor);
bm->SetMargin(0.05f);
break;
@ -959,7 +957,6 @@ void KX_ConvertBulletObject( class KX_GameObject* gameobj,
if (bm)
{
bm->CalculateLocalInertia(ci.m_mass,ci.m_localInertiaTensor);
bm->SetMargin(0.05f);
}
break;
}
@ -1007,8 +1004,8 @@ void KX_ConvertBulletObject( class KX_GameObject* gameobj,
ci.m_restitution = smmaterial->m_restitution;
ci.m_linearDamping = 0.5;//shapeprops->m_lin_drag;
ci.m_angularDamping = 0.5f;//shapeprops->m_ang_drag;
ci.m_linearDamping = shapeprops->m_lin_drag;
ci.m_angularDamping = shapeprops->m_ang_drag;
KX_BulletPhysicsController* physicscontroller = new KX_BulletPhysicsController(ci,dyna);
env->addCcdPhysicsController( physicscontroller);

@ -48,9 +48,11 @@ static char PhysicsConstraints_module_documentation[] =
static char gPySetGravity__doc__[] = "setGravity(float x,float y,float z)";
static char gPySetDebugMode__doc__[] = "setDebugMode(int mode)";
static char gPyCreateConstraint__doc__[] = "createConstraint(ob1,ob2,float restLength,float restitution,float damping)";
static char gPyRemoveConstraint__doc__[] = "removeConstraint(constraint id)";
static PyObject* gPySetGravity(PyObject* self,
PyObject* args,
PyObject* kwds)
@ -65,6 +67,26 @@ static PyObject* gPySetGravity(PyObject* self,
Py_INCREF(Py_None); return Py_None;
}
static PyObject* gPySetDebugMode(PyObject* self,
PyObject* args,
PyObject* kwds)
{
int mode;
if (PyArg_ParseTuple(args,"i",&mode))
{
if (PHY_GetActiveEnvironment())
{
PHY_GetActiveEnvironment()->setDebugMode(mode);
}
}
printf("hi\n");
Py_INCREF(Py_None); return Py_None;
}
@ -142,7 +164,10 @@ static PyObject* gPyRemoveConstraint(PyObject* self,
static struct PyMethodDef physicsconstraints_methods[] = {
{"setGravity",(PyCFunction) gPySetGravity,
METH_VARARGS, gPySetGravity__doc__},
{"setDebugMode",(PyCFunction) gPySetDebugMode,
METH_VARARGS, gPySetDebugMode__doc__},
{"createConstraint",(PyCFunction) gPyCreateConstraint,
METH_VARARGS, gPyCreateConstraint__doc__},
{"removeConstraint",(PyCFunction) gPyRemoveConstraint,
@ -161,6 +186,7 @@ PyObject* initPythonConstraintBinding()
PyObject* m;
PyObject* d;
m = Py_InitModule4("PhysicsConstraints", physicsconstraints_methods,
PhysicsConstraints_module_documentation,
(PyObject*)NULL,PYTHON_API_VERSION);