游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2626|回复: 0

OgreNewt新版本和OSM场景的碰撞检测问题

[复制链接]

2

主题

9

帖子

9

积分

新手上路

Rank: 1

积分
9
发表于 2010-3-23 13:55:00 | 显示全部楼层 |阅读模式
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]
谢谢。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-12 17:49

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表