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

牽著老婆滿街逛

嚴以律己,寬以待人. 三思而后行.
GMail/GTalk: yanglinbo#google.com;
MSN/Email: tx7do#yahoo.com.cn;
QQ: 3 0 3 3 9 6 9 2 0 .

OGRE學習筆記之一

開始學習3D了,很早就想學了,怎奈數學不好,一直畏懼,可是如果不直面它,就永遠的害怕,永遠的逃避,這是在很糟.
于是,我終于開始了我的3D之旅.
在學校時候就看上了OGRE,十幾萬行代碼的圖形引擎,它給我的感覺很好.不過奇怪的是國內似乎根本沒有OGRE的社區,曾經是在91看到的,可是那邊早已經荒廢了.

我使用的是OGRE的 1.2.4,VC是VC.net 2003,也就是VC7.1.
我是下載源代碼,自行編譯的,編譯需要兩個包,我選擇了以下兩個包:
OgreDependencies_VC71_1.2.0p2.zip
ogre-win32-v1-2-4.zip
第二個包是引擎的源碼包,解壓縮之.
第一個包是引擎編譯的依存庫,里面有兩個文件夾,Samples和Dependencies.Samples是依存庫的DLL文件,而Dependencies是依存庫的頭文件和Lib文件.這兩個文件夾只要覆蓋掉源碼相同的文件夾就可以了.
接下來就開始進行編譯,編譯的過程是緩慢的,總共得耗費半個小時左右.我還把Debug和Release都編譯出來了,那真是痛苦的過程啊...

引擎我放到了G:\OGRE\OGRE1_2_4,編譯完了引擎的開發包之后,下面開始設置VC環境了.
Tool->Options->Projects->VC++ Directories.
設置頭文件包含路徑:
1.在Show Directories for選擇Include Files;
2.加入:G:\OGRE\OGRE1_2_4\Dependencies\include,
G:\OGRE\OGRE1_2_4\OgreMain\include
設置Lib庫包含路徑:
1.在Show Directories for選擇Librarys Files;
2.加入G:\OGRE\OGRE1_2_4\OgreMain\lib\Release,
G:\OGRE\OGRE1_2_4\OgreMain\lib\Debug
G:\OGRE\OGRE1_2_4\Dependencies\lib\Release
G:\OGRE\OGRE1_2_4\Dependencies\lib\Debug

這個時候就可以開始我們的第一個OGRE了.
其實,OGRE的引擎源碼包里面已經自帶了很多的例子,不過看起來相當之難看,反正我覺得很難讀,于是,我自己按照自己較為熟悉的風格修改了Demo,弄了一個名為Empty的項目,里面什么都沒有做,就是一個空白的窗口(準確說是純黑的窗口).

對于我們這些初學者來說,必須得弄清楚Samples\Common\include下面的三個頭文件:
ExampleApplication.h
ExampleFrameListener.h
ExampleLoadingBar.h
其實這三個文件和MFC有點形似:
ExampleApplication.h里面的類就是應用程序類,它是一個基類;
ExampleFrameListener.h里面的類算是一個窗口類,鼠標,鍵盤的檢測都在這里,還有渲染窗口的刷新等;
ExampleLoadingBar.h其實有沒有也沒什么關系,粗略看了看,它只是一個加載條的類.

Empty這個項目有以下文件:
/main.cpp
/Empty.h
/Empty.cpp
/Common/ExampleApplication.h
/Common/ExampleApplication.cpp
/Common/ExampleFrameListener.h
/Common/ExampleFrameListener.cpp
/Common/ExampleLoadingBar.h
/Common/ExampleLoadingBar.cpp
我把上面的三個公用頭文件拆分出了一個cpp,把實現都丟到了cpp里面,之前它們都是直接寫在h里面的,對于學習來說,極其難看,就拆開了.

我先把三個項目文件內容列出來:
main.cpp
#include?<windows.h>
#include?
"Empty.h"

//?=============================================================================
//?WinMain
//?-----------------------------------------------------------------------------
///
//?=============================================================================
INT?WINAPI?WinMain(?HINSTANCE?hInst,?HINSTANCE,?LPSTR?strCmdLine,?INT?)
{

????
//?創建應用程序對象
????EmptyApplication?app;

????
//?進入應用程序循環
????try?{
????????app.go();
????}
?catch(?Ogre::Exception&?e?)?{
????????MessageBox(?NULL,?e.getFullDescription().c_str(),?
"應用程序出現異常!",?MB_OK?|?MB_ICONERROR?|?MB_TASKMODAL?);
????}


????
return?0;
}

Empty.h
#include?"ExampleApplication.h"

class?EmptyApplication?:?public?ExampleApplication
{
public:
????EmptyApplication();
????
~EmptyApplication();

protected:
????
void?createScene(void);
}
;
Empty.cpp
#include?<windows.h>
#include?
"Empty.h"

//?=============================================================================
//?EmptyApplication
//?-----------------------------------------------------------------------------
///
//?=============================================================================
EmptyApplication::EmptyApplication()
{
}
??
//?=============================================================================
//?~EmptyApplication
//?-----------------------------------------------------------------------------
///
//?=============================================================================
EmptyApplication::~EmptyApplication()
{
}
??
//?=============================================================================
//?createScene
//?-----------------------------------------------------------------------------
///
//?=============================================================================
void?EmptyApplication::createScene(void)
{
}
可以看到,根本什么都沒有做,呵呵.

當你第一次運行OGRE的Demo時,你可以看到,每次運行的時候都會彈出一個配置對話框出來,一兩次還沒什么,多了就很讓人厭煩,恨不得馬上把它踢掉,
OK,我終于把它給踢掉了!不過在此之前,你必須確定你程序運行的當前目錄下有ogre.cfg這個文件,它就是那個配置對話框所配置的東西.內容大致如下:

Render?System=OpenGL?Rendering?Subsystem

[Direct3D9?Rendering?Subsystem]
Allow?NVPerfHUD
=No
Anti?aliasing
=None
Floating-point?mode
=Fastest
Full?Screen
=No
Rendering?Device
=Intel(R)?82915G/GV/910GL?Express?Chipset?Family
VSync
=No
Video?Mode
=800?x?600?@?32-bit?colour

[OpenGL?Rendering?Subsystem]
Colour?Depth
=32
Display?Frequency
=N/A
FSAA
=0
Full?Screen
=No
RTT?Preferred?Mode
=FBO
VSync
=No
Video?Mode
=800?x?600
如果沒有這個文件,程序是會掛掉D.
啊,現在我要去掉它,是的,現在我要把這個該死的對話框去掉,打開ExampleApplication.h吧,找到configure()這個函數,你將看到的函數應該是這個樣子的.
????/**?Configures?the?application?-?returns?false?if?the?user?chooses?to?abandon?configuration.?*/
????
virtual?bool?configure(void)
????
{
????????
//?Show?the?configuration?dialog?and?initialise?the?system
????????
//?You?can?skip?this?and?use?root.restoreConfig()?to?load?configuration
????????
//?settings?if?you?were?sure?there?are?valid?ones?saved?in?ogre.cfg
????????if(mRoot->showConfigDialog())
????????
{
????????????
//?If?returned?true,?user?clicked?OK?so?initialise
????????????
//?Here?we?choose?to?let?the?system?create?a?default?rendering?window?by?passing?'true'
????????????mWindow?=?mRoot->initialise(true);
????????????
return?true;
????????}

????????
else
????????
{
????????????
return?false;
????????}

????}
看到了第二到第四行的注釋沒有?如果你英語還好,就看懂了,知道怎么做了,如果看不懂,就解釋一下,大致意思是:顯示配置對話框,并初始化系統.你可以忽略掉此對話框,使用 root.restoreConfig() 加載配置.不過你這么做之前必須確定你設置并且保存了一個ogre.cfg文件.
明白了吧,下面給出我修改后的代碼:
bool?ExampleApplication::configure()
{
????
//?顯示配置對話框,并初始化系統.
????
//?你可以忽略掉此對話框,使用?root.restoreConfig()?加載配置.
????
//?不過你這么做之前必須確定你設置并且保存了一個ogre.cfg文件.
????
//if(mRoot->showConfigDialog())
????if(mRoot->restoreConfig())
????
{
????????
//?If?returned?true,?user?clicked?OK?so?initialise
????????
//?Here?we?choose?to?let?the?system?create?a?default?rendering?window?by?passing?'true'
????????mWindow?=?mRoot->initialise(true);
????????
return?true;
????}

????
else
????
{
????????
return?false;
????}

}
非常之簡單,就是把mRoot->showConfigDialog()修改成了mRoot->restoreConfig(),直接加載配置文件.
啊,你應該已經發現了我的修改以后的代碼和之前的代碼不一樣,嗯,是的.因為這個是在cpp里面的實現.

翻了一下<Pro OGRE 3D Programming>其實還有更好的代碼,如下:
bool?ExampleApplication::configure()
{
????
//?顯示配置對話框,并初始化系統.
????
//?你可以忽略掉此對話框,使用?root.restoreConfig()?加載配置.
????
//?不過你這么做之前必須確定你設置并且保存了一個ogre.cfg文件.
????
//if(mRoot->showConfigDialog())
????if(mRoot->restoreConfig())
????
{
????????
//?If?returned?true,?user?clicked?OK?so?initialise
????????
//?Here?we?choose?to?let?the?system?create?a?default?rendering?window?by?passing?'true'
????????mWindow?=?mRoot->initialise(true,"渲染窗口");
????????
return?true;
????}

????
else
????
{
????????
if?(mRoot->showConfigDialog()?)
????????
{
????????????mWindow?
=?mRoot->initialise(true);
????????????
return?true;
????????}

????????
else
????????
{
????????????
return?false;
????????}

????}

}
如果有ogre.cfg,就讀取,如果沒有的話就新建一個.

OGRE修改窗口標題
OGRE默認的窗口標題為"OGRE Render Window",在哪修改它哪?遠在天邊,近在眼前.就在上面代碼中的一個函數:mRoot->initialise();
看到了吧,
mWindow = mRoot->initialise(true,"渲染窗口");
這樣,窗口標題就變成了 "渲染窗口"了.

posted on 2007-01-23 17:07 楊粼波 閱讀(2883) 評論(3)  編輯 收藏 引用

評論

# re: OGRE學習筆記之一 2007-01-31 09:37 gameogre

你有Pro OGRE 3D Programming的電子版嗎?可否共享一下,謝謝。
gameogre@gmail.com  回復  更多評論   

# re: OGRE學習筆記之一 2007-02-02 21:13 wstorm

能給我一份嗎? wstorm910@163.com  回復  更多評論   

# re: OGRE學習筆記之一[未登錄] 2007-02-03 14:35 大橘子

只是第四章,是Apress放出來的試讀版,可以去其官方網站查詢到.

完整版我自己還在找哪,找到了自然會給各位一份的.  回復  更多評論   

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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ⅴ99久久黑人专区| 欧美电影免费观看大全| 亚洲电影在线看| 99精品视频免费观看视频| 亚洲视频欧洲视频| 欧美一区二区啪啪| 久久综合久久综合久久综合| 欧美xx视频| 欧美sm极限捆绑bd| 欧美成年人视频网站欧美| 亚洲国产欧美在线| 亚洲欧美久久久| 久久亚洲私人国产精品va媚药| 久久精品亚洲| 欧美日韩国产精品成人| 国产色综合网| 亚洲国产经典视频| 午夜精品亚洲| 亚洲国产精品www| 亚洲一区二区三区高清| 老司机午夜免费精品视频| 欧美日韩精品免费观看| 合欧美一区二区三区| 亚洲一二三区精品| 欧美www在线| 亚洲欧美日本伦理| 欧美日韩一区二区三区免费| 精品1区2区3区4区| 午夜在线观看免费一区| 亚洲国产欧美在线| 久久五月天婷婷| 国产午夜精品麻豆| 亚洲综合三区| 亚洲三级免费电影| 久久综合九色欧美综合狠狠| 欧美在线观看一区二区三区| 国产亚洲欧美一区| 99精品免费| 免费在线成人| 久久超碰97人人做人人爱| 国产精品黄页免费高清在线观看| 亚洲精品乱码久久久久| 麻豆精品在线播放| 久久精品成人一区二区三区| 国产伦精品一区二区三区四区免费 | 在线电影院国产精品| 午夜精品久久久久久久久| 亚洲精品一区二| 欧美大片免费观看在线观看网站推荐| 韩日精品视频一区| 久久免费精品日本久久中文字幕| 亚洲欧美日韩精品一区二区| 欧美日韩在线一二三| 一本一本久久a久久精品综合麻豆 一本一本久久a久久精品牛牛影视 | 欧美精品国产精品| 亚洲清纯自拍| 亚洲国产成人精品视频| 麻豆乱码国产一区二区三区| 在线亚洲一区观看| 欧美日韩国产精品一卡| 一区二区不卡在线视频 午夜欧美不卡在 | 亚洲视频在线观看网站| 欧美日韩一二三四五区| 在线综合欧美| 中国成人亚色综合网站| 国产精品视频免费| 欧美一区二区视频免费观看| 午夜精品视频在线观看| 黑人巨大精品欧美一区二区小视频| 久久久999| 久久中文在线| 一本到12不卡视频在线dvd| 99视频精品在线| 国产私拍一区| 欧美电影资源| 欧美日韩中文字幕综合视频| 亚洲欧美日韩区| 久久精品视频导航| 夜夜嗨一区二区| 亚洲欧美日韩视频一区| 在线观看日韩www视频免费| 国产热re99久久6国产精品| 欧美亚州一区二区三区| 亚洲欧美视频在线观看视频| 欧美亚洲一区在线| 亚洲肉体裸体xxxx137| 99在线热播精品免费| 国产一区二区你懂的| 欧美黄色免费| 国产精品美女久久久免费 | 最新成人av网站| 亚洲一区二区成人在线观看| 国内揄拍国内精品久久| 亚洲美女中出| 亚洲电影免费观看高清| 亚洲小说欧美另类社区| 亚洲高清不卡一区| 亚洲欧美一区二区三区久久| 91久久国产综合久久| 亚洲午夜精品福利| 亚洲激情综合| 久久精品国产第一区二区三区| 在线亚洲精品| 老司机精品导航| 欧美一区二区性| 欧美日韩精品免费| 国模 一区 二区 三区| 日韩视频一区二区| 亚洲第一视频| 久久电影一区| 欧美亚洲综合另类| 欧美三日本三级少妇三99 | 亚洲尤物视频网| 亚洲免费观看高清在线观看| 欧美在线播放高清精品| 亚洲视频精选| 欧美日韩hd| 91久久久久| 亚洲破处大片| 欧美18av| 欧美大片在线观看| 在线观看欧美日韩| 久久久久久久综合日本| 久久精品国内一区二区三区| 国产精品久久久久久五月尺| 一本色道久久综合亚洲二区三区 | 欧美福利一区二区| 欧美成人综合网站| 亚洲电影免费观看高清| 久久视频精品在线| 美女尤物久久精品| 一区在线电影| 久久综合狠狠综合久久综合88| 浪潮色综合久久天堂| 狠狠色噜噜狠狠色综合久| 性欧美videos另类喷潮| 久久国产精品99国产精| 国产欧美一二三区| 欧美一级电影久久| 久久亚洲私人国产精品va| 国产一区二区三区四区五区美女| 亚洲欧美日韩在线播放| 99re在线精品| 欧美国产视频在线| 亚洲人在线视频| 欧美—级a级欧美特级ar全黄| 欧美激情一区二区三区不卡| 91久久精品国产91久久性色tv| 久久夜色精品一区| 亚洲国产高清高潮精品美女| 99re6这里只有精品| 欧美调教视频| 香蕉久久a毛片| 男男成人高潮片免费网站| 99pao成人国产永久免费视频| 欧美成人一区二区三区片免费| 亚洲美女精品一区| 欧美伊人精品成人久久综合97| 一区二区视频欧美| 欧美日本精品| 久久精品91久久久久久再现| 欧美激情网站在线观看| 亚洲一区国产视频| 国产视频精品免费播放| 久久亚洲国产精品日日av夜夜| 91久久线看在观草草青青| 亚洲综合视频一区| 亚洲二区免费| 国产精品揄拍一区二区| 久久这里只有| 亚洲尤物影院| 最新日韩欧美| 国产精品久久久久久久午夜| 久久se精品一区二区| 亚洲人永久免费| 久久免费视频在线观看| 正在播放欧美一区| 一区二区三区无毛| 国产精品入口日韩视频大尺度| 裸体女人亚洲精品一区| 亚洲午夜在线观看| 亚洲第一毛片| 久久亚洲欧美| 欧美一区二区三区日韩视频| 亚洲精品在线视频| 黄色成人av网| 国产精品综合| 欧美午夜久久| 欧美日韩国产123| 欧美成人资源| 久久嫩草精品久久久精品一| 亚洲在线免费视频| 在线视频一区观看| 99国产精品| 亚洲精品视频在线观看网站|