dNewton::dNewton() :m_maxUpdatePerIterations(2) { // create a newton world m_world = NewtonCreate(); // for two way communication between low and high lever, link the world with this class for NewtonWorldSetUserData(m_world, this); // set the simplified solver mode (faster but less accurate) NewtonSetSolverModel (m_world, 1); // by default runs on four micro threads NewtonSetThreadsCount(m_world, 4); // set the collision copy constructor callback NewtonWorldSetCollisionConstructorDestructorCallback (m_world, OnCollisionCopyConstruct, OnCollisionDestructorCallback); // use default material to implement traditional "Game style" one side material system int defaultMaterial = NewtonMaterialGetDefaultGroupID (m_world); NewtonMaterialSetCallbackUserData (m_world, defaultMaterial, defaultMaterial, m_world); NewtonMaterialSetCompoundCollisionCallback(m_world, defaultMaterial, defaultMaterial, OnCompoundSubCollisionAABBOverlap); NewtonMaterialSetCollisionCallback (m_world, defaultMaterial, defaultMaterial, OnBodiesAABBOverlap, OnContactProcess); // add a hierarchical transform manage to update local transforms new dNewtonTransformManager (this); // set the timer ResetTimer(); }
void iPhysics::setCollisionCallback(iPhysicsMaterialCombo* materialCombo) { NewtonMaterialSetCollisionCallback(static_cast<const NewtonWorld*>(_defaultWorld), materialCombo->getMaterial0(), materialCombo->getMaterial1(), NULL, GenericContactProcess); NewtonMaterialSetCallbackUserData(static_cast<const NewtonWorld*>(_defaultWorld), materialCombo->getMaterial0(), materialCombo->getMaterial1(), materialCombo); }