XNA 4.0提供狀態物件,狀態物件將原本以往零零散散的屬性設定變成一個單一個物件。
像原本3.0的時候,我們要將要將3D模型用網格畫出來,我需要設定特定的屬性。
設定Cull模式,也是要設應特定的屬性。
每次要找那些屬性都是一個頭兩個大,而在這次新的改版中,XNA 4.0提供
BlendState, DepthStencilState, RasterizerState, 和SamplerState,讓程式設計師使用。
比較常用的是
RasterizerState: 設定Cull模式(順時鐘或是逆時鐘),設定填滿模式(填滿或是網格)。
SamplerState: 設定貼圖取樣方式。在使用者自訂的shader code當中,我們可以在shader設定
貼圖取向的方式,如:
texture diffusemap;
- Sep 11 Sat 2010 23:55
[XNA 4.0學習筆記] 內建狀態物件
- Sep 11 Sat 2010 23:31
[XNA 4.0學習筆記] 新增五個內建特效
XNA 4.0在特效上面提供更多的選擇讓使用者選擇使用,而這些效果都是可以支援到Reach和HiDef兩個Profile。
這次XNA 4.0提供的特效如下所示:
1. Basic Effects: 提供基本的Blinn-Phong打光效果,這是在之前的XNA版本就有提供的操作,設計者可以
自行開啟打光效果,設定相關參數設定等等。
2. Dual Texture Effects: 雙重貼圖效果,使用兩張貼圖並使用混合的方式達到更多樣的效果。(像是使用者
可以先貼上基本的貼圖,然後再貼上一張細節貼圖,增加模型的好看效果)
3. Alpha Test Effects: 提供一種方式來做Alpha的測試效果。
4. Skinned Effects: 這個效果是提供給Skinned(3D模型的變形)所使用的效果。(最多可以支援到72個骨頭,
每個骨頭最多可以有四個不同的權重。
5. Environment Map Effects: 使用環境貼圖的特效。
基本上上述五個特效,主要是補足Reach的不足。因為Reach並不支援使用者自訂的特效。所以我們可以藉由上述
五個預設的特效來做到我們需要的效果。
- Sep 11 Sat 2010 15:05
[XNA 4.0學習筆記] Profile顯像材質參數設定
XNA 4.0在顯示上面(包含RenderTarget和一般直接顯像)有提供兩種不同的Profile,Profile根據文件所說指的就是硬體所提供的功能。
每個繪圖卡都可能會提供不同的功能,像是有些繪圖卡提供浮點數運算的材質貼圖,有些沒有這個功能等等。
在之前的XNA版本中,XNA主要受限這個限制所以有時候會發生一種情況...
明明寫了一個RT相關的程式,結果在自己的電腦跑不出來該有的效果,然後拿到別台又OK的情況...
在新版的XNA 4.0中,特別在RT上面提供兩種不同的格式: Reach和HiDef。
Reach主要適用於所有XNA可以支援的平台,包含PC、360和WP7等。
HiDef支援360和部分PC(需支援DX10顯卡)
- Sep 11 Sat 2010 14:15
[XNA 4.0學習筆記] 轉移ZUNE或ZUNE HD程式碼到WP7
這部份算官方文件的一部分,因為剛好也在學習中,所以就把所知道的東西分享出來。
WP7最低解析度800*480。如果要從ZUNE的專案改到WP7,解析度部分需要調整。(ZUNE HD 480*272)(ZUNE240*320)
針對解析度調整的部分,有兩種方式可以設定:
1. 由美術手動調整材質資源的大小(像是貼圖的大小調整)。
2. 由內建的硬體調整(也就是更改目前顯示的解析度)。
- May 05 Wed 2010 14:20
XNA WP7 教學文件
現在網路上面開始有些教學文件交使用者怎麼開發WP7的遊戲程式。
現在推薦一個簡易的PDF文件
裡面有交怎麼樣開發XNA的WP7遊戲程式
http://charlespetzold.com/phone/index.html
- Apr 25 Sun 2010 14:50
XNA 4.0 Phong Shading 實作 shader implement
接下來就是進行實作的部分,時做的部分這邊我只說明實作可能會想問的問題,詳細內容各位可以下載原始的程式碼。
(本範例程式碼,包含使用基本的basicEffect特效將模型顯示)
模型的部分,這邊我是使用OBJ檔案格式,在XNA Creater club上面有一個範例,裡面是使用自定的content pipeline來將obj檔案資訊分析出來,這邊我們就直接運用它即可。
在renderer.cs的程式碼中,裡面有一個函數use_BasicEffect程式碼如下
- Apr 25 Sun 2010 14:09
XNA 方便使用的程式碼
這邊推薦兩個方便實用的程式碼,這樣可以節省一些不必要的時間,一個是負責控制攝影機的類別,一個是幫你畫出平面的板子。平面的板子可以方便你做一些額外的處理(像是Deferred Shading和texture space的操作等等,相當好用)
1. Camera.cs
camera類別主要是用來負責控制攝影機的,此類別是繼承GameComponent。
同時,Camera.cs是在SkiningModel的範例中所使用的,藉由這個類別你可以不用再花額外的時間寫關於Camera的程式碼。
A和D是對Y軸旋轉,W和S是對X軸做旋轉,Z和X是負責控制遠近。
使用方式:
這邊只是提供一種方式來使用這個類別,你可以針對你自己的需求在做更改。
1> 在Game.cs中,先引入這個類別的命名空間。 ->using DeferredShadingTutorial;
2> 宣告一個Camera物件。 ->Camera camera;
3> 在建構子當中建立(new)並把它增加到Component Stack裡面。
->camera = new Camera(this);
->Component.Add(camera);
由於本類別是GameComponent類別,所以當你把它加入Component stack的時候,XNA在每次呼叫base.Draw或是base.Update時,會幫你自動更新。
因此,當你按下鍵盤的ASDW按鍵時候,XNA會自動幫你更新Camera狀態。
4> 現在,Draw函數中,當你要畫模型需要使用到Camera的view、projection變數時,只要藉由camera.View和camera.Projection就可以取得相關的矩陣。2. QuadRenderer.cs
此類別主要是用來畫出平板。可以方便的使用在Deferred Shading和texture space相關的操作。
畫出的平板會給定座標和貼圖座標。這邊分享這兩個好用的程式碼,會在接下來的範例中跟各位慢慢介紹。
在右邊的"資源",有個叫做component.rar裡面包含這兩個檔案