程式碼編譯環境Visual Stuido 2010, Windows Phone 7 SDK, XNA 4.0 Game Studio, 下載連結:
http://files.cnblogs.com/aawolf/XNA_aawolf_3D.rar
今天有點空餘時間,在看Windows Phone 7的開發。看到Silverlight for phone和XNA 4.0的開發文章已經有了不少,而且品質很高。我就來說說XNA 4.0 的3D開發這個領域吧,正好跟目前的工作有些關係,而且XNA 4.0的3D類庫設計 的非常好,比iPhone和Android的OpenGLES類庫高出一個檔次。以後學習3D開發 ,用XNA類庫也是個不錯的選擇,而且Windows Phone模擬器對3D的支援也非常好 。唯一的遺憾是,Windows Phone不支援C++的3D開發。
如果做過Zune上XNA 3.1開發的朋友可能會記得,在XNA 3.1中是不支援3D開 發的,XNA 4.0中加入的3D支援類,主要包含在 Microsoft.Xna.Framework.Graphics命名空間中。如果XNA 4.0中的3D概念與 OpenGLES十分相似,我們可以找到很多相對應的函數、方法等,某種意義上, XNA 4.0的3D支援是對OpenGLES 2.0的封裝。
一.一個簡單的3D程式
我們就從一個簡單的3D程式開始吧,這個程式的原來介紹在下面這個連結裡 。
http://msdn.microsoft.com/en-us/library/bb203926.aspx
不過移植到Windows Phone 7上時,還是遇到了一些小問題,有的是文檔的問 題,有的是介面變化。如何在Visual Studio 2010裡建立XNA 4.0的工程就不多 說了,大家可以參考我寫的《Windows Phone開發工具初體驗》,連結如下:
http://www.cnblogs.com/aawolf/archive/2010/08/28/1811438.html
XNA 4.0的程式是派生自Microsoft.Xna.Framework.Game的類,開發人員需要重 載Game的四個方法:Initialize(初始化)、LoadContent(載入內容)、 UnloadContent(卸載內容)、Update(更新)和Draw(繪製)等方法。
首先,我們在Game1類中加入所需要的一些私人變數:
Matrix worldMatrix;
Matrix viewMatrix;
Matrix projectionMatrix;
VertexPositionNormalTexture[] cubeVertices;
VertexDeclaration vertexDeclaration;
VertexBuffer vertexBuffer;
BasicEffect basicEffect;
Martrix 的中文名叫“矩陣”,還有個翻譯叫“駭客帝國”……扯遠了,什 麼是矩陣?我們就不解釋了,只要知道矩陣是一切3D線性變化的基礎就可以了。 我們不知道矩陣是什麼,卻身處其中。在Game1類中用了三個矩陣:worldMatrix 用來描述全局座標系;viewMatrix用來描述攝影機座標系;projectionMatrix用 來描述投影座標系。這些都是3D圖形學的概念,不解釋了。
另外兩個重要的變數是vertexBuffer和basicEffect。vertexBuffer包含了一 系列的向量,這些向量構成了我們要顯示的正方體的各個頂點;basicEffect用 來描述一個基礎的渲染效果,其中描述了座標系、顏色和燈光等基本的要素,這 些要素是3D圖形顯示的基礎。