tlc
24-01-2008 03:08:57
I tried the demo2 - Joint given by the OgreNewt samples
Thereafter, I added OgreMax scene file (I created a big plane as Floor) into the program, but the ball falls nicely, but now does not bounce when in contact with the floor (it falls through the floor).
DemoApplication.h
class DemoApplication : public ExampleApplication
{
public:
DemoApplication(void);
~DemoApplication(void);
private:
OgreNewt::World *mWorld;
OgreNewt::BasicFrameListener *mNewtonListener;
OgreMaxScene *mScene;
};
DemoApplication.cpp:
void DemoApplication::createScene()
{
mScene->Load("../../media/scenes/trial/trial.scene", mWindow);
SceneManager *mgr = mScene->GetSceneManager();
:
:
OgreNewt::CollisionPrimitives::TreeCollisionSceneParser *col = new OgreNewt::CollisionPrimitives::TreeCollisionSceneParser (mWorld);
col->parseScene ( mgr->getSceneNode("Floor"), true );
// 'Floor' node defined in .scene file
OgreNewt::Body *body = new OgreNewt::Body (mWorld, col);
delete col;
body->attachToNode( mgr->getSceneNode("Floor") );
:
:
}
void DemoApplication::createFrameListener()
{
mFrameListener = new DemoFrameListener (mWindow, mCamera, mScene->GetSceneManager(), mWorld, mCamNode);
mRoot->addFrameListener(mFrameListener);
mNewtonListener = new OgreNewt::BasicFrameListener(mWindow, mScene->GetSceneManager(), mWorld, 120 );
mRoot->addFrameListener(nNewtonListener);
}
DemoFrameListener.h
class DemoFrameListener : public ExampleFrameListener
{
protected:
OgreNewt::World *mWorld;
:
:
public:
DemoFrameListener(RenderWindow *win, Camera *cam, SceneManager *mgr, OgreNewt::World *W, SceneNode *ncam);
~DemoFrameListener(void);
:
:
};
DemoFrameListener.cpp:
DemoFrameListener::DemoFrameListener(RenderWindow *win, Camera *cam, SceneManager *mgr, OgreNewt::World *W, SceneNode *ncam) : ExampleFrameListener(win, cam)
{
mWorld = W;
mCamNode = ncam;
mSceneMgr = mgr;
mCamera = cam;
}
bool DemoFrameListener::frameStarted(const FrameEvent &evt)
{
// when spacebar is pressed
Entity *ent = mSceneMgr->createEntity("Ball", "ellipsoid.mesh");
SceneNode *node = mSceneMgr->getRootSceneNode()->createChildSceneNode("Ball");
node->attachObject(ent);
ent->setMaterialName("Simple/dirt01");
ent->setNormaliseNormals(true);
OgreNewt::Collision *col = new OgreNewt::CollisionPrimitives::Ellipsoid (mWorld, Ogre::Vector3(1,1,1));
OgreNewt::Body *body = new OgreNewt::Body(mWorld, col);
Ogre::Vector3 inertia = OgreNewt::MomentOfInertia::CalcSphereSolid(10.0, 1.0);
body->setMassMatrix(10.0, inertia);
body->attachToNode(node);
body->setStandardForceCallback();
:
:
}
The floor body and the ball body does not interact
Rgds,
TLC
Thereafter, I added OgreMax scene file (I created a big plane as Floor) into the program, but the ball falls nicely, but now does not bounce when in contact with the floor (it falls through the floor).
DemoApplication.h
class DemoApplication : public ExampleApplication
{
public:
DemoApplication(void);
~DemoApplication(void);
private:
OgreNewt::World *mWorld;
OgreNewt::BasicFrameListener *mNewtonListener;
OgreMaxScene *mScene;
};
DemoApplication.cpp:
void DemoApplication::createScene()
{
mScene->Load("../../media/scenes/trial/trial.scene", mWindow);
SceneManager *mgr = mScene->GetSceneManager();
:
:
OgreNewt::CollisionPrimitives::TreeCollisionSceneParser *col = new OgreNewt::CollisionPrimitives::TreeCollisionSceneParser (mWorld);
col->parseScene ( mgr->getSceneNode("Floor"), true );
// 'Floor' node defined in .scene file
OgreNewt::Body *body = new OgreNewt::Body (mWorld, col);
delete col;
body->attachToNode( mgr->getSceneNode("Floor") );
:
:
}
void DemoApplication::createFrameListener()
{
mFrameListener = new DemoFrameListener (mWindow, mCamera, mScene->GetSceneManager(), mWorld, mCamNode);
mRoot->addFrameListener(mFrameListener);
mNewtonListener = new OgreNewt::BasicFrameListener(mWindow, mScene->GetSceneManager(), mWorld, 120 );
mRoot->addFrameListener(nNewtonListener);
}
DemoFrameListener.h
class DemoFrameListener : public ExampleFrameListener
{
protected:
OgreNewt::World *mWorld;
:
:
public:
DemoFrameListener(RenderWindow *win, Camera *cam, SceneManager *mgr, OgreNewt::World *W, SceneNode *ncam);
~DemoFrameListener(void);
:
:
};
DemoFrameListener.cpp:
DemoFrameListener::DemoFrameListener(RenderWindow *win, Camera *cam, SceneManager *mgr, OgreNewt::World *W, SceneNode *ncam) : ExampleFrameListener(win, cam)
{
mWorld = W;
mCamNode = ncam;
mSceneMgr = mgr;
mCamera = cam;
}
bool DemoFrameListener::frameStarted(const FrameEvent &evt)
{
// when spacebar is pressed
Entity *ent = mSceneMgr->createEntity("Ball", "ellipsoid.mesh");
SceneNode *node = mSceneMgr->getRootSceneNode()->createChildSceneNode("Ball");
node->attachObject(ent);
ent->setMaterialName("Simple/dirt01");
ent->setNormaliseNormals(true);
OgreNewt::Collision *col = new OgreNewt::CollisionPrimitives::Ellipsoid (mWorld, Ogre::Vector3(1,1,1));
OgreNewt::Body *body = new OgreNewt::Body(mWorld, col);
Ogre::Vector3 inertia = OgreNewt::MomentOfInertia::CalcSphereSolid(10.0, 1.0);
body->setMassMatrix(10.0, inertia);
body->attachToNode(node);
body->setStandardForceCallback();
:
:
}
The floor body and the ball body does not interact
Rgds,
TLC