簡單ogre框架由兩個檔案引入:
exampleframelistener.h
// 指向root
物件的指標
root *mroot;
// 指向程式中攝象機的指標
camera* mcamera;
// 指向場景管理器的指標
scenemanager* mscenemgr;
// 指向「幀***」的指標
framelistener* mframelistener;
// 指向渲染視窗的指標
renderwindow* mwindow;
我們如果要建立3d遊戲,需要用到這幾個傢伙。簡單的來說,root負責所有程式的總調配,而camera不用說,負責在遊戲中充當我們的眼睛,scenemanager用來管理整個遊戲場景,framelistener負責遊戲的控制,最後renderwindow負責將遊戲「畫」到螢幕上。
ok,我們只要準備這幾個傢伙,就可以開始工作了。他們可以讓我們在螢幕上建立出像cs,魔獸那樣的遊戲畫面。
virtual void go(void)
virtual bool setup(void)
ok,就兩個?對!主要的就兩個,兩個就替我們做了很多事情,讓我們看看他們是怎麼寫的:
其中go函式比較簡單,內容如下:
virtual void go(void)
如果你細心一點的話,會發現,他實際上在其中呼叫了我們列舉的另外乙個函式 setup() ,他會負責進行判斷,如果setup()函式執行正確,就會呼叫startrendering()進行渲染,那setup()又做了什麼呢?
virtual bool setup(void)
可以看出來,實際上setup做了很多重要工作,讓我們挨個看看。
首先,他例項化了全域性的mroot,我們之前說過,mroot和他的名字一樣,是老祖宗,他負責調配所有功能。
之後我們執行setupresources(),他負責載入遊戲需要用到的資源,例如,紋理,骨骼和網格。
在下面,執行configure(),他就是我們需要對ogre進行的配置,如果配置不成功(例如,使用者選擇了取消按鈕),那麼整個程式就退出。
繼續往下執行,choosescenemanager()實際上執行了
mscenemgr = mroot->getscenemanager(st_generic);
他通過mroot的getscenemanager()函式獲得場景管理器
並賦值給mscenemgr
,實際上場景管理器是非常重要的,他負責替我們進行場景的渲染,在這裡的st_generic引數代表普通場景型別,其實他有四個選項可供選擇,甚至他有乙個場景型別列舉定義:
enum scenetype
如果我們只是做個簡單的例子,選擇第一項就好了。
接下來程式接著往下走,要執行createcamera()了,因為鑑於我們後面要做的工作,所以首先我們要建立乙個攝像機來代表我們的眼睛。
然後程式執行createviewports(),這個函式的作用是建立乙個視口,他是做什麼的?因為遊戲渲染並不是直接在視窗上,而是要在視口中渲染,所以要建立這個東西。
virtual void createviewports(void)
有句話說得好,**能說明一切,看這兩行**,第一行,我們將我們之前建立的攝像機作為引數傳遞給視口建立函式,好讓視口知道我們的眼睛到底在往**看,第二行,這個viewport又繫結到了mwindow這個渲染視窗上來進行渲染。
後面程式執行到了createscene() 函式,他就是需要我們往場景中加入自己元素的函式了,如果你希望將一輛汽車或者飛機放到虛擬的世界裡,就可以使用它了,如果你沒有設定它,那麼除了ogre在前面呼叫的 choosescenemanager() 中建立的簡單場景之外,一片荒蕪。
其實到這裡,整個遊戲畫面部分就已經結束了,畫面已經渲染到了螢幕上,接下來我們要幹什麼呢?當然是讓畫面動起來,不然我們就只是費勁畫了一幅畫面而已,這又有什麼稀罕的呢?
createframelistener()就是來幫助我們實現與遊戲的互動,我們可以看出他實際上是加入了乙個***,來監視玩家到底做了什麼操作,然後會根據玩家的操作來具體修改每一幀的畫面。
然後,讓我們再回到go()函式,什麼?你已經忘了?呵呵,要知道,我們其實還在go()函式裡(其實我們還在如來的手掌心),搞了這麼一大通,上面的setup()如果成功,那麼最後go()函式的最後一行,就會把我們設定好的程式進行渲染。當然還是由最主要的mroot來幹。
到這裡,我相信大家都很疲憊了,讓我們喝瓶汽水什麼的,歇歇吧。
OGRE 框架雜談(一)
在這個紛亂的世界中,還是有不少的高手,強人為迷路的小鳥指明方向。其中就包括引導我進入3d渲染世界大門的ogre開發小組。其實,大家首先要知道的是 ogre的本意,是乙個以教學為目的進行的開源3d引擎專案。很多人對其推崇至極 當然,我也很喜歡ogre,並對其開發者抱有崇高的敬意!不過有些地方,ogre...
Ogre 整體框架入門
ogre 是物件導向的3d圖形引擎。root 是引擎的乙個介面類,包含很多快捷的呼叫其他類的介面。在ogre中,廣泛的使用了單件模式,同時最大的保證了你不需要自己管理資源,除了是你自己new的物件 這很少 基本你只需讓ogre負責資源管理就行。這對於乙個複雜的類庫來說,確實是乙個很強大的特性。ogr...
ogre 整體框架入門
ogre 是物件導向的3d圖形引擎。root 是引擎的乙個介面類,包含很多快捷的呼叫其他類的介面。在ogre中,廣泛的使用了單件模式,同時最大的保證了你不需要自己管理資源,除了是你自己new的物件 這很少 基本你只需讓ogre負責資源管理就行。這對於乙個複雜的類庫來說,確實是乙個很強大的特性。ogr...