Silverlight 5 輕松開啟絢麗的網頁3D世界
Silverlight 5已正式發布,新版本的最大亮點是通過引入輕量級的XNA游戲開發框架,從而可以在瀏覽器內輕松實現網頁的3D應用。與此同時,微軟正式發布了Silverlight Toolkit (December 2011) for Silverlight 5,這是一個超出開發者想象的工具包,你可以在這里下載,在這一版本中提供了大量對3D的支持工具,提供與3D項目相關的多種Visual Studio項目模板(如圖1所示),包括:
lSilverlight3DApp:Silverlight 3D主程序(客戶端)
lSilverlight3Dlib:Silverlight 3D主程序類庫(客戶端類庫)
lSilverlightEffect:Silverlight 3D特效庫(客戶端庫)
lSilverlight3DAppContent:Silverlight 3D主程序附帶的素材庫(客戶端)
lSilverlight3DWeb:Silverlight 3D寄宿的Web應用程序(服務端)。
lSilverlight3DWebContent:直接發在服務器端的素材庫,用於減少XAP包的大小。
圖1 Toolkit中3D模板項目
使用Silverlight Toolkit可以非常容易地實現以前在Web中無法想象的3D特效,包括粒子效果(如圖2)、光照效果、角色Skinning效果(如圖3)。
圖2 通過粒子效果形成煙霧特效
圖3 角色Skinning效果
注:使用Silverlight Toolkit for Silverlight 5新建Silverlight3D項目前,需要在開發環境中安裝XNA Game Studio 4否則無法打開素材項目。
伴隨Silverlight 5正式版發布,已經有第三方3D引擎進行了框架更新,這其中包括非常優秀的Babylon 3D開源引擎,有興趣的朋友可以通過一下地址獲取基於Silverlight 5正式版的3D引擎源碼,其中還包括一個頂點着色器、一個像素着色器、一個3D模型導入器和一個示例。對於主流的3D建模軟件(包括MAYA、3D Studio Max、Modo、Blender)來說都可以導出.obj文件,這一類型文件可以無縫地集成到Babylon 3D開源引擎中,使得開發Silverlight 3D應用具有更好的兼容性(圖4是源碼包中的示例)。
圖4 Babylon 3D示例
對於Silverlight 5而言,瀏覽器內的權限控制顯得有點苛刻,如果我們需要在實際項目中開發瀏覽器內的3D應用,那么需要打開應用在瀏覽器內的權限,操作步驟如下:
1.在Silverlight項目屬性中,勾選“允許在瀏覽器外運行應用程序“和”在瀏覽器內運行時需要提升的信任“(如圖5所示),這時項目的Properties目錄下將產生對應的OutOfBrowserSettings.xml和InBrowserSettings.xml兩個文件,而后續步驟的設置將改變這兩個文件的內容。
圖5 提升Silverlight應用程序信任級別
2.點擊“瀏覽器外設置”,勾選“使用GPU加速”與“在瀏覽器之外運行時需要提升的信任” (如圖6所示),以保證使用GPU加速,如果此兩項不選,則會出現RenderModeReason.GPUAccelerationDisabled的情況。
圖6 開啟GPU加速
3.現在我們需要將第一步生成的OutOfBrowserSettings.xml和InBrowserSettings.xml兩個文件加入到生成的XAP文件內容中,具體做法是在項目中分別選擇兩個文件,在其屬性中的“生成操作”選擇為“內容”(如圖7所示)。
圖7 權限配置文件的生成操作選擇
4.最后由於Silverlight 5正式版考慮到客戶端環境的差異(包括有無顯卡、顯卡是否支持3D加速等多種情況),加入了對瀏覽器內3D內容的顯示權限管理,因此,我們需要根據客戶端實際情況提示使用者打開對本網站的3D顯示權限。代碼如下:
if (GraphicsDeviceManager.Current.RenderMode != RenderMode.Hardware){ switch (GraphicsDeviceManager.Current.RenderModeReason) { case RenderModeReason.GPUAccelerationDisabled: MessageBox.Show("3D加速被禁用,請啟用顯卡3D加速后刷新本頁面!"); break; case RenderModeReason.SecurityBlocked: MessageBox.Show("請在右鍵的Silverlight菜單中打開“權限”,找到本站點域名后允許3D安全策略!"); break; case RenderModeReason.Not3DCapable: MessageBox.Show("沒有找到顯卡!"); break; case RenderModeReason.TemporarilyUnavailable: MessageBox.Show("暫時無法使用!"); break; }} |
瀏覽器的權限可通過Silverlight程序的右鍵菜單中選擇“權限”選項卡,然后找到應用程序的宿主域名,並將其3D權限設置為“允許”(如圖8所示)
圖8 客戶端3D權限設置
如果您想體驗Silverlight 5絢麗的網頁3D世界,筆者已經為你整理了更多精彩的示例,還等什么?現在就點擊下面的網頁來體驗一下吧!
http://space.silverlightchina.net/xpeter/demo/3D.htm
Silverlight 5 Toolkit的3D示例程序源碼,您可以在其安裝目錄下找到,默認目錄如下:
C:\Program Files\Microsoft SDKs\Silverlight\v5.0\Toolkit\dec11\Source
解壓縮該目錄下的Sample source code.zip,可以在其中的Xna目錄下找到示例源碼。
本文筆者只是給大家介紹了Silverlight 5中3D Web應用中的鳳毛麟角,對於Silverlight來說構建類似於XNA的大型3D應用基本已經具備條件。