|
RT, 我在OgreNewt中加载Ofusion导出的场景,OgreNewt用的是较早的版本,在场景的上方自由下落一个物体用来检测碰撞。都没有什么问题,可以发生碰撞。
问题是,我想让角色在场景中移动,要用到OgreNewt2.0以上版本的OgreNewt: layerController,所以试着在新版本的OgreNewt中加载OSM场景。改动了原先的一些函数,场景加载实现了,物体也能够往下落,但是却失去了碰撞检测。也就是说物体穿透了地面往下落,不知道是什么原因,还请各位大侠帮忙 [em10]
以下是地面和物体设置的代码:
scene部分
m_World = new OgreNewt::World();
OSMScene oScene;
oSceneCallback oe_Callback;
oScene.initialise("terrain.osm", &oe_Callback);
oScene.createScene();
mSceneMgr = oScene.getSceneManager();
//create phisics
OgreNewt::CollisionPrimitives::TreeCollisionSceneParser* col =
new OgreNewt::CollisionPrimitives::TreeCollisionSceneParser(m_World);
col->parseScene(mSceneMgr->getRootSceneNode(),1,true);
OgreNewt::Body* body = new OgreNewt::Body(m_World, OgreNewt::CollisionPtr(col));
body->attachNode( mSceneMgr->getRootSceneNode() );
body->setStandardForceCallback();
...
下落物体部分:
Ogre::Vector3 vec;
Entity* mEntity;
Ogre::String name;
vec = Ogre::Vector3(0,0,-1);
name = "Body "+Ogre::StringConverter::toString( 0 );
mEntity = mSceneMgr->createEntity( name, "ninja.mesh" );
SceneNode* mEntity_node;
mEntity_node = mSceneMgr->getRootSceneNode()->createChildSceneNode(name);
mEntity_node->attachObject(mEntity);
mEntity_node->scale(2,2,2);
OgreNewt::ConvexCollisionPtr col = OgreNewt::ConvexCollisionPtr(new OgreNewt::CollisionPrimitives::Cylinder(m_World, 500, 100,1));
// then make the rigid body.
OgreNewt::Body* body = new OgreNewt::Body( m_World, col );
//no longer need the collision shape object
Ogre::Vector3 inertia, offset;
col->calculateInertialMatrix(inertia, offset);
body->setMassMatrix( 10.0, 10.0*inertia );
body->setCenterOfMass(offset);
// attach to the scene node.
body->attachNode( mEntity_node);
body->setStandardForceCallback();
body->setPositionOrientation( Ogre::Vector3(0,1000,0),Ogre: uaternion::IDENTITY );
body->setVelocity( (vec * 100.0) );
...
基本上就是这些,编译连接都可以通过。还请大家帮忙 [em5]
谢谢。 |
|