[ODE] (Second Try) Problem with contact joints

Rodrigo Hernandez kwizatz at aeongames.com
Fri Mar 18 10:14:29 MST 2005


Hi,

Still no luck :(

here is my World creation function:

CSettings::GetSettings()->fGravity is -5.0f

CWorld::CWorld()
{
  CurCamera = NULL;
  sName = "World";
  ODEWorld = dWorldCreate();
  ODESpace = dSimpleSpaceCreate(0);
  ODEContactGroup = dJointGroupCreate (0);
  dWorldSetGravity(ODEWorld,0,0,CSettings::GetSettings()->fGravity);
  dWorldSetCFM(ODEWorld,1e-5f);
}

here is how I create the trimesh, I highly doubt the problem is here though.

    ODETriMeshData = dGeomTriMeshDataCreate();

    dGeomTriMeshDataBuildSimple(ODETriMeshData, (dReal*)ODEVertices, 
VertexCount, ODEIndices, IndexCount);
   
    ODETriMesh = 
dCreateTriMesh(CWorld::GetWorld()->GetODEWorldSpace(),ODETriMeshData, 0, 
0, 0);

Finally here is my sphere creation code:

CEntity::CEntity()
{
  // ODE Stuff
    dMatrix3 Rotation;
    dMass Mass;
    dRSetIdentity(Rotation);
    CWorld *World=CWorld::GetWorld();
    ODEBody = dBodyCreate(World->GetODEWorld());
    dBodySetPosition (ODEBody,0.0f,0.0f,0.0f);
    dBodySetRotation (ODEBody,Rotation);
    dBodySetData (ODEBody,(void*)NULL);
    dMassSetSphere (&Mass,5.0f,87.5f);
    ODEGeometry=dCreateSphere(World->GetODEWorldSpace(),87.5f);
    dGeomSetBody(ODEGeometry,ODEBody);
    dBodySetMass(ODEBody,&Mass);
    dBodySetPosition (ODEBody,200.0f,200.0f,500.0f);
}

Thanks again.

Kris wrote:

>Hi
>
>try those settings, it it sill won't work properly you can be sure that
>parameters are ok :D
>
>		 contact[i].surface.mode = dContactBounce | dContactSoftERP | dContactSoftCFM | dContactApprox1;
>                 contact[i].surface.mu = 0.7f;
>                 contact[i].surface.bounce = 0.01f;
>                 contact[i].surface.slip1 = 0.2;
>                 contact[i].surface.slip2 = 0.2;
>                 contact[i].surface.soft_erp = 0.7f;
>                 contact[i].surface.soft_cfm = 0.001f;
>
>maybe you have put sphere into another space, then you have to call
>dSpaceCollide2, for now i'm running out of ideas...
>
>On Fri, 18 Mar 2005, Rodrigo Hernandez wrote:
>  
>
>>Hi,
>>Well, I tried to set the step to a smaller amount, my max contacts is
>>40, but dCollide returns only one collision, still no change at runtime,
>>the sphere just passes through.
>>
>>I am going to try tracing into ODE's dWorldStep function and find
>>whether or not the contact makes any difference, so what is the function
>>that applies contact forces? what should I be looking for?
>>
>>Here is the code for the simloop and the near callback I am using just
>>in case.
>>The Near callback is an object static function, in case you're wondering:
>>
>>void CWorld::OnPrepare()
>>{
>>    dSpaceCollide(ODESpace,0,&ODENearCallback);
>>    dWorldStep(ODEWorld,0.01);
>>    dJointGroupEmpty(ODEContactGroup);
>>}
>>
>>void CWorld::ODENearCallback (void *data, dGeomID o1, dGeomID o2)
>>{
>> CWorld *World=CWorld::GetWorld();
>>  // exit without doing anything if the two bodies are connected by a joint
>>  dBodyID b1 = dGeomGetBody(o1);
>>  dBodyID b2 = dGeomGetBody(o2);
>>  if (b1 && b2 && dAreConnectedExcluding (b1,b2,dJointTypeContact)) return;
>>
>>  dContact contact[40];   // up to MAX_CONTACTS contacts per box-box
>>  for (int i=0; i<40; i++)
>>  {
>>    contact[i].surface.mode = dContactBounce | dContactSoftCFM;
>>    contact[i].surface.mu = dInfinity;
>>    contact[i].surface.mu2 = 0;
>>    contact[i].surface.bounce = 1.0f;
>>    contact[i].surface.bounce_vel = 0.0f;
>>    contact[i].surface.soft_cfm = 0.01f;
>>  }
>>  if (int numc = dCollide (o1,o2,40,&contact[0].geom,sizeof(dContact)))
>>  {
>>    for (int i=0; i<numc; ++i)
>>    {
>>        dWorldID world = World->GetODEWorld();
>>        dJointGroupID cg=World->GetODEContactGroup();
>>        dJointID c = dJointCreateContact (world,cg,&contact[i]);
>>        dJointAttach(c,b1,b2);
>>    }
>>  }
>>}
>>
>>Thanks for looking :).
>>_______________________________________________
>>ODE mailing list
>>ODE at q12.org
>>http://q12.org/mailman/listinfo/ode
>>
>>    
>>
>
>Pozdr __DEVELOPER_TRINITY_CREEZ_H__
>  
>



More information about the ODE mailing list