輕鬆愉快,走馬觀花,YY著未來的榮耀與激情的連續的幾個晚上過去了。
對於XNA4開發的基礎調研工作宣告結束。開創一個功能是一件愉快的事,完善他並填充那些猶如體力活一般的代碼是非常無聊和痛苦的。
程式員,不怕痛苦,十數年如一日堅持在這條戰線上的我,更是其中自虐型的佼佼者。
先來複習一下調研的結論。
一、windows phone 7 將堅持 dotnet 和 XNA,要和第三方原生c++開發說NO。目前微軟流露出的決心無比強大。
是死是活各有評說,到底是有如vista一樣杯具到死,或有如windows 7 一樣涅槃重生。
這不是我要考慮的問題,我看好,我就去做。XNA就成了在windows phone 7 開發圖形應用的唯一選擇。
二、custom shader(windows 平台支援,windows phone 7 平台,不支援)
這個如果真的不支援,windows phone 7 的遊戲機定位將成為一個笑柄,xnaTeam Dev只是說這個功能會有的,我相信微軟也不至於讓這個笑柄一直保持到RC版本。
二.1 custom shader 的build。不支援runtime的build,通過一些不正當手段對Effect的初始化,調用外部程式build effect,可以在windows 平台上實現shader 的runtime build。這個問題是能支援最好,不能支援我也可以預build所有的shader,不過這將變得很不優雅。
二.2 custom shader 的規範。這個很囧,我沒有找到XNA4這部分的文檔,只能拖進content項目裡build一下試試,看報錯,不過目前發現基本符合 fx_2_0的規範,shader model 3.0 ,只是部分渲染狀態的設定不再支援。
二.3 vectex texture,很欣慰,windows 平台正常運轉,用這個方式繪製地形比較高效.
三、模型載入
從fbx匯入檔案很好,什麼都有了,除了動畫。動畫與換裝這個模組需要再開發。
四、文字與IME
對unicode幾乎沒什麼照顧,英文版模擬器還看不出任何IME的跡象。這部分需要再開發
五、XNA本身
好吧,除了contect項目之外,這就是一個dotnet封裝的DX的子集。換句話說,對於開發遊戲來說,還有很長很長的路,XNA還是很偏底層。
六、好訊息
多點觸摸的開發和調試很方便,有一台windows 7多點觸摸相容的輸入裝置就可以。已知的有 多點觸摸繪圖板,hp和dell的幾個支援多點觸摸的平板電腦,taobao上還有一種紅外兩點觸控螢幕,套在顯示器前面就可以。
接下去開始正式的開發,先從建立基本的代碼結構開始。
c#這部分的設計其實是很好的,只需要設定好類和函數、成員的存取層級,就OK了。
不過用這種方法老是讓人有一種代碼亂鬨哄的感覺,我最後比較學習了一下c#的各種方式後,設計如下
把整個引擎(先不自量力的這麼稱呼吧),分為介面和實現兩個部分,介面部分就是單純的interface,實現部分對外不公開。
先清晰的把介面都寫出來,絲毫不吝惜的使用了介面繼承。
在實現部分只使用單繼承實現介面。
然後再clge_system這裡集中所有的介面建立介面
然後在使用部分 Game.Initialize 處初始化 圖形引擎
Game.Update調用情境的Update部分介面。Update我分開成幾個,考慮到多個RT繪製的情況下不會全部Update。先為以後的posteffect和情境效果做好準備。
Game.Draw裡添加上情境的繪製介面。
基本的結構介紹完了,接下去進入一個比較無趣的填充代碼的階段。可能有一段時間看不到大的進展了。
我們的目標是 4096超大地形。分塊支援(塊大小從16*16-128*128)四層貼圖混合。每層貼圖都可以有: diffuse, 高光過濾,normalmap。根據塊的層設定自動產生適合的shader來渲染,地形渲染採用vectex texture方式,CPU指定每塊的lod層級,GPU處理地形高度變換和lod融合。
輸入方面為了完全相容多點觸摸,我設計採用鍵盤和滑鼠類比多點觸摸的方式:
這是一份不完整的實現,僅測試,保證了平台操作的統一性。
滑鼠右鍵和滾輪,對不起,這裡滑鼠只是個觸摸模擬器,我不會對他們做任何支援。
我對將來的遊戲介面設想如下,螢幕上只有左下角有一個按鍵。按住顯示菜單,鬆開就隱藏,需要另一隻手指操作菜單。
在pc上的操作就是按住alt鍵出菜單,鬆開消失,有菜單時用滑鼠左鍵進行操作。
需要多點操作進行的操作有縮放,旋轉。平移用一隻手指即可。縮放旋轉只需要一隻手指保持,移動一隻手指即可。
在pc上縮放旋轉為按住ctrl鍵,螢幕中心被手指按下,介面會給出提示,滑鼠再進行操作就會和螢幕中心這個點一起做多點觸摸判斷。
要想優秀的多點觸摸體驗,換電腦吧^_^