簡而言之,3D模型就是三維的、立體的模型,D是英文Dimensions的縮寫。html
3D模型也能夠說是用3Ds MAX建造的立體模型,包括各類建築、人物、植被、機械等等,好比一個大樓的3D模型圖。3D模型也包括玩具和電腦模型領域。程序員
互聯網的形態一直以來都是2D模式的,可是隨着3D技術的不斷進步,在將來的時間裏,將會有愈來愈多的互聯網應用以3D的方式呈現給用戶,包括網絡視訊、電子閱讀、網絡遊戲、虛擬社區、電子商務、遠程教育等等。甚至對於旅遊業,3D互聯網也可以起到推進的做用,一些世界名勝、雕塑、古董將在互聯網上以3D的形式來讓用戶體驗,這種體驗的真實震撼程度要遠超如今的2D環境。web
(1)相信你們通過前一篇博客《Unity3D遊戲開發初探—1.跨平臺的遊戲引擎讓.NET程序員新生》初步認識Unity3D以後,對於Hierarchy中的遊戲對象有了初步認識了吧。Hierarchy中顯示的是GameObject—遊戲對象,每一個遊戲都至少有一個Camera,點擊Camera就能夠在Preview(預覽視圖)中看到攝像機的視角畫面。網絡
(2)每一個GameObject都有三組屬性:Position(位置)、Rotation(旋轉、角度)與Scale(縮放大小)三組屬性。Position控制遊戲對象在三維空間中的座標,Rotation控制遊戲對象顯示的角度,而Scale則控制遊戲對象縮放的比例。編輯器
Unity3D採用的是左手座標系:沿屏幕橫向爲x軸,沿屏幕縱向爲y軸,垂直屏幕方向爲z軸。右、上、背向觀衆的三個方向爲正方向。也許這麼闡述你們仍是不明白,但不要緊,咱們先來看看空間幾何常見的座標系類型。ide
①空間直角座標系學習
以空間一點O爲原點,創建三條兩兩垂直的數軸;x軸(橫軸),y軸(縱軸),z軸(豎軸),這時創建了空間直角座標系Oxyz,其中點O叫作座標原點,三條軸統稱爲座標軸,由座標軸肯定的平面叫座標平面。this
各軸之間的順序要求符合右手法則,即以右手握住Z軸,讓右手的四指從X軸的正向以90度的直角轉向Y軸的正向,這時大拇指所指的方向就是Z軸的正向。這樣的三個座標軸構成的座標系稱爲右手空間直角座標系。與之相對應的是左手空間直角座標系。url
通常在數學中更經常使用右手空間直角座標系,在其餘學科方面因應用方便而異。三條座標軸中的任意兩條均可以肯定一個平面,稱爲座標面。它們是:由X軸及Y軸所肯定的XOY平面;由Y軸及Z軸所肯定的YOZ平面;由X軸及Z軸所肯定的XOZ平面。spa
這三個相互垂直的座標面把空間分紅八個部分,每一部分稱爲一個卦限。位於X,Y,Z軸的正半軸的卦限稱爲第一卦限,從第一卦限開始,在XOY平面上方的卦限,按逆時針方向依次稱爲第二,三,四卦限;第一,二,三,四卦限下方的卦限依次稱爲第五,六,七,八卦限。
②右手座標系
右手座標系在中學學空間幾何的時候常常會用到。在三維座標系中,Z軸的正軸方向是根據右手定則肯定的。右手定則也決定三維空間中任一座標軸的正旋轉方向。要標註X、Y和Z軸的正軸方向,就將右手背對着屏幕放置,拇指即指向X軸的正方向。伸出食指和中指,以下圖所示,食指指向Y軸的正方向,中指所指示的方向便是Z軸的正方向。要肯定軸的正旋轉方向,以下圖所示,用右手的大拇指指向軸的正方向,彎曲手指。那麼手指所指示的方向便是軸的正旋轉方向。
③左手座標系
伸出左手,讓拇指和食指成「L」形,大拇指向右,食指向上。其他的手指指向前方。以下圖所示,這樣就創建了一個左手座標系。拇指、食指和其他手指分別表明x,y,z軸的正方向。判斷方法:在空間直角座標系中,讓左手拇指指向x軸的正方向,食指指向y軸的正方向,若是中指能指向z軸的正方向,則稱這個座標系爲左手直角座標系.反之則是右手直角座標系。
④左手座標系與右手座標系的比較
左手座標系是X軸向右,Y軸向上,Z軸向前,右手座標系的Z軸正好相反,是指向「本身」的,在計算機中一般使用的是左手座標系,而數學中則一般使用右手座標系。計算機裏面其實不少也有用右手座標系,這個只是根據實際應用不一樣,沒有說哪一個比較好。
如今,相信你們至少對於左手座標系有了一個比較形象的瞭解了,那麼這裏介紹的目的也就達到了。(貼圖好麻煩的,麼麼嗒)
若是你們有心的話,會發現咱們在第一篇博客裏邊寫的代碼裏引用了一個Vector3的類,那麼這個類是幹啥用的呢?咱們如今來初步瞭解一下。
Vector3是Unity中定義的一個含有x、y、z三個字段的類,能夠表示位置點,也能夠表示一個向量。
Vector3乘以數值表示對向量的三個值乘以相應的值,假設v1,v2是兩個向量,則v1-v2表示從v2指向v1的向量,以下圖所示。擴展:後面咱們在作打箱子游戲的時候,當一個小球向指定區域發射時,就是一個向量減法的典型應用。已知小球在攝像機位置(便是一個攝像頭所在的向量,假設其爲v2),以及鼠標所指向的位置座標後(即爲目標地向量,假設其爲v1),經過v1-v2便可獲得要發射的具體方向的向量(至關於告訴小球朝哪一個目標方向發射!)。
在第一篇博客中的HelloCube程序中,咱們讓Cube實現了翻轉。此次,咱們讓Cube實現先後移動,讓遊戲對象學會「走路」這項技能。
(1)在Hierarchy中Create一個Cube(立方體),而且加入一個Direction Light(平行光);以後,將Cube的Position屬性設置爲(0,0,-4),這樣鏡頭會近一點;將Cube的Scale屬性設置爲(1,1,1),這樣Cube會放大一點;
(2)在Project中新增一個C# Script,隨便取個名字,這裏取名爲:CubeController。雙擊該腳本,在Update方法中輸入如下代碼:
1 using UnityEngine; 2 using System.Collections; 3 4 public class CubeController : MonoBehaviour { 5 6 // Use this for initialization 7 void Start () { 8 9 } 10 11 // Update is called once per frame 12 void Update () { 13 if(Input.GetKey(KeyCode.UpArrow)) 14 { 15 transform.Translate(Vector3.forward*0.2f); 16 } 17 18 if(Input.GetKey(KeyCode.DownArrow)) 19 { 20 transform.Translate(Vector3.back*0.2f); 21 } 22 }
(3)點擊預覽按鈕:按鍵盤Up鍵,Cube會朝前移動;按Down鍵,Cube會日後移動;
有了以上的基本的3D理論基礎以後,咱們再來作一個Unity3D小案例:地球圍繞太陽轉。所謂地球圍繞太陽轉,指的是指地球繞太陽作週期性轉動。(若是你要問爲何地球圍繞太陽轉,請問哥白尼先生和牛頓童鞋)
(1)首先Create如下游戲對象:兩個Sphere,一個Direction Light;並將其中一個Sphere命名爲Earth,另外一個Sphere命名爲Sun;設置Sun的Scale爲(3,3,3),讓太陽這個大球體顯得大一點;而將Earth的Position設置爲(5,0,0),讓Earth顯示在太陽的右邊;
(2)爲了讓太陽更像太陽一點,咱們在Project中Create一個Material(材質,所謂材質就是修飾遊戲對象的),命名爲SunMaterial,這裏主要是爲太陽增長一個顏色。
選中SunMaterial,雙擊Main Color,彈出顏色選擇器,在顏色選擇器中選則一個深黃色的區域。
(3)爲了讓地球更像地球一點,這裏咱們爲地球增長一個背景圖片—地球貼圖。(能夠從網上搜索一下,也能夠從本文底部給出的URL下載)下載完成以後,將地球貼圖拖動到項目中,最後將貼圖拖動到Earth對象上。最後效果以下圖所示。
(4)新增一個C# Script,命名爲EarthControl。雙擊該腳本文件,在編輯器中寫入如下代碼。這裏要注意,經常使用的遊戲對象通常設置爲全局變量,而且在Start方法中進行初始化(這裏是經過GameObject的Find靜態方法獲取,你能夠理解爲JavaScript的Dom操做GetElementById("Earth"))。遊戲對象的transform組件用於控制物體的位置,旋轉和縮放。
1 using UnityEngine; 2 using System.Collections; 3 4 public class EarthControl : MonoBehaviour 5 { 6 // 定義遊戲對象 7 public GameObject earth; 8 public GameObject sun; 9 10 // Use this for initialization 11 void Start() 12 { 13 // 啓動時獲取遊戲對象 14 earth = GameObject.Find("Earth"); 15 sun = GameObject.Find("Sun"); 16 } 17 18 // Update is called once per frame 19 void Update() 20 { 21 // 使地球對象圍繞着太陽旋轉 22 earth.transform.RotateAround(sun.transform.position, Vector3.up, 0.3f); 23 } 24 }
PS:使用RotateAround()方法,讓地球始終圍繞着太陽在Y軸方向旋轉。參數1表示圍繞旋轉參照點的位置(太陽的位置),參數2表示圍繞旋轉的角度,Vector3.up就是表示Y軸旋轉,參數3表示一次旋轉的速度(long類型,越大則越快)。
(5)腳本寫好以後,將該腳本拖動到Earth上進行綁定。最後,點擊預覽按鈕,便可看到地球圍繞太陽轉的效果了。
本篇主要介紹了遊戲開發中的一些3D模型基礎,涉及到一點中學的空間幾何知識,複習一下對後續學習會有好處。後面會探索一下物理引擎和GUI,但也只是初步的。最後,仍然感謝一下參考文獻的做者,站在大家的肩膀上我能看的更遠,謝謝!
(2)泡泡堂,《左手座標系和右手座標系》:http://www.cnblogs.com/mythou/p/3327046.html