OGITOR 探索打开场景(1)

来源:互联网 发布:手机淘宝没有投诉卖家 编辑:程序博客网 时间:2024/06/08 14:13

探索一下和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);

 

原创粉丝点击