contactCallback is not called

A place to discuss everything related to Newton Dynamics.

Moderators: Sascha Willems, walaber

contactCallback is not called

Postby Virginie » Tue Apr 21, 2009 6:18 am

Hello I use OgreNewt 2.0 and Newton 2.0

I think I do all that I must do and they are no collisions!

I resume that I do :
I create a world and I initialise his size at (-1000000,-1000000,-1000000,1000000,10000001000000)
I create some materialID and materialPair
I set default collidable and contact callback (with a little callback which write in console)

Code is :
//Create the world for collision
m_WorldCollision = new OgreNewt::World();

//Initialize the world size.
m_WorldCollision->setWorldSize(Ogre::Vector3(-1000000,-1000000,-1000000),Ogre::Vector3(1000000,1000000,1000000));

//Create Callback
m_MonCallbackCollision = new OrealiaSceneManager::CallbackCollision();

//manage collision
m_Collidable = true;

//Create material
m_CameraMaterial = new OgreNewt::MaterialID(m_WorldCollision);
m_CanCollidableMaterial = new OgreNewt::MaterialID(m_WorldCollision);
m_NeverCollidableMaterial = new OgreNewt::MaterialID(m_WorldCollision);

//Create material pair and properties
m_CameraCamera = new OgreNewt::MaterialPair(m_WorldCollision,m_CameraMaterial,m_CameraMaterial);
m_CameraCamera->setDefaultCollidable(0); //Not collide

m_CameraCanCollidable = new OgreNewt::MaterialPair(m_WorldCollision,m_CameraMaterial,m_CanCollidableMaterial);
m_CameraCanCollidable->setDefaultCollidable(1); //Collide
m_CameraCanCollidable->setContactCallback(m_MonCallbackCollision);

m_CameraNeverCollidable = new OgreNewt::MaterialPair(m_WorldCollision,m_CameraMaterial,m_NeverCollidableMaterial);
m_CameraNeverCollidable->setDefaultCollidable(0); //Not collide

m_CanCollidableCanCollidable = new OgreNewt::MaterialPair(m_WorldCollision,m_CanCollidableMaterial,m_CanCollidableMaterial);
m_CanCollidableCanCollidable->setDefaultCollidable(1); //Collide
m_CanCollidableCanCollidable->setContactCallback(m_MonCallbackCollision);

m_CanCollidableNeverCollidable = new OgreNewt::MaterialPair(m_WorldCollision,m_CanCollidableMaterial,m_NeverCollidableMaterial);
m_CanCollidableNeverCollidable->setDefaultCollidable(0); //Not collide

m_NeverCollidableNeverCollidable = new OgreNewt::MaterialPair(m_WorldCollision,m_NeverCollidableMaterial,m_NeverCollidableMaterial);
m_NeverCollidableNeverCollidable->setDefaultCollidable(0); //Not collide

I create my bodies and affect material
Code is :
m_Node->_update(NULL,NULL);
OgreNewt::Collision *l_BoxCollision = new OgreNewt::CollisionPrimitives::Box(l_SceneManager->getWorldCollision(),l_Mesh->getBoundingBox().getSize());
m_BodyCollision->setCollision(l_BoxCollision);
delete l_BoxCollision;
m_BodyCollision->setPositionOrientation(m_Node->_getDerivedPosition(),m_Node->_getDerivedOrientation());
m_BodyCollision->setMaterialGroupID(l_SceneManager->getCanCollidableMaterial());

And I update world for collision
Code is :
// Collision detection
if (m_Scene->getCollidable())
m_Scene->getWorldCollision()->collisionUpdate();

Have I forget something?
Virginie
 
Posts: 32
Joined: Tue Mar 31, 2009 4:29 am

Re: contactCallback is not called

Postby Virginie » Wed Apr 22, 2009 4:16 am

Excuse me I have done a mix of the real code and I forget the body (I had thought that is much simple but not), this is the real code :

OgreNewt::Collision *l_BoxCollision = new OgreNewt::CollisionPrimitives::Box(getSceneManager()->getWorldCollision(),Ogre::Vector3(1,1,1));
m_BodyCollision = new OgreNewt::Body(getSceneManager()->getWorldCollision(),l_BoxCollision);
delete l_BoxCollision;
m_BodyCollision->setMaterialGroupID(getSceneManager()->getNeverCollidableMaterial());
m_BodyCollision->attachNode(m_Node);

this is just the initialization , after I do this when a node is created with his type :
for a camera node :
m_Node->_update(NULL,NULL);
m_BodyCollision->setType(2);
m_BodyCollision->setMaterialGroupID(l_SceneManager->getCameraMaterial());
m_BodyCollision->setPositionOrientation(m_Node->_getDerivedPosition(),m_Node->_getDerivedOrientation());

for a node without collision :
m_Node->_update(NULL,NULL);
m_BodyCollision->setType(1);
m_BodyCollision->setPositionOrientation(m_Node->_getDerivedPosition(),m_Node->_getDerivedOrientation());

for a node with collision :
m_Node->_update(NULL,NULL);
// Update the collision body
OgreNewt::Collision *l_BoxCollision = new OgreNewt::CollisionPrimitives::Box(l_SceneManager->getWorldCollision(),l_Mesh->getBoundingBox().getSize());
m_BodyCollision->setCollision(l_BoxCollision);
delete l_BoxCollision;
m_BodyCollision->setMaterialGroupID(l_SceneManager->getCanCollidableMaterial());
m_BodyCollision->setPositionOrientation(m_Node->_getDerivedPosition(),m_Node->_getDerivedOrientation());

Please some one help me.
Virginie
 
Posts: 32
Joined: Tue Mar 31, 2009 4:29 am

Re: contactCallback is not called

Postby Virginie » Thu Apr 23, 2009 8:04 am

Hello it's me yet with my problems!

I can't use OgreNewt debug so I write myself coordinates of my collision box in the console. But where take size or coordinates of my collision box? Now I take the AABB box of my collision bos by Ogre with :
l_Body->getCollision()->getAABB(l_Body->getOgreNode()->_getDerivedOrientation(),l_Body->getOgreNode()->_getDerivedPosition());

Have I an other method to take my real collision box?

With this I means that my collisions box are good but always not contactCallback called and no collision!
Virginie
 
Posts: 32
Joined: Tue Mar 31, 2009 4:29 am

Re: contactCallback is not called

Postby Virginie » Thu Apr 23, 2009 8:58 am

Yeah contactCallback is called!!!
Virginie
 
Posts: 32
Joined: Tue Mar 31, 2009 4:29 am


Return to General Discussion

Who is online

Users browsing this forum: No registered users and 20 guests

cron