青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

OGre實際應用程序[二]

Posted on 2008-09-06 16:51 美洲豹 閱讀(640) 評論(0)  編輯 收藏 引用

初始化

       正面的這段代碼是在main()之后的初始化代碼:

//wrangle a pointer to the Root Ogre object 
        // the first param is the name of the plugins cfg file, the second is the name of the ogre cfg file
        // we are not using either here, so provide them as empty strings to let Ogre know not to load them
        // The third param is the name of the Ogre.log diagnostic file; leave it default for now
        ogre = new Root("", "");
 
        try {
               ResourceGroupManager::getSingleton().addResourceLocation(
                       "resource", "FileSystem", "General");
               ResourceGroupManager::getSingleton().addResourceLocation(
                       "resource/gui.zip", "Zip", "GUI");
 
               VideoOptions opts;
               VideoOptions::iterator it;
               getOptions(opts);
               std::string val;
               unsigned int h, w;
               bool fullscreen = false;
               Ogre::RenderSystemList *renderSystems = NULL;
               Ogre::RenderSystemList::iterator r_it;
 
               val = opts.find("renderSystem")->second;
               renderSystems = ogre->getAvailableRenderers();
 
               // check through the list of available renderers, looking for the one that contains
               // the string in "val" ('renderSystem' option from the config.ini file)
               bool renderSystemFound = false;
               for (r_it=renderSystems->begin(); r_it!=renderSystems->end(); r_it++) {
                       RenderSystem *tmp = *r_it;
                       std::string rName(tmp->getName());
 
                       // returns -1 if string not found
                       if ((int) rName.find(val) >= 0) {
                               ogre->setRenderSystem(*r_it);
                               renderSystemFound = true;
                               break;
                       }
               }
 
               if (!renderSystemFound) {
                       throw new VideoInitializationException("Specified render system (" + val + ") not found, exiting...");
               }
 
 
               // sscanf is the easy way to do this
               val = opts.find("resolution")->second;
               sscanf(val.c_str(), "%dx%d", &w, &h);
               opts.erase("resolution");
 
               val = opts.find("fullscreen")->second;
               if (val == "true")
                       fullscreen = true;
               opts.erase("fullscreen");
 
               // false because we are not using an autocreated window
               ogre->initialise(false);
               window = ogre->createRenderWindow(appName, w, h, fullscreen, &opts);
 
               ResourceGroupManager::getSingleton().initialiseAllResourceGroups();
 
               guiSceneMgr = ogre->createSceneManager(ST_GENERIC);
               showGui();
        }
        catch (Ogre::Exception &e) {
               std::string msg = e.getFullDescription();
               std::cerr << msg << std::endl;
                exit (-1);
        }

在這里,你不想使用默認的對話框設置以及不想用Ogre.cfg,而想用自己的一個文件來對所有的子系統進行配置. 因此,你需要手動地處理它.不是很大的事,你只需要對STL熟悉就行了.

ResourceGroupManager::getSingleton().addResourceLocation(
                       "resource", "FileSystem", "General");
               ResourceGroupManager::getSingleton().addResourceLocation(
                       "resource/gui.zip", "Zip", "GUI");

上面的代碼,第一個目錄”resource”,在我們游戲的安裝根目錄下.在這個系列中,我們將把所有游戲的資源數據放在游戲根目錄下.加上這個目錄可以讓Ogre ResourceGroupManager知道如何去找到我們的資源. 下一語句指明Gui資源,需要注意的是,資源不能有重名,要不然會崩潰.

       Ogre的資源管理子系統需要注意的是:1.它不會到子目錄中去尋找,因此,你必須告訴它.2.文件夾的名字是沒有意義的.這就是說,如果在不同的文件夾內,有兩個文件重名的話,也是不行的.

       在這里,對于我們資源的加載,首先,我們沒有導入OgreCore.zip.因為你不需要它.它對Demo是有用的.第二,我們把所有與GUI相關的內容放在了gui.zip這個文件中.

(對于CEGUI熟悉的用戶可能覺得這樣的配置不好,但是,這樣做的話,將來你在用CEGUI的配置的時候可以省掉很多麻煩).

配置

       這個章節將寫一些用于讀取config.ini的代碼.

    VideoOptions STL std::maptypedef, getOptions() 配置讀取函數返回這個值. 巧合的是, Ogre::NameValuePairList 也是這樣用的.需要記住的是,這需要你在你的.ini配置文件中使用option名字.

在你的頭文件中,記得加入正面的typedef:

typedef NameValuePairList VideoOptions;

為了便于參考,正面是一個對于video section的配置文件:

[video]
FSAA=0
colourDepth=32
fullscreen=false
renderSystem=Direct3D9
resolution=800x600
vsync=false

這里選了一個默認的D3d渲染系統,你也可以在GUI的配置選項中,getAvailableRenderers()來得到所有的可用的渲染API,然后選擇使用哪一個. 一旦你有了渲染系統,你就可以創建主要的Ogre window.

getOptions()是一個簡單的函數,其使用Win32SHGetFolderPath() APILinux中的$HOME變量和Win32 GetPrivateProfileSection()來讀配置文件的sections.這些讀出的內容放在VideoOptions表里面.下面是getOptions()的代碼:

#ifdef WIN32
#include <shlobj.h>
#else
#endif
 
bool getOptions(VideoOptions opts)
{
        // read these from the ubiquitous config file...on Win32 we have a nice handy
        // API to read config files; on other platforms we'll need to fake one
        char path[MAX_PATH+1];
 
#ifdef WIN32
        SHGetFolderPath(NULL, CSIDL_LOCAL_APPDATA, NULL, SHGFP_TYPE_CURRENT, path);
#else
#endif
        
        std::string pathname(path);
        pathname += "/" + CONFIG_OPTS_DIR + "/" + CONFIG_FILE_NAME;
 
#ifdef WIN32 
        DWORD nSize = 1024, rtnSize;
        char strVal[1024], *cp = strVal;
 
        // yes I know this is not the right way to handle this situation...sue me. :p
        rtnSize = GetPrivateProfileSection("video", strVal, nSize, pathname.c_str());
        if (rtnSize == nSize - 2)
               throw new VideoInitializationException("Cannot read video settings - buffer too small");
        if (rtnSize == 0)
               return false;
 
        std::string name, val;
 
        opts.clear();
        while (*cp != 0 && *(cp+1) != 0) {
               name = cp;
               val = cp;
               cp += strlen(cp) + 1;
 
               name = name.substr(0, name.find('='));
               val = val.substr(val.find('=') + 1);
 
               opts.insert(VideoOptions::value_type(name, val));
        }
#else
#endif
 
        return true;
}

Win32環境中需要添加頭文件"shlobj.h".

CONFIG_OPTS_DIR 是你的配置文件夾的位置. CONFIG_FILE_NAME 在我們這個例子中是 "config.ini"; 在后面會看到,如果用戶沒有config.ini,我們會創建一個合適的默認給它.現在我們用Lua腳本讀出它的配置信息

只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


posts - 15, comments - 2, trackbacks - 0, articles - 29

Copyright © 美洲豹

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲经典在线| 在线视频欧美日韩| 久久久久中文| 亚洲黄色天堂| 亚洲美女一区| 国产精品成人在线观看| 欧美亚洲一区二区三区| 久久精品亚洲一区| 亚洲高清av在线| 亚洲经典视频在线观看| 欧美色欧美亚洲高清在线视频| 亚洲欧美激情一区| 久久精品一区二区三区四区| 最新高清无码专区| 亚洲最新视频在线| 国产亚洲精品资源在线26u| 免费人成精品欧美精品| 欧美精品偷拍| 久久久亚洲精品一区二区三区 | 亚洲精品久久久久久久久久久久| 欧美韩日一区| 欧美一级视频精品观看| 蜜臀a∨国产成人精品| 亚洲一区欧美激情| 久热精品视频| 午夜一级久久| 欧美高清在线| 久久久国产精品一区二区中文 | 久久久欧美精品| 亚洲网站啪啪| 久久一二三国产| 香蕉精品999视频一区二区| 开心色5月久久精品| 午夜欧美精品久久久久久久| 狂野欧美性猛交xxxx巴西| 亚洲午夜小视频| 欧美大胆成人| 免费人成精品欧美精品| 国产欧美亚洲精品| 亚洲精品影视在线观看| 亚洲电影在线| 久久精品人人爽| 午夜精品一区二区三区在线播放| 欧美高清视频| 欧美成人午夜激情在线| 国产一区二区视频在线观看| 亚洲午夜影视影院在线观看| 亚洲精品视频在线播放| 久久久久久9999| 久久久高清一区二区三区| 国产精品欧美经典| 夜夜嗨一区二区三区| 亚洲精品一区二区三区蜜桃久| 欧美一区二区三区四区在线观看地址 | 欧美视频中文字幕在线| 亚洲国产欧美日韩| 亚洲区免费影片| 久久视频在线免费观看| 久久一区二区精品| 国语自产精品视频在线看| 亚洲欧美日韩在线| 午夜综合激情| 国产精品人人做人人爽| 亚洲免费在线观看视频| 亚洲欧美精品中文字幕在线| 欧美日本亚洲| 一区二区三区高清不卡| 亚洲欧美精品在线| 国产精品区一区二区三区| 亚洲一区二三| 欧美在线网址| 韩国免费一区| 久久综合国产精品| 亚洲国产精品第一区二区| 亚洲日韩欧美视频| 欧美日韩视频不卡| 一个人看的www久久| 欧美亚洲三区| 精品69视频一区二区三区| 久久天天狠狠| 亚洲精品日韩综合观看成人91| 亚洲小视频在线| 国产欧美日本| 女人天堂亚洲aⅴ在线观看| 亚洲国产日韩美| 亚洲综合色网站| 国产一区二区三区四区hd| 久久综合色88| 日韩午夜在线播放| 久久精品中文字幕免费mv| 亚洲国产精品成人| 欧美视频一区二区三区| 欧美一级艳片视频免费观看| 欧美14一18处毛片| 亚洲在线黄色| 亚洲大胆人体视频| 欧美日韩一区二区在线播放| 欧美一区二区视频97| 亚洲国产成人av| 欧美一区综合| 亚洲乱码视频| 国产一区二区日韩| 欧美日韩美女在线| 久久午夜羞羞影院免费观看| 99国产精品久久久久老师| 久热精品视频在线观看一区| 日韩午夜黄色| 激情综合五月天| 欧美无砖砖区免费| 免费成人在线视频网站| 亚洲欧美www| 亚洲毛片在线免费观看| 久久色中文字幕| 香港久久久电影| 日韩一级网站| 亚洲高清视频一区| 国产日韩av高清| 欧美视频在线观看一区二区| 你懂的亚洲视频| 久久精品国产久精国产思思| 亚洲视频axxx| 亚洲美女黄色| 亚洲黄色影院| 欧美黄网免费在线观看| 久久久免费精品| 久久国产精品99国产| 亚洲午夜伦理| 一区二区三区欧美| 99精品久久久| 亚洲六月丁香色婷婷综合久久| 一区在线观看| 欲色影视综合吧| 激情综合色丁香一区二区| 国产一区二区精品久久| 国产欧美日韩在线观看| 国产精品二区影院| 国产精品99一区二区| 欧美日韩在线综合| 欧美日韩一区三区| 欧美视频一区在线观看| 欧美三级视频在线观看| 欧美日韩精品在线| 欧美视频中文字幕在线| 欧美性猛交xxxx乱大交蜜桃 | 久久久九九九九| 欧美在线你懂的| 久久久久久久久久久久久9999| 欧美一区久久| 久久婷婷av| 男人插女人欧美| 欧美另类女人| 国产精品久久久久毛片软件| 国产九色精品成人porny| 国产欧美日韩一级| 精品va天堂亚洲国产| 亚洲激情专区| 亚洲性感激情| 亚洲直播在线一区| 久久精品五月婷婷| 欧美 日韩 国产 一区| 91久久精品国产91性色tv| 亚洲免费av观看| 午夜亚洲一区| 美女视频黄a大片欧美| 欧美日韩精品不卡| 国产欧美精品一区二区三区介绍| 国内久久精品| 99视频热这里只有精品免费| 午夜精品一区二区三区四区| 久久久久国产精品厨房| 亚洲国产女人aaa毛片在线| 夜夜嗨av色综合久久久综合网| 亚洲永久字幕| 免费在线观看日韩欧美| 国产精品激情| 亚洲大片av| 午夜精品www| 亚洲国产成人久久综合一区| 亚洲午夜久久久久久尤物| 久久精品一区二区三区不卡牛牛| 欧美黄色影院| 国产综合色在线视频区| 99热精品在线观看| 久久久美女艺术照精彩视频福利播放| 欧美激情视频一区二区三区不卡| 亚洲最新在线视频| 美女免费视频一区| 国产欧美日韩在线视频| 亚洲看片一区| 麻豆精品在线视频| 亚洲专区免费| 欧美日韩国产一级片| 红桃视频成人| 香港久久久电影| 亚洲精选在线| 欧美国产精品专区| 在线高清一区| 久久天堂精品| 亚洲欧美一区在线| 国产精品美女在线|