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

OGre實際應用程序[二]

Posted on 2008-09-06 16:51 美洲豹 閱讀(635) 評論(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腳本讀出它的配置信息

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>
            欧美激情va永久在线播放| 精品1区2区3区4区| 一区二区三区蜜桃网| 黄色精品一区二区| 国产一区二区三区久久| 男人的天堂亚洲| 免费观看亚洲视频大全| 欧美国产日韩一区二区| 亚洲欧美久久久| 午夜精品久久久久久久男人的天堂| 中文国产成人精品久久一| 美女精品在线观看| 一本一本久久a久久精品综合麻豆| 亚洲国产婷婷综合在线精品 | 久久婷婷麻豆| 欧美成人小视频| 午夜精品一区二区三区在线| 久久精品主播| 欧美中文在线视频| av成人手机在线| 午夜视频一区在线观看| 老司机精品导航| 欧美在线网址| 亚洲视频欧洲视频| 亚洲黄色免费电影| 亚洲丶国产丶欧美一区二区三区| 欧美一区二区三区视频| 欧美成人精品在线播放| 制服诱惑一区二区| 美国成人毛片| 久久性色av| 国产精品高潮呻吟久久av黑人| 国产主播一区二区三区四区| 一区二区三区国产精华| 免费成人小视频| 久久网站免费| 亚洲精选久久| 最新国产成人av网站网址麻豆| 欧美+日本+国产+在线a∨观看| 一本色道久久综合亚洲精品按摩| 久久一本综合频道| 免费人成网站在线观看欧美高清 | 一区二区高清视频在线观看| 久久久青草婷婷精品综合日韩| 国产精品久久久久永久免费观看| 欧美日韩一区二区三| 亚洲精品乱码久久久久久| 亚洲色图制服丝袜| 欧美一级黄色录像| 欧美与黑人午夜性猛交久久久| 国产一级一区二区| 久久精品国产亚洲高清剧情介绍 | 亚洲欧美在线观看| 久久亚洲美女| 国产麻豆一精品一av一免费| 国产精品高潮在线| 国产精品成人免费| 亚洲理论在线| 一区二区三区在线视频播放| 在线视频日韩| 亚洲精品一区久久久久久| 一级成人国产| 亚洲永久网站| 久久国产精品色婷婷| 麻豆精品视频在线观看| 欧美日韩mp4| 亚洲人成在线免费观看| 亚洲午夜高清视频| 亚洲乱码久久| 久久av二区| 国产一区二区久久久| 亚洲区一区二区三区| 老司机久久99久久精品播放免费| 欧美在线网址| 欧美日韩在线视频一区| 国产精品影音先锋| 影音先锋中文字幕一区| 久久一区二区三区av| 久久成人18免费观看| 极品中文字幕一区| 欧美激情视频一区二区三区在线播放 | 亚洲黄一区二区三区| 欧美激情精品久久久久久黑人| 欧美成人伊人久久综合网| 国产精品一区二区久久| 91久久精品一区二区别| 国产亚洲电影| 麻豆91精品| 久久香蕉精品| 国产精品福利在线| 亚洲欧美在线一区二区| 亚洲第一福利社区| 欧美激情成人在线| 极品中文字幕一区| 亚洲人成网站色ww在线| 国产精品入口日韩视频大尺度| 亚洲精品一区在线观看| 亚洲日本免费电影| 国产视频欧美| 性欧美大战久久久久久久免费观看| 欧美成人r级一区二区三区| 欧美jizzhd精品欧美巨大免费| 亚洲一区日韩在线| 亚洲免费观看在线视频| 国产视频在线观看一区| 性一交一乱一区二区洋洋av| 亚洲精品一区在线| 黄色日韩在线| 亚洲视频axxx| 亚洲全部视频| 久久精品91| 伊人影院久久| 麻豆成人91精品二区三区| 欧美区一区二区三区| 久热精品视频在线免费观看 | 国产一区二区三区四区五区美女 | 亚洲靠逼com| 精品99一区二区| 亚洲综合精品四区| 中文日韩在线视频| 欧美成人伊人久久综合网| 久久综合网络一区二区| 国产欧美日韩激情| 在线综合亚洲欧美在线视频| 亚洲麻豆视频| 欧美mv日韩mv国产网站app| 亚洲国产另类精品专区| 欧美亚洲视频一区二区| 香蕉乱码成人久久天堂爱免费| 欧美日韩视频在线观看一区二区三区| 日韩亚洲精品电影| 久久九九电影| 久久综合九色综合久99| 国产精品尤物| 这里只有精品视频在线| 亚洲一区二区精品在线| 欧美日韩精品免费看| 亚洲欧洲一区二区天堂久久| 欧美视频久久| 日韩视频免费在线| 一区二区久久久久久| 欧美喷水视频| 欧美主播一区二区三区美女 久久精品人 | 经典三级久久| 在线亚洲欧美| 国产精品成人久久久久| 亚洲国产欧美日韩| 亚洲国产精品传媒在线观看 | 久久久久亚洲综合| 久久综合九九| 欧美三区美女| aa级大片欧美| 午夜在线观看欧美| 老司机午夜精品视频在线观看| 久久夜色精品国产欧美乱极品| 在线播放中文一区| 欧美 日韩 国产 一区| 亚洲国产三级网| 亚洲一区二区三区在线观看视频| 先锋影音一区二区三区| 久久免费视频一区| 国产精品久久久久久久久| 亚洲影院免费观看| 久久性色av| 一本色道久久| 国产一区二区精品在线观看| 久久只精品国产| 99国产精品国产精品久久| 在线观看精品| 欧美亚洲尤物久久| 每日更新成人在线视频| 一区二区三区久久精品| 国产亚洲一区二区三区在线播放| 99re6热只有精品免费观看 | 国产欧美日韩视频| 亚洲靠逼com| 91久久精品www人人做人人爽| 亚洲欧美日本国产专区一区| 日韩写真视频在线观看| 国产精品一区二区你懂的| 久久久人成影片一区二区三区观看| 亚洲精品中文字幕女同| av成人免费在线观看| 欧美α欧美αv大片| 嫩草成人www欧美| 国产精品99久久久久久人| 韩国一区二区在线观看| 欧美中文字幕在线| 日韩视频在线一区| 夜夜嗨av一区二区三区中文字幕| 美女脱光内衣内裤视频久久网站| 99亚洲视频| 蜜臀久久99精品久久久久久9| 亚洲永久精品大片| 亚洲欧洲另类| 欧美日韩亚洲视频一区| 久久久久久97三级| 亚洲国产高清在线| 久久久综合网站| 在线精品亚洲|