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 }
好了,搞定了,看看最後的效果如何: