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

教父的告白
一切都是紙老虎
posts - 82,  comments - 7,  trackbacks - 0

簡介:本教程基于Ogre Wiki上的Basic Tutorial系列,并依據筆者使用的vs2005+sp1+OgreSDK1.4.3開發環境簡化整理而來,其中穿插著筆者自己的理解。這是教程的第一部分,也是我的學習筆記。

正文:凡是翻譯過幾篇技術類文章的人都深知從頭至尾忠實重現作者的原意是一件多么令人頭疼的事情。當我從諸多曾經許諾要翻譯的文章中爬出來的時候,我決定這次不做那樣一個“傻子”,重寫那些文章要比翻譯它們快樂的多。

在開始前,我希望統一我們的開發環境——VS2005+OgreSDK1.4.3。有兩點需要注意:
一、請確認你的VS2005安裝了sp1補丁包,這一點非常重要,否則你可以正確的編譯Ogre程序,但你死活運行不起它們來。
二、請確認你的Ogre是合適的版本,也就是OGRE 1.4.3 SDK for Visual C++ .Net 2005(8.0)SP1,你可以從http://www.ogre3d.org/index.php?option=com_content&task=view&id=411&Itemid=131免費獲得。


創建你的第一個Ogre應用程序

現在,對表之后,行動開始。哦,等一下,忘了給你們發槍了。請到http://ogreconglo.sourceforge.net/phpBB2/viewtopic.php?p=4領取槍械。是Ogre產的Ogre Application Wizard,不要著急,人人都有。把它解壓到合適的位置,我推薦的位置當然是OgreSDK目錄下了,然后運行里面的VC8_Setup.js安裝。兄弟們,準備好了嗎?現在行動真的要開始了。

打開vs2005,新建一個項目,"文件"->"新建"->"項目"->"Visual C++",在"Visual Studio已安裝的模板"選擇"OGRE SDK Application"。設置好工程名和存儲路徑后點"確定"按鈕。

彈出了向導,選項保持默認就好了,點"finish"完成。

是不是個Win32項目的向導一樣簡單?下面按F7編譯一下。

如果沒有操作失誤的話,會得到這樣的結果

------ 已啟動生成: 項目: test1, 配置: Debug Win32 ------
正在編譯...
test1.cpp
正在編譯資源...
正在編譯資源清單...
正在鏈接...
正在嵌入清單...
Copying exe to samples bin directory ...
已復制         
1 個文件。
生成日志保存在“file:
//d:GameDevelop est1 est1objDebugBuildLog.htm”
test1 - 0 個錯誤,0 個警告
========== 生成: 1 已成功, 0 已失敗, 0 最新, 0 已跳過 ==========

運行卻會出現如圖的錯誤,缺少相應的文件,運行不起來。一種解決辦法是把缺少的文件復制過來,但你必須知道需要什么文件,不適合新手。另一種方法是,你注意到“Copying exe to samples bin directory ...”一句了嗎?EXE文件拷貝到哪里去了?拷貝到“\OgreSDK\bin\debug”中去了,找到了嗎?運行試試,成功了吧。

揭開向導的面紗

你可能在想Ogre Application Wizard(之后簡稱OAW)到底做了什么呢?就像當初我使用Win32應用程序向導創建了那個HelloWorld之后想的一樣。其實OAW只做了兩件事,一是創建了幾個源文件,另一個是設置了IDE的參數,這也是最重要的一步。下面我們來手動做一次OAW做的事情,以便加深印象,為了以后的方便又一小部分操作是不同的。

關閉剛才的解決方案,新建一個項目,"文件"->"新建"->"項目"->"Visual C++"->"Win32",在"Visual Studio已安裝的模板"選擇"Win32項目"。設置好工程名和存儲路徑后點"確定"按鈕。(我用的工程名和解決方案名都是test2,路徑名為D:\GameDevelop)

在向導的"應用程序設置"中選擇"Windows應用程序"和"空項目",點擊完成。

除了幾個工程文件,向導沒再多做任何事情。為了這個項目的獨立性與方便性,我們還要復制"\OgreSDK"下的"\bin"和"\media"到"D:\GameDevelop\test2"里,并創建"include"、"src"和"scripts",這樣你在"D:\GameDevelop\test2"下將看到6個文件夾。

然后創建一個"SampleApp.cpp",保存路徑為"D:\GameDevelop\test2\src",內容如下:

#include "ExampleApplication.h"

class TutorialApplication : public ExampleApplication
{
protected:
public:
    TutorialApplication()
    
{
    }


    
~TutorialApplication() 
    
{
    }

protected:
    
void createScene(void)
    
{
    }

}
;

#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
#define WIN32_LEAN_AND_MEAN
#include 
"windows.h"

INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR strCmdLine, INT )
#else
int main(int argc, char **argv)
#endif
{
    
// Create application object
    TutorialApplication app;

    
try {
        app.go();
    }
 catch( Exception& e ) {
#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32 
        MessageBoxA( NULL, e.getFullDescription().c_str(), 
"An exception has occurred!", MB_OK | MB_ICONERROR | MB_TASKMODAL);
#else
        fprintf(stderr, 
"An exception has occurred: %s ",
                e.getFullDescription().c_str());
#endif
    }


    
return 0;
}

保存,按F7編譯一下。

------ 已啟動生成: 項目: test2, 配置: Debug Win32 ------
正在編譯...
SampleApp.cpp
d:gamedevelop est2srcsampleapp.cpp(
1) : fatal error C1083: 無法打開包括文件:“ExampleApplication.h”: No such file or directory
生成日志保存在“file:
//d:GameDevelop est2 est2DebugBuildLog.htm”
test2 - 1 個錯誤,0 個警告
========== 生成: 0 已成功, 1 已失敗, 0 最新, 0 已跳過 ==========

出錯了,找不到"ExampleApplication.h"。其中的"ExampleApplication"又是什么呢?它是Ogre為初學者設計的實例程序類(可能是個程序框架什么的,我是這么理解的),以便你可以快速的開始Ogre編程的學習。"ExampleApplication.h"在"\OgreSDK\samples\include"下。默認情況下,IDE是不會找到這里的。還記得我說過Ogre程序向導做過什么嗎?對了,設置我們的IDE環境。下面我們就來一步步地把IDE設置好。

"項目"->"屬性",打開"test2 屬性頁",展開"配置屬性"。設置:
"調試"->"工作目錄"為"..\bin\Debug",
"C/C++"->"常規"->"附加包含目錄"中添加"..\include"、"$(OGRE_HOME)\include"和"$(OGRE_HOME)\samples\include",
"C/C++"->"代碼生成"->"運行時庫"為"多線程調試 DLL (/MDd)"(這個好像就是默認的),
"鏈接器"->"常規"->"輸出文件"為"..\bin\Debug\$(ProjectName).exe",
"鏈接器"->"常規"->"附加庫目錄"中添加"$(OGRE_HOME)\lib",
"鏈接器"->"輸入"->"附加依賴項"中添加"OgreMain_d.lib"和"OIS_d.lib"(如果是Release版則添加"OgreMain.lib"和"OIS.lib")

設置好了,再編譯一次試試。如果你看懂了以上部分,并且編譯通過的話,我們就可以繼續了,之后的內容將修改前面這個程序來向你展示Ogre的世界。


OGRE是如何工作的

SceneManager、Entity和SceneNode是Ogre的3個基礎模塊。

其中SceneManager是管理者,所有顯示在屏幕上的東西都由SceneManager管理。SceneManager的類型眾多,隨著教程的推進,你會慢慢的了解它。

Entity就是你想要渲染的物體的模型,它們使用mesh(Ogre使用的一種文件格式)描述。在Ogre中你需要注意,物體模型是與它的位置和方向分開的。這就意味著你不能直接把一個物體放在場景里,你必須將Entity和一個SceneNode相關聯,而這個SceneNode包含了位置和方向的信息。

正如前面所說,SceneNode可以和Entity相關聯,關聯的數量是不受限制的。這有什么用處呢?例如,你想制作一個人物在屏幕上行走,同時有一圈神圣的光環繞著他。實現這個的一種方法就是先創建一個SceneNode,然后創建一個人物的Entity并與SceneNode關聯。接著再創建一個光的Entity也與SceneNode關聯。人和光就這么聯系在一起了,簡單吧。

SceneNode不光可以和Entity相關聯,和其他的SceneNode關聯也是允許的。這將有助于你創建結構層次復雜的游戲世界。如果你不太明白,就想想windows中的窗口,子窗口套在父窗口里,層層嵌套就組成了一個程序的界面,而這里組成的是游戲世界的一部分,可能是人、房子,也可能是些別的什么東西。

SceneNode可以有孩子(ChildSceneNode),當然也就有父親(ParentSceneNode)。(典型的樹狀結構嘛)

windows中所有窗口的根都是桌面(Desktop),在Ogre中每一個SceneManager也有這樣一個根(RootSceneNode),它和其他所有的SceneNode關聯著。


一個更加豐富的世界

剛才創建的程序中空蕩蕩的,除了數值和Logo什么也沒有。現在我們添加一些代碼讓這個世界豐富起來。在剛才的代碼中找到TutorialApplication::createScene成員函數,今天后面的代碼都是添加在這個函數中的。

為了能看清楚我們將要做的事情,首先要設置場景的光線。

 mSceneMgr->setAmbientLight(ColourValue(1,1,1));

然后創建一個物體。

Entity *ent1 = mSceneMgr->createEntity("Robot","robot.mesh");

對了,還要有與之關聯的SceneNode。

SceneNode *node1 = mSceneMgr->getRootSceneNode()->createChildSceneNode("RobotNode");

最后,把它們關聯在一起。

node1->attachObject(ent1);

好了,就是它了!編譯運行你的程序,你會看到一個機器人站在屏幕上。如果你想了解這幾個函數的具體用法請查看"OGRE API Reference",你可以在開始菜單中找到,作用相當于OGRE的MSDN。


坐標和向量

在繼續深入之前,我們需要討論一下屏幕坐標和Ogre向量對象。和許多圖形引擎一樣,Ogre使用x和z軸表示水平面,y軸作垂直軸。現在看著你的顯示器,x軸是從你顯示器的左邊到右邊,向右為x的正方向。y軸是從你顯示器的底部到頂部,向上為y的正方向。z軸是從你的顯示器屏幕內部向外延伸,向外為z的正方向。如圖:

我們的機器人為什么是朝向x軸正方向的?這是mesh自身的屬性,取決于它是如何設計的。Ogre不對你如何確定你模型的方向作任何假設。你所加載的每一個mesh都有它自己的開始方向。

Ogre使用向量(Vector)類而不是點(Point)類來描述位置和方向。向量的定義分2個向量(Vector2)、3個向量(Vector3)和4個向量(Vector4),其中Vector3最常用。如果你不熟悉向量,我建議你在開始用Ogre做任何事前先復習一下(向量),這對你將來復雜的編程會很有幫助。

下面我們再添加一個物體。

Entity *ent2 = mSceneMgr->createEntity("Robot2","robot.mesh");
SceneNode 
*node2 = mSceneMgr->getRootSceneNode()->createChildSceneNode("RobotNode2",Vector3(50,0,0));
node2
->attachObject(ent2);
跟剛才的代碼很像,只是多了幾個參數。我們為node2指定了坐標Vector3(50,0,0)。編譯運行,你會看到有兩個機器人排排站,哈哈。

簡介:Basic Tutorial 1最后的1/3是大段的理論,是使用Ogre開發的必備知識,但恰恰是網絡上諸多譯本所不涉及的范圍。在這里我將使用最簡練的語言向你介紹它們,當然我會砍掉部分內容,但那都是無關緊要的。本教程基于Ogre Wiki上的Basic Tutorial系列,并依據筆者使用的vs2005+sp1+OgreSDK1.4.3開發環境簡化整理而來,其中穿插著筆者自己的理解。這是教程的第一部分,也是我的學習筆記。


正文:

The Ogre Environment

本文提到的大部分文件(.DLL/.CFG)都可以在OgreSDK的"\bin\debug"或"\bin\release"文件夾下找到。

DLLs and Plugins

首先我來解釋一下Ogre library是如何工作的。

在Ogre中存在著各式各樣的共享庫,它們被分到了不同的組里。其中第一組就是Ogre庫本身以及它所依賴的庫。Ogre庫完全保存在OgreMain.dll中。這個dll又需要像cg.dll之類的其他的庫。Ogre程序無一例外地需要這些DLL文件。

第二組是插件。Ogre將許多功能放在了插件里面,因此可以根據你程序的需要添加或刪除它們。Ogre中的基礎插件都使用"Plugin_"前綴。如果你的程序需要,你也可以自己創建新的插件。Ogre的渲染系統(OpenGL, DirectX等等)同樣使用了插件技術。這些插件以"RenderSystem_"為名字的前綴。你可以為你的程序添加或刪除渲染系統,這非常的有用。例如,你想在一個非標準的平臺上使用Ogre,不能用OpenGL了,也不能用DirectX了,你就需要自己寫一個RenderSystem插件。

第三組就是第3方的共享庫和輔助庫。Ogre本身只是一個圖像渲染引擎,它沒有GUI沒有輸入控制更沒有物理引擎。你必須用別的庫來完成這些。Ogre的demo和SDK中包含一些第3方庫。例如,CEGUI輕松地將一個GUI系統融入了Ogre,鍵盤和鼠標的輸入則是由OIS(一個輸入系統)完成的。

Configuration Files

Ogre程序的運行需要幾個配置文件,他們控制著哪些插件被加載,程序的資源又在哪里等等。我們將簡要地看一下這些配置文件都是做什么用的。

plugins.cfg包含插件的使用情況。如果想要刪除某個插件,只需簡單的刪除對應的行或者在行首添加"#"將其注釋掉。添加控件則需要按照"Plugin=[PluginName]"的形式增加一行。注意,pluginname不需要以.DLL結尾,也不一定要以"RenderSystem_"或"Plugin_"開頭。你也可以修改"PluginFolder"的值來定義Ogre尋找插件的路徑,絕對路徑和相對路徑都可以,但是不能用系統的環境變量。

resources.cfg包含著Ogre搜尋資源文件的路徑列表。資源包括scripts, meshes, textures等等。同樣是只能使用絕對路徑和相對路徑,不能用系統的環境變量。注意,Ogre是不搜尋子目錄的,所以如果有多層目錄的話,你必須手動輸入他們。例如,你有像"res\meshes"和"res\meshes\"這樣的目錄樹,你就必須添加2個兩個路徑。

media.cfg包含了更多的資源細節信息,關于這個文件的更多信息請查看手冊或Ogre的論壇。(我也沒有找到關于這個文件的信息,以后找到了會補上的)

ogre.cfg文件由Ogre's configuration screen根據你的電腦和圖形設置生成。發布你的程序時這個文件不需要一起打包。注意,你不能直接地編輯這個文件,你應該使用configuration screen配置。

quake3settings.cfg文件應同BSPSceneManager一起使用。如果你沒有使用BSPSceneManager,那么你就可以忽略此文件,當然也就不需要發布它。

這些就是Ogre使用的全部配置文件。在稍后的教程里我們將涉及這些文件的更多信息,比如如何改變它們的位置,如何使用它們完成更多的事情等等。



posted on 2009-12-25 16:44 暗夜教父 閱讀(6100) 評論(1)  編輯 收藏 引用 所屬分類: OGRE

FeedBack:
# re: OGRE基礎教程1
2009-12-26 15:09 | Sunshine Alike
mark,關注中,我也正在學ogre  回復  更多評論
  

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



<2010年4月>
28293031123
45678910
11121314151617
18192021222324
2526272829301
2345678

常用鏈接

留言簿(2)

隨筆分類

隨筆檔案

文章分類

文章檔案

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲精品乱码久久久久久按摩观| 国产亚洲激情| 欧美人与禽猛交乱配视频| 国产一区 二区 三区一级| 亚洲视频成人| 亚洲欧洲日产国产网站| 亚洲欧美成人网| 国产精品免费小视频| 在线视频精品一区| 亚洲精品影院| 欧美日韩喷水| 亚洲一区二区网站| 一本一本久久| 国产精品毛片高清在线完整版| 亚洲午夜电影网| 一本色道久久加勒比精品| 欧美日在线观看| 亚洲欧美激情在线视频| 国产精品99久久久久久宅男| 国产精品xvideos88| 亚洲综合999| 亚洲女人天堂成人av在线| 国产精品自拍网站| 久久五月婷婷丁香社区| 久热这里只精品99re8久| 亚洲精品久久久久| 一区二区三区国产| 国产香蕉97碰碰久久人人| 久久久久久97三级| 另类尿喷潮videofree| 99精品欧美| 亚洲午夜精品一区二区| 国产香蕉久久精品综合网| 欧美jjzz| 欧美午夜一区二区三区免费大片| 久久福利毛片| 男男成人高潮片免费网站| 在线综合欧美| 亚洲你懂的在线视频| 亚洲第一色中文字幕| 亚洲精品乱码久久久久| 国产精品v亚洲精品v日韩精品| 久久久久久一区二区| 欧美成人午夜免费视在线看片| 亚洲色诱最新| 欧美一区在线看| 亚洲美女黄色片| 欧美一区二区免费观在线| 亚洲精品美女在线观看播放| 亚洲专区免费| 亚洲激情视频网| 久久久综合香蕉尹人综合网| 久久久国产精品亚洲一区| 欧美激情久久久久久| 日韩天堂在线视频| 午夜精品一区二区三区在线| 最新成人在线| 免费日韩精品中文字幕视频在线| 农夫在线精品视频免费观看| 久久er99精品| 激情久久久久久| 久久久久久亚洲精品杨幂换脸| 久久不射中文字幕| 狠狠色伊人亚洲综合成人| 久热爱精品视频线路一| 老司机免费视频久久| 亚洲三级电影全部在线观看高清| 老司机精品福利视频| 在线成人激情| 欧美成人精品在线| 欧美成人亚洲| 亚洲网址在线| 亚洲欧美日本日韩| 国产一区二区高清| 美女啪啪无遮挡免费久久网站| 蜜乳av另类精品一区二区| 日韩视频免费大全中文字幕| 在线综合亚洲欧美在线视频| 国产美女精品| 欧美韩日精品| 欧美特黄一级大片| 久久天天躁狠狠躁夜夜av| 久久五月天婷婷| 99综合精品| 欧美夜福利tv在线| 亚洲精品一线二线三线无人区| 日韩视频在线观看国产| 国产精品视频免费在线观看| 久久亚洲美女| 欧美日韩精品在线| 久久久久国产精品一区二区| 免费毛片一区二区三区久久久| 一区二区不卡在线视频 午夜欧美不卡在 | 欧美sm视频| 国产精品高潮呻吟久久av无限 | 欧美激情综合网| 午夜亚洲福利| 欧美成人资源网| 久久aⅴ国产紧身牛仔裤| 久久精品国产亚洲5555| 欧美成年人网| 欧美在线亚洲一区| 欧美屁股在线| 蜜臀久久99精品久久久久久9 | 欧美电影免费| 亚洲一区三区电影在线观看| 日韩西西人体444www| 国产一二三精品| 一道本一区二区| 悠悠资源网亚洲青| 亚洲视频一区二区| 亚洲精品影视| 美女视频一区免费观看| 欧美专区中文字幕| 国产精品免费看久久久香蕉| 亚洲精品国产拍免费91在线| 国产日韩亚洲欧美| 亚洲图片欧洲图片av| 艳妇臀荡乳欲伦亚洲一区| 久久久人人人| 久久久美女艺术照精彩视频福利播放| 欧美日韩喷水| 日韩视频在线一区二区三区| 亚洲黄色高清| 久久野战av| 免费的成人av| 一色屋精品视频免费看| 欧美在线精品免播放器视频| 欧美亚洲免费电影| 国产精品久久久爽爽爽麻豆色哟哟| 亚洲国产精品成人| 亚洲欧洲精品一区二区三区| 久久亚洲精品视频| 免费久久99精品国产自| 狠狠色狠狠色综合人人| 久久gogo国模裸体人体| 久久人91精品久久久久久不卡| 国产日韩在线视频| 欧美亚洲免费在线| 久久久久一本一区二区青青蜜月| 国产日韩高清一区二区三区在线| 亚洲欧美日韩一区| 久久精品噜噜噜成人av农村| 国产视频在线观看一区| 欧美综合国产| 欧美大片免费观看在线观看网站推荐 | 亚洲人成毛片在线播放女女| 91久久久国产精品| 久久av一区二区三区亚洲| 国产视频一区在线观看一区免费| 欧美亚洲视频在线观看| 美女精品网站| 日韩午夜黄色| 国产精品久久久久77777| 亚洲你懂的在线视频| 久久亚洲精品中文字幕冲田杏梨| 在线观看日韩av先锋影音电影院| 老司机亚洲精品| 日韩午夜电影在线观看| 欧美伊久线香蕉线新在线| 精品51国产黑色丝袜高跟鞋| 欧美高清视频在线 | 欧美精品三级日韩久久| 亚洲伦伦在线| 久久成人这里只有精品| 亚洲啪啪91| 国产精品人成在线观看免费| 久久国产精品一区二区三区| 亚洲第一视频| 欧美一区亚洲一区| 99re热精品| 久久一区国产| 亚洲第一页在线| 欧美视频日韩视频在线观看| 午夜亚洲视频| 亚洲精品一区二区网址| 快播亚洲色图| 午夜精品久久久久久久久久久久久| 伊人男人综合视频网| 国产精品久久久久久av下载红粉| 久久久国产91| 亚洲一区影音先锋| 亚洲国产高清高潮精品美女| 欧美一区二区性| 妖精成人www高清在线观看| 狠狠久久亚洲欧美专区| 国产精品网站一区| 欧美日韩色一区| 免费成人在线视频网站| 欧美影院在线播放| 亚洲无毛电影| 狠狠色综合色区| 国产精品极品美女粉嫩高清在线 | 亚洲午夜精品一区二区| 亚洲国产精品www| 牛夜精品久久久久久久99黑人 | 亚洲欧美日韩中文播放| 亚洲经典在线| 一区二区亚洲欧洲国产日韩| 国产女精品视频网站免费|