OGITOR 探索打开场景(1)

探索一下和OGITOR 相关的打开场景操作

void MainWindow::openScene()
{
    Ogitors::OgitorsRoot *ogRoot = OgitorsRoot::getSingletonPtr();

    if(ogRoot->IsSceneLoaded())
        mOgreWidget->setSwitchingScene(true);

    if(!(ogRoot->TerminateScene()))
    {
        mOgreWidget->setSwitchingScene(false);
        return;
    }

    int ret = ogRoot->LoadScene("");
    if(ret == SCF_CANCEL)
        return;

    if( ret != SCF_OK )
    {
        QMessageBox::warning(this,"qtOgitor", tr("Error Loading file") + ": " + CBaseSerializer::GetErrorString((SCENEFILERESULT)ret).c_str(), QMessageBox::Ok);
        return;
    }
    updateRecentFiles();
}

探索一下 int ret = ogRoot->LoadScene(""); 这里应该是主要部分

int OgitorsRoot::LoadScene(Ogre::String filename)
{
    setLoadState(LS_LOADING);
    if(filename != "") 
        filename = OgitorsUtils::QualifyPath(filename);
    
    ClearProjectOptions();
    mPostSceneUpdateList.clear();

    Ogre::UTFString msg = mSystem->Translate("Load in progress...");
    mSystem->UpdateLoadProgress(-1, msg);

    COgitorsSceneSerializer *defaultserializer = OGRE_NEW COgitorsSceneSerializer();
    int ret = defaultserializer->Import(filename);

    if(ret != Ogitors::SCF_OK)
    {    
        msg = mSystem->Translate("Please load a Scene File...");
        mSystem->UpdateLoadProgress(-1, msg);
        setLoadState(LS_UNLOADED);
    }

    OGRE_DELETE defaultserializer;

    return ret;
}


OK, 探索之旅就从这里开始逐步小小地深入一下。

1、setLoadState(LS_LOADING); 设置加载状态,并发送相关事件。
 

void OgitorsRoot::setLoadState(LoadState state)
{
    if(mLoadState != state)
    {
        mLoadState = state;

        LoadStateChangeEvent evt(state);
        EventManager::Instance()->sendEvent(this, 0, &evt);
    }
}

2、ClearProjectOptions(); 设置项目的初始值。

void OgitorsRoot::ClearProjectOptions()
{
    mProjectOptions.IsNewProject = false;
    mProjectOptions.CreatedIn.clear();
    mProjectOptions.ProjectDir.clear();
    mProjectOptions.ProjectName.clear();
    mProjectOptions.SceneManagerName.clear();
    mProjectOptions.TerrainDirectory = "Terrain";
    mProjectOptions.HydraxDirectory = "Hydrax";
    mProjectOptions.CaelumDirectory = "Caelum";
    mProjectOptions.PagedGeometryDirectory = "PagedGeometry";
    mProjectOptions.SceneManagerConfigFile = "";
    mProjectOptions.ResourceDirectories.clear();
    mProjectOptions.CameraSaveCount = 0;
    for(int i = 0;i < 10;i++)
    {
        mProjectOptions.CameraPositions[i] = Vector3::ZERO;
        mProjectOptions.CameraOrientations[i] = Quaternion::IDENTITY;
    }

    for(unsigned int v = 0;v < 31;v++)
    {
        mProjectOptions.LayerNames[v] = "Layer " + Ogre::StringConverter::toString(v);
        mProjectOptions.LayerVisible[v] = true;
    }

    mProjectOptions.LayerCount = 1;
    mProjectOptions.SelectionRectColour = Ogre::ColourValue(0.5f, 0, 1);
    mProjectOptions.SelectionBBColour = Ogre::ColourValue(1, 1, 1);
    mProjectOptions.SelectHighlightBBColour = Ogre::ColourValue(0.19f, 0.91f, 0.19f);
    mProjectOptions.HighlightBBColour = Ogre::ColourValue(0.91f, 0.19f, 0.19f);
    mProjectOptions.GridColour = Ogre::ColourValue(0.7f, 0.7f, 0.7f);
    mProjectOptions.GridSpacing = 1.0f;
    mProjectOptions.SnapAngle = 5.0f;
    mProjectOptions.CameraSpeed = 1.0f;
    mProjectOptions.WalkAroundHeight = 2.0f;
    mProjectOptions.VolumeSelectionDepth = 20.0f;
    mProjectOptions.ObjectCount = 0;
}


3、下面这几行代码用来显示在视口的加载进度信息。

    Ogre::UTFString msg = mSystem->Translate("Load in progress...");
    mSystem->UpdateLoadProgress(-1, msg);



4、最重要的部分就是这里吧:int ret = defaultserializer->Import(filename);

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值