Balder的Geometries裡提供了很多的已有的模型,比如立方體、圓柱等等,但是我們在開發遊戲的時候大多情況下都是使用3D設計工具製作自訂的3D模型,而本篇則介紹的是如何匯入顯示一個自訂的3D模型。
首先我們可以看看Geometries的內建模型,你可以在物件瀏覽器或Geometries.來查看。
裡面的Heightmap我們在後面會專門介紹,今次我們主要介紹Mesh(網格對象),使用它來完成自訂的模型匯入。
然後,請準備好一個3D設計工具,3Dmax或者Maya再或者Lightwave再再或者……,好吧,我們簡單點,使用福士化的3DMax,開啟Max軟體,從Object中拉一個壺出來,選擇檔案->匯出,選擇ASE檔案格式。
儲存名字為teapot.ase的檔案,將這個檔案添加到我們的工程中,這個工程完全可以從L1中修改,請參看或下載《Silverlight C# 遊戲開發:L1 3D世界的建造》
將檔案的編譯方式修改成為Resource,即資源方式,建立Silverlight控制項名字為Lesson02,然後添加如下代碼到建構函式中
//L1
Game game = new Game() { Width = 600, Height = 400 };
game.Camera = new Camera();
game.Camera.Position = new Coordinate(100, 150, 100);
game.Camera.Target = new Coordinate(0, 0, 0);
game.Children.Add(new OmniLight() { Position = new Coordinate(0, 0, 0) });
//L2
//new一個網格對象Mesh
Mesh Teapot = new Mesh();
//設定座標
Teapot.Position = new Coordinate(0, 0, 0);
//開啟互動操作(可使用滑鼠旋轉)
Teapot.InteractionEnabled = true;
//讀取檔案的名字,當前支援ase的檔案格式
Teapot.AssetName = new Uri("/Balder_Studio;component/Res/teapot.ase", UriKind.Relative);
//將茶壺添加到Game當中
game.Children.Add(Teapot);
LayoutRoot.Children.Add(game);
請注意,AssetName賦值的Uri的目錄和你添加到的位置需要一樣,這方面如果不是太明白,請參看後面附帶的工程,原始碼下載。
這時你會發現可能會有一些錯誤,那是因為沒有添加命名控制項引用,添加命名空間的Using到檔案頭部:
using Balder.Execution;
using Balder.Lighting;
using Balder.View;
using Balder.Math;
using Balder.Objects.Geometries;
好了,不要忘記將MainPage中的控制項添加改成Lesson02,運行起來看看效果吧。下面是Silverlight程式:
如果你覺得太小,可以修改攝像機的座標來調整觀測的範圍,關於攝像機和燈光,我們在下一個篇章中介紹。
原始碼:點擊這裡下載工程
工程中如果缺少Balder.dll請在這裡快速下載:SL4_Balder.rar
推薦Silverlight遊戲開發部落格:深藍色右手