Balder 3D開發系列之--建立天空盒

1、天空盒的概念html

       天空盒是一種讓計算機遊戲屏幕背景具備更廣闊視野的一種方法,當使用天空盒的時候,水平畫面被限制在一個立方體當中,背景中遙遠的山川,遠處的建築,還有天空等等都被投射到了立方體的各個面(這是使用立方體投影貼圖的方式 cube mapping)。經過這樣的方式來建立逼真的三維環境。更詳細的介紹,請參見http://en.wikipedia.org/wiki/Skybox_(video_games)下面是本文最終的效果圖片:vim

 

2、Balder中的天空盒app

在balder引擎中,提供了一個現成的SkyBox,因此咱們要作的只要是使用它,並對它進行貼圖就好了,固然,你會問,這究竟是怎麼在silverlight中實現的,這個問題,具體能夠去參看它的源碼,本系列只是關於Balder的基本運用篇,因此暫不考慮其實現原理等,有機會的話,後續文章會有講解。那麼,接下來,咱們來看看SkyBox到底怎麼使用,基本代碼咱們沿用Balder中的材質貼圖那篇文章。框架

 

3、天空盒實戰演練ide

爲了使文章看起來儘可能簡單,在之後的文章中,如無特殊狀況,會盡可能使用以前代碼(提升代碼重用率),並且省去基本框架代碼,只寫與本節相關的關鍵代碼。切入正題,若是想使用SkyBox必須引入如下命名空間:spa

 xmlns:Object="clr-namespace:Balder.Objects;assembly=Balder"component

它與Geometry,Flat並列在Obejects中,對於前面兩個東西,以前其實咱們都已經使用過了,Geometry中的Box,Flat中的Sprite。而今天的主角,SkyBox的使用方法,大體也與前面的相同。直接看代碼:xml

 1               <  Execution:Game.Skybox  >  
  2                     <  Object:Skybox   IsEnabled  ="True"  
  3                       Front  ="/MaterialDemo;component/Assets/skybox_front.JPG"  
  4                       Back  ="/MaterialDemo;component/Assets/skybox_back.JPG"  
  5                       Top  ="/MaterialDemo;component/Assets/skybox_top.JPG"  
  6                       Bottom  ="/MaterialDemo;component/Assets/skybox_bottom.JPG"  
  7                       Left  ="/MaterialDemo;component/Assets/skybox_left.JPG"  
  8                       Right  ="/MaterialDemo;component/Assets/skybox_right.JPG"  
  9                         />       
 10                 </  Execution:Game.Skybox  > htm

 

從代碼中能夠看出,SkyBox是Game對象的一個屬性,而SkyBox中貼圖的屬性就是Front,Back,Top,Bottom,Left,Right,分別表明立方體的前,後,上,下,左,右。注意,那個IsEnable屬性必定要設置爲True,才能顯示SkyBox。好了,這樣就完成了一個SkyBox。爲了讓觀察者能全方位的觀察到整個SkyBox,咱們在代碼隱藏文件中添加以下控制Camera Position的代碼:對象

 1   public     partial     class   MainPage : UserControl
  2       {
  3             double   _sin  =  0  ;
  4             public   MainPage()
  5           {
  6               InitializeComponent();
  7               DispatcherTimer timer   =     new   DispatcherTimer();
  8               timer.Interval   =   TimeSpan.FromMilliseconds(  20  );
  9               timer.Tick   +=     new   EventHandler(timer_Tick);
 10               timer.Start();
 11           }
 12   
 13             void   timer_Tick(  object   sender, EventArgs e)
 14           {
 15               var x   =   System.Math.Cos(_sin)   *     50  ;
 16               var y   =   System.Math.Sin(  2  *  _sin)   *     50  ;
 17               var z   =   System.Math.Sin(_sin)   *     50  ;
 18               Camera.Position.X  =  x;
 19               Camera.Position.Y  =  y;
 20               Camera.Position.Z   =   z;
 21               _sin   +=     0.006  ;
 22           }

 好了,搞定了,看看最後的效果如何:

Get Microsoft Silverlight

相關文章
相關標籤/搜索