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

初始化

       正面的這段代碼是在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);
        }

在這里,你不想使用默認(rèn)的對(duì)話(huà)框設(shè)置以及不想用Ogre.cfg,而想用自己的一個(gè)文件來(lái)對(duì)所有的子系統(tǒng)進(jìn)行配置. 因此,你需要手動(dòng)地處理它.不是很大的事,你只需要對(duì)STL熟悉就行了.

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

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

       對(duì)Ogre的資源管理子系統(tǒng)需要注意的是:1.它不會(huì)到子目錄中去尋找,因此,你必須告訴它.2.文件夾的名字是沒(méi)有意義的.這就是說(shuō),如果在不同的文件夾內(nèi),有兩個(gè)文件重名的話(huà),也是不行的.

       在這里,對(duì)于我們資源的加載,首先,我們沒(méi)有導(dǎo)入OgreCore.zip.因?yàn)槟悴恍枰?/span>.它對(duì)Demo是有用的.第二,我們把所有與GUI相關(guān)的內(nèi)容放在了gui.zip這個(gè)文件中.

(對(duì)于CEGUI熟悉的用戶(hù)可能覺(jué)得這樣的配置不好,但是,這樣做的話(huà),將來(lái)你在用CEGUI的配置的時(shí)候可以省掉很多麻煩).

配置

       這個(gè)章節(jié)將寫(xiě)一些用于讀取config.ini的代碼.

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

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

typedef NameValuePairList VideoOptions;

為了便于參考,正面是一個(gè)對(duì)于video section的配置文件:

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

這里選了一個(gè)默認(rèn)的D3d渲染系統(tǒng),你也可以在GUI的配置選項(xiàng)中,getAvailableRenderers()來(lái)得到所有的可用的渲染API,然后選擇使用哪一個(gè). 一旦你有了渲染系統(tǒng),你就可以創(chuàng)建主要的Ogre window.

getOptions()是一個(gè)簡(jiǎn)單的函數(shù),其使用Win32SHGetFolderPath() APILinux中的$HOME變量和Win32 GetPrivateProfileSection()來(lái)讀配置文件的sections.這些讀出的內(nèi)容放在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環(huán)境中需要添加頭文件"shlobj.h".

CONFIG_OPTS_DIR 是你的配置文件夾的位置. CONFIG_FILE_NAME 在我們這個(gè)例子中是 "config.ini"; 在后面會(huì)看到,如果用戶(hù)沒(méi)有config.ini,我們會(huì)創(chuàng)建一個(gè)合適的默認(rèn)給它.現(xiàn)在我們用Lua腳本讀出它的配置信息

只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   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>
            午夜日韩在线| 欧美高清视频在线| 国产综合香蕉五月婷在线| 欧美久久久久久久久久| 欧美国产国产综合| 老司机免费视频久久| 久久三级福利| 久久伊人一区二区| 欧美精品久久久久久久免费观看| 久久人人97超碰精品888| 久久久久久久波多野高潮日日| 久久久夜精品| 欧美激情视频给我| 国产精品午夜国产小视频| 国产亚洲成av人在线观看导航 | 999在线观看精品免费不卡网站| 亚洲精品免费在线| 亚洲国产精品ⅴa在线观看| av成人手机在线| 欧美一区二区在线观看| 巨胸喷奶水www久久久免费动漫| 美乳少妇欧美精品| 亚洲一区在线免费| 欧美资源在线观看| 午夜久久久久久久久久一区二区| 亚洲一区二区三区在线看 | 久久精品欧洲| 亚洲欧美日韩一区二区在线 | 日韩视频不卡中文| 亚洲欧美福利一区二区| 久久精品欧美| 日韩视频在线免费观看| 久久精品三级| 欧美喷水视频| 亚洲第一偷拍| 国产精品久久久一区二区| 国产精品一区二区欧美| 亚洲人成在线观看| 久久久免费精品| 亚洲精品视频在线观看免费| 久久国产福利| 国产九区一区在线| 亚洲视频在线一区观看| 亚洲欧美一区二区三区久久| 欧美成人资源| 欧美一级二级三级蜜桃| 欧美日韩一区二区精品| 在线精品视频一区二区| 亚洲欧美日韩国产精品| 亚洲第一搞黄网站| 久久se精品一区精品二区| 欧美日韩国产成人在线免费| 欧美国产日韩二区| 国内精品美女在线观看| 亚洲私人影院| 亚洲激情不卡| 女女同性精品视频| 国产在线不卡| 久久久亚洲人| 久久久xxx| 久久福利一区| 一区在线播放| 狂野欧美一区| 久久久久国产精品一区| 国产自产高清不卡| 久久嫩草精品久久久精品| 国产色产综合产在线视频| 国产精品高潮呻吟久久av无限| 亚洲看片网站| 亚洲精品国产欧美| 欧美激情一区二区三区四区| 亚洲精品久久在线| 亚洲国产一区二区三区青草影视| 欧美成人黑人xx视频免费观看| 亚洲国产精品成人综合| 米奇777在线欧美播放| 久久久久欧美| 亚洲成人资源网| 免费在线欧美黄色| 米奇777在线欧美播放| 亚洲乱码国产乱码精品精天堂 | 午夜亚洲性色福利视频| 国产精品视频久久一区| 欧美自拍偷拍午夜视频| 免费不卡在线观看| 牛牛国产精品| 亚洲图片你懂的| 午夜在线视频观看日韩17c| 国产一区二区| 欧美华人在线视频| 欧美专区福利在线| 久久精品国产96久久久香蕉| 一区二区三区欧美激情| 亚洲每日在线| 国产主播一区二区三区| 香蕉乱码成人久久天堂爱免费 | 久久网站热最新地址| 亚洲激情成人网| 一区二区av在线| 国内精品久久久久久久影视麻豆 | 久久成人精品电影| 日韩亚洲视频在线| 亚洲欧美日韩在线不卡| 亚洲国产精品黑人久久久| 在线中文字幕不卡| 久久高清国产| 日韩一级在线观看| 性感少妇一区| 99这里只有久久精品视频| 香蕉久久夜色精品国产| 日韩视频一区二区| 欧美在线国产| 亚洲一级黄色| 欧美日韩美女一区二区| 久久av一区二区三区| 久久深夜福利免费观看| 性欧美18~19sex高清播放| 另类天堂av| 久久久91精品| 国产精品麻豆欧美日韩ww| 欧美激情亚洲精品| 国产午夜精品在线| 99精品免费视频| 亚洲精品久久久久久一区二区| 欧美中在线观看| 亚洲欧美激情视频| 亚洲午夜在线观看| 欧美xx69| 夜夜精品视频| 亚洲福利小视频| 久久久精品动漫| 欧美伦理一区二区| 亚洲国产日韩欧美在线99| 国产精品网站视频| 欧美激情精品久久久久久蜜臀| 麻豆国产精品va在线观看不卡| 久久精品成人一区二区三区蜜臀| 欧美日韩国产一区二区三区地区| 欧美日韩国产限制| 亚洲图片激情小说| 欧美日本高清视频| 亚洲经典在线| 亚洲国产欧美精品| 另类春色校园亚洲| 欧美1区2区3区| 一区二区在线观看av| 久久成人精品视频| 久久综合久色欧美综合狠狠| 国产一区av在线| 欧美在线观看网址综合| 裸体丰满少妇做受久久99精品| 国外成人性视频| 久久青草福利网站| 亚洲日本在线视频观看| 亚洲一级片在线看| 国产亚洲精品一区二区| 久久精品国产成人| 欧美激情在线免费观看| 这里只有精品视频在线| 亚洲欧美另类在线| 久久精品国产91精品亚洲| 黄色成人小视频| 欧美黑人多人双交| 在线一区二区三区四区| 欧美亚洲系列| 国产亚洲成av人在线观看导航| 久久久久欧美| 91久久久亚洲精品| 欧美日本不卡高清| 99re这里只有精品6| 欧美日韩喷水| 午夜久久影院| 亚洲国产精品一区在线观看不卡 | 久久免费高清视频| 亚洲免费av片| 欧美在线日韩精品| 亚洲国产高清一区二区三区| 欧美日韩国产一区二区| 香蕉乱码成人久久天堂爱免费| 免费观看成人www动漫视频| 亚洲久久一区二区| 国产欧美欧美| 蜜臀av一级做a爰片久久| 亚洲午夜精品一区二区| 麻豆精品在线视频| 亚洲自拍偷拍网址| 亚洲图片欧美日产| 亚洲欧洲另类国产综合| 欧美成黄导航| 欧美乱在线观看| 亚洲精品久久视频| 夜夜嗨av一区二区三区| 欧美午夜电影网| 亚洲免费在线观看视频| 亚洲色图在线视频| 在线综合亚洲欧美在线视频| 欧美一二三区精品| 91久久精品国产91久久性色| 怡红院精品视频| 快射av在线播放一区|