上一篇主題 :: 下一篇主題 |
發表人 |
內容 |
pleaselouis 時常出沒的會員
註冊時間: 2008-11-03 文章: 32
505.97 果凍幣
|
發表於: 2008-11-7, PM 5:46 星期五 文章主題: 關於 OGRE 2D顯示的部份 |
|
|
小弟正在練習 關於 OGRE 2D的顯示部分
目前的進度是 最前面顯示一張 2D圖片 大約只佔視窗的1/5
剩下的部份 就像是在背景執行3D場景的互動 : 可以 點選 托拉 Mesh等等
但是再加入2D的顯示部份後 由於有採用以下的程式碼:
AxisAlignedBox aabInf;
aabInf.setInfinite();
rect->setBoundingBox(aabInf);
便可以造成讓 2D圖片可以一直顯示於最上層 類似 OverLay的效果 雖然不是...
但是問題來了 由於是使用一個無限大的 BoundingBox 來讓它顯示最上層
因此還會造成 無法跟背景執行的3D場景做互動 也就是 點選 托拉 Mesh等等
如果單純把上述的程式碼註解掉 雖然就可以跟背景執行的3D場景做互動
但是在移動Camera時 背景的Mesh若是跟 2D圖片 有所重疊的情況下
2D圖片便會消失不見 除非再移動Camera 才會有機會讓圖片在顯示出來
因此請教各位前輩 有辦法讓 2D圖片一直顯示最上層 又能跟背景執行的3D場景做互動嗎
謝謝各位的幫忙 謝謝 |
|
回頂端 |
|
|
vamper 對這略感興趣的新人
註冊時間: 2007-06-23 文章: 29 來自: 台灣 18.82 果凍幣
|
發表於: 2008-11-8, PM 8:08 星期六 文章主題: Re: 關於 OGRE 2D顯示的部份 |
|
|
pleaselouis 寫到: | 小弟正在練習 關於 OGRE 2D的顯示部分
但是問題來了 由於是使用一個無限大的 BoundingBox 來讓它顯示最上層
|
讓我猜猜...該不會OGRE的render pipeline是以BoundingBox的Z座標來作排序的?
也就是繪製物件的順序依據。再者我們沒用這方式來作UI的。(UI通常是顯示最上層)
pleaselouis 寫到: |
因此還會造成 無法跟背景執行的3D場景做互動 也就是 點選 托拉 Mesh等等
如果單純把上述的程式碼註解掉 雖然就可以跟背景執行的3D場景做互動
|
會設定到BoundingBox的話,通常會跟3D空間的物件作互動行為,
好方便去處理一些事情,如:Frustum Culling、碰撞...等。
pleaselouis 寫到: |
但是在移動Camera時 背景的Mesh若是跟 2D圖片 有所重疊的情況下
2D圖片便會消失不見 除非再移動Camera 才會有機會讓圖片在顯示出來
|
被Occlusion culling或Frustum Culling?還是Z Buffer沒有將它寫入?
pleaselouis 寫到: |
因此請教各位前輩 有辦法讓 2D圖片一直顯示最上層 又能跟背景執行的3D場景做互動嗎
謝謝各位的幫忙 謝謝 |
記得!不管什麼東西都需要被轉換到螢幕座標,
當Z = 0.0f且W = 1.0f時,一定會被畫到最上層,也就是2D圖的輸出(UI),
所以我們處理render時,一些先將3D物件作繪製的動作,最後再繪製2D部分(UI),
也就是Z = 0.0f且W = 1.0f。(DirectX版)
恩...在使用工具過程,希望能夠將一些基本觀念給弄清楚,
這樣發生問題時,能夠自己去推斷問題點在哪裡,
這也是遊戲程式工程師最重點也是最基本的功夫。 |
|
回頂端 |
|
|
pleaselouis 時常出沒的會員
註冊時間: 2008-11-03 文章: 32
505.97 果凍幣
|
發表於: 2008-11-9, AM 12:50 星期日 文章主題: |
|
|
非常謝謝你的幫助
我會好好努力的學習的
感謝你抽空回覆 謝謝你 |
|
回頂端 |
|
|
songfat 時常出沒的會員
註冊時間: 2008-01-25 文章: 34
192.68 果凍幣
|
發表於: 2008-11-26, PM 2:26 星期三 文章主題: |
|
|
我不太懂為什麼須要這麼麻煩?
Ogre不是已經提供了Overlay的class來做2D顯示的部份嗎? |
|
回頂端 |
|
|
|