OGRE框架分析(一)

2021-04-30 15:41:28 字數 2260 閱讀 6571

簡單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...