3D图形编程

学无止尽

  C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  4 Posts :: 46 Stories :: 2 Comments :: 0 Trackbacks

常用链接

留言簿(2)

搜索

  •  

最新评论

阅读排行榜

评论排行榜

1. 头文件 "Ogre.h", "ExampleApplication.h", "ExampleLoadingBar.h"
2. 覆盖基类的loadResource方法, 基类的该方法指示初始化所有资源组, 而这里带有加载工具条的显示
    在加载过程中需要停止其他所有的渲染队列, 只允许Overlay的渲染, 这里需要用上SpecialCaseRenderQueue
    用setSpecialCaseRenderQueueMode实现只渲染特殊的队列, 用法如下。
    由于本例需要世界地图所以要链接地图, 加载地图
    linkWorldGeometryToResourceGroup和loadResourceGroup该地图资源组
    // 开始
    mLoadingBar.start(mWindow, 1, 1, 0.75);
    
    // 关闭所有的渲染, 除了Overlay
    mSceneMgr->clearSpecialCaseRenderQueues();
    mSceneMgr->addSpecialCaseRenderQueue(RENDER_QUEUE_OVERLAY);
    mSceneMgr->setSpecialCaseRenderQueueMode(SceneManager::SCRQM_INCLUDE);
    
    // 建立世界地图的链接
    ResourceGroupManager::getSingleton().linkWorldGeometryToResourceGroup(
        ResourceGroupManager::getSingleton().getWorldResourceGroupName(),
        mQuakeLevel, mSceneMgr);

    // 初始化剩余的资源组
    ResourceGroupManager::getSingleton().initialiseAllResourceGroups();
    ResourceGroupManager::getSingleton().loadResourceGroup(
        ResourceGroupManager::getSingleton().getWorldResourceGroupName(),
        false, true);    
    
    // 重新渲染
    mSceneMgr->clearSpecialCaseRenderQueues();
    mSceneMgr->setSpecialCaseRenderQueueMode(SceneManager::SCRQM_EXCLUDE);

    mLoadingBar.finish();
    
3. 重载基类的setupResources()方法
    ConfigFile类的getSetting方法可以得到特定的值
    ResourceGroupManager::getSingleton().getWorldResourceGroupName()则表示使用缺省的地图资源组
        ConfigFile cf;

        cf.load("quake3settings.cfg");

        mQuakePk3 = cf.getSetting("Pak0Location");
        mQuakeLevel = cf.getSetting("Map");

        ExampleApplication::setupResources();
        ResourceGroupManager::getSingleton().addResourceLocation(
            mQuakePk3, "Zip", ResourceGroupManager::getSingleton().getWorldResourceGroupName(), true);

4. 重载基类的chooseSceneManager方法, 注意BSP地图不支持 ST_GENERIC类型 地图管理器
    mSceneMgr = mRoot->createSceneManager("BspSceneManager");
    void createScene(void)
    
{

        
// modify camera for close work
        mCamera->setNearClipDistance(4);
        mCamera
->setFarClipDistance(4000);

        
// Also change position, and set Quake-type orientation
        
// Get random player start point
        ViewPoint vp = mSceneMgr->getSuggestedViewpoint(true);
        mCamera
->setPosition(vp.position);
        mCamera
->pitch(Degree(90)); // Quake uses X/Y horizon, Z up
        mCamera->rotate(vp.orientation);
        
// Don't yaw along variable axis, causes leaning
        mCamera->setFixedYawAxis(true, Vector3::UNIT_Z);


    }


posted on 2011-12-08 10:06 Nightsky 阅读(288) 评论(0)  编辑 收藏 引用 所属分类: OgreDEMO

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理