作者teexit (獃獃)
看板GameDesign
標題Re: [問題] XNA 透鏡效果以及一些其他繪圖問題?
時間Wed Apr 21 21:30:23 2010
※ 引述《F23ko (純潔)》之銘言:
: 但我不知道XNA有沒有現成的函式可以用
: 如果有現成的函式的話,希望望能獲得關鍵字
: 如果沒有的話,希望能提示該從哪個方向下手
: 另外,我在兩本書上看到的繪圖方式
: 2D方面都是貼圖上去
: 3D則是畫三角形拼出形狀,再貼圖上去
: 似乎沒看到直接畫出圖形的辦法
: 像是WindoesFrom的System.Drawing.FillEllipse()之類的.....
: 換句話說,如果我想畫出圓形之類的簡單圖形,那就得畫出一堆頂點
: 再透過投影矩陣換算後才會出現在螢幕上
: 那,若我要製作一個選單,甚至HP條之類的東西 (就是幾個長方形的簡單圖形)
: 該不會都要經過投影或是貼圖吧?
: 有沒有2D狀況下可以直接在螢幕上繪圖的辦法?
1. 針對於RTT的部分...
XNA有一個物件叫做RenderTarger2D,宣告完畢以後初始化它
EX:
RenderTarget2D renderRT;
.....
renderRT = new RenderTarget2D(GraphicsDevice, width, height, 1, Surface
Format.Color);
第1-3的參數我就不說明了 第四個印象中沒記錯的好像是用來建立一些filter
圖層,至於SurfaceFormat這邊,可以參照XNA MSDN...
因為用途不同所需要的就不一樣~(這很重要~~!)
接下來就是在Draw的函數
GraphicsDevice.SetRenderTarget(0, renderRT);
// 畫東西~~~
GraphicsDevice.SetRenderTarget(0, null);
如果你想要知道他畫了哪些東西在RT裡面,你可以用spriteBatch + RT所提供
的getTexture() 方法
EX:
spriteBatch();
spriteBatch.Draw(renderRT.getTexture(), Vector.Zero, Color.White);
spriteEnd();
至於你有這些texture以後,你接下來做的事情就是影像處理...
你可以把他銳化或做一些而外效果
不過這邊就是HLSL的地方(建議用HLSL去做,你用CPU去算這個...-.-)
http://www.neatware.com/lbstudio/web/hlsl.html
上面有些HLSL在影像處理的運用範例,不過網路上還有更多,可以GOO看看
RenderTarget蠻不錯用的像是可以用來做Deferred shading~
至於你說的第二個問題 HP顯示,你有兩個做法
1. 自己畫Quad然後指定貼圖座標,就把他當作texture mapping一樣來做
(這方面可以好好研究)
2. 使用XNA的spriteBatch來畫...
(2D這邊我應該不用講很多,不過spriteBatch.begin這邊有個參數要注意
就是第三個,我有點忘記了名字了,不過就是選擇要saveState)
(原因是因為spriteBatch呼叫以後,他會去變動一些graphicsDevice的設定
,網路上面有說用saveState的方式,執行效能會降低,建議手動調整)
http://0rz.tw/pfpA8 可以參考看看
以上僅供參考
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 123.110.189.43
推 F23ko:感謝先 我需要花一點消化一下內容 04/21 22:01
推 F23ko:等等.... 看到一個關鍵字 XNA MSDN? 有這個東西喔? 04/21 22:05
→ F23ko:我知道微軟的msdn.... 04/21 22:05
→ F23ko:還在想說在上面都找不到xna的組件說明很麻煩.... 04/21 22:06
→ teexit:英文還OK的畫建議看英文的 XNA這邊我記得沒錯沒有中文版 04/21 22:08
→ F23ko:直接把函式、物件名稱打進去,找不到這裡面的東西 @@ 04/21 22:25
→ F23ko:我的英文很糟糕 還需要把快顯註解的xaml掏出來翻譯才能看的 04/21 22:26
→ F23ko:懂 = = 04/21 22:27
推 F23ko:=口=||| 我xna3.1還沒學熟熟 4.0就出了!? 04/21 22:29
→ teexit:是上面的沒錯XD 不過有些東西 你還是要多看才去找函數 04/21 22:30
→ teexit:這樣才比較好... 04/21 22:31
→ teexit:4.0 Content比較麻煩... 不過4.0最大改變就是多了WP7 04/21 22:31
→ teexit:所以現在可以做WP7上面的遊戲 (window phone 7) 04/21 22:31
推 changyin:RenderTarget2D 借問一下第三個參數的意義是類似圖層嗎? 04/22 11:42
→ teexit:我印象中0是說建mipmap的層次 04/22 12:41
推 changyin:請問樓上XNA裡的InputSequencExample如何使用在3D遊戲裡 04/24 15:35
→ changyin:我要使用double jump人物要跳起來程式碼是要加在哪個地方 04/24 15:38
→ changyin:有沒有像惡魔獵人那種輸入方式可以實作的?或有甚麼演算法 04/24 15:41
→ teexit:這部分我沒有設計過,不過直覺想的話,就是把他放在控制 04/24 17:26
→ teexit:控制腳色操作的地方應該就可以了...(那個範例我沒特別去看) 04/24 17:26
→ teexit:不過我有看到他的說明文件裡面有說要怎麼使用 04/24 17:27
推 changyin:有關他的MOVE.CS裡 有一段game might add PerformMove() 04/24 17:57
→ changyin:他的意思是甚麼? 04/24 17:57
→ teexit:現在有個很重要的問題是 我並沒有trace這個CODE 所以這部分 04/24 19:32
→ teexit:的問題我比較沒有辦法回答你,如果真的很急需要答案 04/24 19:33
→ teexit:你可以到creator club問一下會比較快 04/24 19:33
→ teexit:不過猜 剛剛看了一下game.cs 他裡面有一個move相關的初始化 04/24 19:34
→ teexit:我再想會是他要你可以自己寫一個函數,來去做這些Move相關 04/24 19:35
→ teexit:的事情!? 像是一些操作,會是設定等等 我目前推測是這樣 04/24 19:35
→ teexit:他下面update那邊有很多檢查,所以我才這樣猜 04/24 19:35