forked from bartvdbraak/blender
added python binding for debugdraw,
tweaked friction, some more preparations but no real functionality added yet
This commit is contained in:
parent
292c03ab8e
commit
558b8daf67
3
extern/bullet/Bullet/Bullet3_vc7.vcproj
vendored
3
extern/bullet/Bullet/Bullet3_vc7.vcproj
vendored
@ -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>
|
||||
|
4
extern/bullet/Bullet/Bullet3_vc8.vcproj
vendored
4
extern/bullet/Bullet/Bullet3_vc8.vcproj
vendored
@ -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)
|
||||
|
6
extern/bullet/LinearMath/SimdQuadWord.h
vendored
6
extern/bullet/LinearMath/SimdQuadWord.h
vendored
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user