這幾天在用Ogre讀取Ogitor的情境,遇到了不少問題,在網上也找不到詳細的說明,雖然讀取Ogitor的情境對很多人來說太簡單了,但對一些新手來說就有點難了,我剛開始就覺得是無從下手,因此簡單的描述下讀取過程和一些常見問題,希望對一些新手有所協助,高手就可以跳過了O(∩_∩)O~
我簡單的分為2大步:
1. 學會簡單的使用Ogitor,建立自己的情境,然後匯出為scene情境檔案
Ogitor的簡單操作我就不再詳述了,直接引用網上的:
一、基本控制
1.情境中的座標:x軸z軸表示左右,Y表示上下
2.QWEASD:攝像機方向、行走控制(在“Fly”與“Walk”模式下,作用略有不同)
3.滑鼠中鍵+移動:晃動攝像機鏡頭
4.滑鼠右鍵+移動:旋轉攝像機鏡頭
5.Alt+Mouse Wheel:靠近或遠離選中對象
6.Alt+滑鼠右鍵+移動:攝像機圍繞選中物體旋轉
7.將攝像機放置到Scene Tree中選中的對象前:雙擊Scene Tree中的對象名字或按“F”鍵(只有情境在“Fly”模式下才有效)
8.增加攝像機移動速度:情境工具條中的“Speed+”(表徵圖為帶加號的攝像機)
9.減慢攝像機移動速度:情境工具條中的“Speed-”(表徵圖為帶減號的攝像機)
10.滑鼠左鍵+移動:選中多個模型
11.選中多個模型:按住Shift鍵,依次點擊需要選中的模型
12.從多個選擇中去掉某個模型:按住Ctrl,依次點擊不需要的模型——與Shift多選功能相反
13.複製模型:Shift+移動某個模型
14.移動模型使其貼到其他模型或地表上方:Ctrl+移動模型(不怎麼靈敏,比手動好一點)
15.End鍵:高亮操作模型(移動,旋轉,放縮)控制項的一個軸
2.建立一個情境:
1.開啟建立一個情境的對話方塊(Project Settings),如:選擇Project的存放位置,輸入Project的名字。在Assets選項頁中,單擊滑鼠右鍵,選擇模型的Mesh及Material、貼圖的存放位置(自己的模型等資源在這裡添加,也可以項目建好後再重新設定)
2.建立好之後,可以在編輯器中看到一個空的情境,這時我們可以向情境中添加基本的對象——地形,天空,水體等等,編輯器都有提供,在Objects面板中,直接將所需對象拖入到情境中即可。
Terrain Group:地形組,拖動情境中(此時情境中並沒產生地形,只是提供了地形的一個組,Ogitor中地形的最好單位是Page,Terrain Group由許多的Page構成)
Caelum:天空盒
Hydrax:水體
將對象拖入到情境中後,可以在Scene tree中看到各對象的名字,點擊對象,可以在屬性面板編輯他們的屬性。
3.添加地形Page
在Scene面板樹中,右擊Terrain Group,選中Add Page。彈出對話方塊,選中page的位置和基本的地表紋理設定,確定之後就可以在Scene面板樹中看到剛才添加的page,在情境中也可以看到基本的地形了
Page位置:Page的名字座標與在情境中的位置如
每增加一個Page,在工程檔案夾下的terrain檔案夾下會增加兩個檔案,一個.ogt檔案,一個.tga檔案。一個Page對應這兩個檔案。Page的座標名與這兩個名的對應關係如下:
Page_0000ffff.ogt是由Page0x-1產生的。一個.ogt檔案的前4個字元(這裡是0000)對應page名字的第一個座標(這裡是0);ogt檔案的後四個字元(這裡是ffff)對應page名字的第二個座標(這裡是-1).
0 0000
1 0001
正數如上,依次類推
-1 ffff
-2 fffe
其他負數,收集中
3.編輯地形
Shift+地形升高:降低地形
地形編輯工具可以調整筆刷的樣式,大小,強度等
Splat:地表貼圖
Shift+地表貼圖:擦掉這種地表貼圖
一個Page最多支援6種不同的地表貼圖,當發現地表貼圖不能刷到地形上時,有兩種情況:
1.這個Page的地形貼圖也達到6種(可以在這個Page的屬性property中看到Layers是否已達到6)
2.筆刷紋理已在當前刷的地方,只是上面覆蓋了另一層不同的紋理(如一個page的同一個地方上有Layer0紋理A,Layer1紋理B,如果此時筆刷上的紋理為A,用A來刷這個地方,則沒反應,此時正確的做法是:將筆刷上的紋理調整為B,按住Shift鍵,擦除紋理B,使紋理A露出來)
Paint:(ColorMap)
使用顏色紋理,此功能預設不啟用,如要啟用可以在Terrain Group的屬性中勾選Colour Map
Splat Grass:在地表添加草(暫時不要在情境中使用此功能)
2. 用Ogre讀取匯出的scene情境檔案
匯出的情境檔案:
2.1把Ogitor內建的例子代碼拷到自己的工程裡
目錄關係自己定(附加元件封裝含目錄裡添加例子檔案的標頭檔,也可以不加,只要例子cpp檔案能找到相應的標頭檔就行了,附加依賴項加上OgreTerrain_d.lib(根據實際情況來),然後就開始編譯代碼,編譯過程中可能會找不到XX標頭檔,自己相應的添加就可以了,res檔案夾也要拷的。
BaseApplication.cpp檔案的bool BaseApplication::setup(void)方法下有個讀取外掛程式配置的改成這樣mRoot = new Ogre::Root("plugins.cfg") (如果直接把bin下那個檔案改成和他一樣也可以,那就不用改這裡了)
2.2把匯出的相應檔案放到自己的資源路徑下,並在resources.cfg添加相應的路徑(注意:要加到[General]下,不然讀出的地形看不到)
2.3Ogitor的bin目錄下有個SampleAppConfig.xml,拷到你的exe組建目錄下,<SampleApp projectDir="Media/scene/prj1" scene="mscene.scene"/>改成你自己相應的
(到這裡就應該可以編譯出你的EXE了,點擊運行就能看到情境了,如果有遺留的話我再補充!)