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

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>
            黄色精品一二区| 国产精品毛片a∨一区二区三区| 国产精品一区二区男女羞羞无遮挡| 一本色道**综合亚洲精品蜜桃冫 | 在线观看视频日韩| 免费国产自线拍一欧美视频| 久久野战av| 99re6这里只有精品视频在线观看| 亚洲激情av在线| 欧美激情在线观看| 亚洲性感激情| 亚洲自拍电影| 在线观看亚洲视频| 亚洲精品护士| 国产精品久久一级| 久久精品99无色码中文字幕| 久久久最新网址| 亚洲最新色图| 性做久久久久久久免费看| 在线观看av一区| 亚洲精品一区二区三区蜜桃久 | 久久精品国产精品| 91久久在线播放| 亚洲视频高清| 在线播放中文字幕一区| 亚洲美女毛片| 狠狠色丁香婷综合久久| 亚洲理伦电影| 一区二区在线不卡| 日韩午夜在线| 在线激情影院一区| 亚洲一区一卡| 最新日韩av| 欧美亚洲系列| 亚洲一区久久久| 久久中文字幕一区二区三区| 亚洲一级免费视频| 免费观看日韩av| 欧美一区二区在线看| 欧美国产国产综合| 久久婷婷丁香| 国产精品天天摸av网| 亚洲国产日韩综合一区| 国产真实乱偷精品视频免| 亚洲精品久久久一区二区三区| 国产亚洲综合精品| 亚洲视屏一区| 亚洲一区二区三区视频播放| 久久琪琪电影院| 久久aⅴ乱码一区二区三区| 欧美精品色网| 亚洲国产精品久久久久秋霞影院| 国产日韩一区二区三区在线播放| 日韩亚洲精品视频| 亚洲精品看片| 欧美 日韩 国产精品免费观看| 久久久xxx| 国产午夜精品全部视频播放 | 欧美一区二区精美| 欧美日韩精品一区二区天天拍小说 | 欧美激情视频在线播放| 蜜臀av性久久久久蜜臀aⅴ四虎 | 久久亚洲精品一区二区| 久久精彩视频| 国产日韩在线播放| 亚洲免费在线视频| 欧美亚洲一区| 国产精品午夜久久| 亚洲欧美日韩精品| 欧美一区二区三区在线免费观看| 国产精品国产三级国产专播精品人 | 亚洲欧美日韩在线一区| 午夜精品影院在线观看| 国产精品久久久久久久9999| a4yy欧美一区二区三区| 亚洲色图自拍| 国产精品xxxxx| 亚洲一区二区视频在线| 午夜精品久久| 国产欧美日韩综合| 久久精品视频va| 免费亚洲婷婷| 亚洲精品视频在线播放| 欧美日韩视频在线一区二区| 一区二区国产在线观看| 亚洲男人天堂2024| 国产精品视频第一区| 欧美在线观看一区二区三区| 美女精品在线| 一本色道久久88综合亚洲精品ⅰ| 欧美日韩一区二区精品| 亚洲综合999| 毛片一区二区三区| 日韩一级在线观看| 国产伦精品一区二区三区| 久久99在线观看| 亚洲精品1区2区| 午夜在线成人av| 在线欧美福利| 国产精品va在线播放我和闺蜜| 亚洲一区二区久久| 免费亚洲婷婷| 亚洲午夜精品17c| 伊人蜜桃色噜噜激情综合| 欧美成人一区二区三区在线观看 | 欧美在线视频播放| 亚洲丶国产丶欧美一区二区三区 | 国产精品一区二区在线观看| 久久精品国产亚洲5555| 亚洲精品中文字幕在线| 久久精品国亚洲| 99精品热视频| 尤物99国产成人精品视频| 欧美性久久久| 猛干欧美女孩| 欧美一级午夜免费电影| 日韩午夜高潮| 欧美aaaaaaaa牛牛影院| 欧美呦呦网站| 亚洲天堂第二页| 91久久精品美女高潮| 国产亚洲一区二区三区在线播放| 欧美巨乳波霸| 免费观看亚洲视频大全| 亚洲欧美文学| 亚洲视频在线观看| 亚洲日本电影| 亚洲国产高清高潮精品美女| 另类尿喷潮videofree| 欧美亚洲一区三区| 亚洲一区在线播放| 一区二区三区日韩在线观看 | 国产欧美短视频| 欧美三级精品| 欧美日本亚洲| 欧美激情在线观看| 欧美成人激情视频| 另类尿喷潮videofree | 午夜免费电影一区在线观看| 亚洲精品视频在线观看免费| 欧美国产一区二区三区激情无套| 久久蜜桃香蕉精品一区二区三区| 亚洲欧美视频在线观看| 亚洲综合色婷婷| 午夜精品视频一区| 亚洲欧美久久| 午夜在线播放视频欧美| 香蕉亚洲视频| 久久精品国产99国产精品| 欧美一区二区三区免费观看| 午夜精品美女久久久久av福利| 亚洲一区综合| 先锋影音网一区二区| 香蕉国产精品偷在线观看不卡| 欧美一级片久久久久久久| 午夜精品久久久久久久久| 午夜一级久久| 久久综合伊人77777尤物| 久久一区中文字幕| 欧美va亚洲va香蕉在线| 亚洲国产91精品在线观看| 亚洲日本国产| 亚洲综合色丁香婷婷六月图片| 亚洲与欧洲av电影| 久久国产精品久久久| 久热精品在线视频| 欧美久久久久久久| 国产精品毛片高清在线完整版| 国产伦精品一区二区三区| 国产色综合网| 亚洲大胆视频| 一区二区三区四区五区精品视频| 亚洲在线中文字幕| 久久漫画官网| 亚洲精品日韩激情在线电影| 亚洲一区国产精品| 麻豆成人精品| 国产精品高潮呻吟久久| 黄色欧美日韩| 一本久道久久综合中文字幕| 欧美一区国产二区| 欧美成人一区二区三区| 一区二区三区精品国产| 久久久国产一区二区| 欧美日韩国产在线看| 国产一区二区三区在线观看精品| 亚洲国产精品成人综合| 亚洲欧美视频一区二区三区| 免费观看成人网| 亚洲一二三区在线| 欧美jizz19hd性欧美| 国产欧美精品日韩区二区麻豆天美| 亚洲高清激情| 久久精品国产综合| aaa亚洲精品一二三区| 久久人人爽爽爽人久久久| 国产精品热久久久久夜色精品三区| 亚洲国产精选| 狼人社综合社区| 亚洲免费婷婷|