直接切入正體回憶以前Direct3D中的空間向量圖形知識,以及研究Unity3D裡是怎麼表示的。
Vector3:
Vector3這詞最早是誰發明的無從考證了,但是Unity3D裡出現了這個名詞的時候,我才意識到這個不是D3D和openGL才有的變數名,D3D裡叫做 D3DXVECTOR3繼承自_D3DVECTOR結構體,其中_D3DVECTOR結構體只有3個單精確度數X,Y,Z。用於表示向量。
Unity3D中Vector3類定義(唯寫有用的):
屬性:
x,y,z 表示一個空間向量。
this 用於訪問x,y,z三個資料使用數組的方式訪問,比如[0][1][2]
normalized 返回單位化向量後的值(唯讀)。單位化向量是個很重要的概念,他常常是各種計算的基點,他保證了在不改變方向的前提下,使向量長度變為1。公式如下:
magnitude 返迴向量長度值(唯讀),這詞取得真怪,反正就是向量的模運算,得到向量的長度。公式就是x平方+y平方+z平方然後根號便是。這都不記得了趕緊回家面壁。
sqrmagnitude 返迴向量的平方長度(唯讀)。上面那個不開根號就是了。
直接切入正體回憶以前Direct3D中的空間向量圖形知識,以及研究Unity3D裡是怎麼表示的。
Vector3:
Vector3這詞最早是誰發明的無從考證了,但是Unity3D裡出現了這個名詞的時候,我才意識到這個不是D3D和openGL才有的變數名,D3D裡叫做 D3DXVECTOR3繼承自_D3DVECTOR結構體,其中_D3DVECTOR結構體只有3個單精確度數X,Y,Z。用於表示向量。
Unity3D中Vector3類定義(唯寫有用的):
屬性:
x,y,z 表示一個空間向量。
this 用於訪問x,y,z三個資料使用數組的方式訪問,比如[0][1][2]
normalized 返回單位化向量後的值(唯讀)。單位化向量是個很重要的概念,他常常是各種計算的基點,他保證了在不改變方向的前提下,使向量長度變為1。公式如下:
magnitude 返迴向量長度值(唯讀),這詞取得真怪,反正就是向量的模運算,得到向量的長度。公式就是x平方+y平方+z平方然後根號便是。這都不記得了趕緊回家面壁。
sqrmagnitude 返迴向量的平方長度(唯讀)。上面那個不開根號就是了。
方法:
Scale(a:vector3,b:vector3):vertor3 縮放,返回a的每個座標乘以b的相對應的每個座標。注意他是靜態函數。
Normalize() 向量化,注意magnitude向量長度會變為1.
類特有的一些屬性(直接粘help的了):
zero Shorthand for writing Vector3(0, 0, 0)
one Shorthand for writing Vector3(1, 1, 1)
forward Shorthand for writing Vector3(0, 0, 1)
up Shorthand for writing Vector3(0, 1, 0)
right Shorthand for writing Vector3(1, 0, 0)
Maxtrix4*4:
矩陣也是3D圖形學一個重要的概念,在D3D裡用的很平凡,但是U3D裡好像都已經封裝到各個Object上去了,所以很容易忽視掉,但不能忽視它的存在。在3D世界裡,每個物體均有自身的世界矩陣,攝像機有攝像機矩陣,投影情境有projection矩陣,對頂點、向量、物體實施各種平移、旋轉、縮放都是通過矩陣來完成的。電腦3D物體的標準4×4矩陣是這樣定義的:(表示不出來矩陣大括弧,請讀者就當左4行的[和右4行的]當成一對大括弧)
[ x, y ,z ,0] <- 物體的右方向向量
[ x, y ,z ,0] <- 物體的上方向向量
[ x, y ,z ,0] <- 物體的前方向向量
[ x, y ,z ,1] <- 物體所在的座標
注意:前三行的座標一定是互有90度的,(除非特殊情況,例如空間扭曲之類的=.=)因為他們是物體的三個座標軸。第四列的 0 0 0 1 是為了補齊4*4矩陣,為了計算方便而已。
矩陣一樣有單位矩陣和0矩陣,
[1 0 0]
[0 1 0] 其他的我就不說了,在Unity裡頭是完全封裝的(見Transform)
[0 0 1]
Transform:
這個就是U3D所封裝的矩陣運算了,用於縮放,平移,還有定位(這個囧,他把矩陣給放這用了,所有物體都可以用transform類型來存放)。Transform所實現的功能不過就是物體矩陣的運算罷了,具體如下:
Variables
position Vector3類型,物體位置,相對於全局座標系的值。就是矩陣的最後一行的值。
localPosition Vector3類型,物體相對於父元素的位置.
eulerAngles Vector3類型,旋轉後的歐拉角相對全局座標的值。簡單理解為各向量座標所轉動的值就好了。
localEulerAngles Vector3類型,相對父元素的歐拉角。
right Vector3類型,表示x軸(U3裡紅色的軸)方向的單位向量。
up Vector3類型,表示y軸(U3裡綠色的軸)方向的單位向量。
forward Vector3類型,表示z軸(U3裡藍色的軸)方向的單位向量。
rotation Quaternion類型(quatermion就是個四維數,比vector3多一個w變數表示旋轉角度的),全局座標旋轉。.
localRotation Quaternion類型,本地座標的旋轉度數(相對父元素)。
localScale Vector3類型,相對本地座標系縮放(就是矩陣的乘法)
parent Transform類型,他的父元素。
worldToLocalMatrix Matrix4*4類型,把一個點從全局座標系的位置轉換為本地座標系位置。(終究得用矩陣,哈哈)唯讀
localToWorldMatrix Matrix4*4類型,把一個點從本地座標系轉換為全局座標系。(唯讀)
root Transform類型,返回最上層的那個Transform,就是他父親的父親的父親的。。。(如果有的話)
childCount int型,你子項目的數量。。。
lossyScale Vector3類型,相對全局座標系縮放。
Functions
Translate (translation : Vector3, relativeTo : Space=Space.Self) : void 平移物體,space可以是Self和World,這個不用說了吧
Rotate (eulerAngles : Vector3, relativeTo : Space = Space.Self) : void 繞歐拉角度的向量旋轉
RotateAround (point : Vector3, axis :Vector3, angle : float) : void 點point按axis的軸旋轉angle度
LookAt (target : Transform, worldUp :Vector3 ) : void 讓這個物體的z軸面向target物體
TransformDirection (direction : Vector3) : Vector3 將direction從本地座標轉換為全局座標
InverseTransformDirection (direction : Vector3): Vector3 將derection從全局座標轉換為本地座標
TransformPoint (position :Vector3): Vector3 同理
InverseTransformPoint (position : Vector3) : Vector3
DetachChildren () : void 解除所有子物件
Find (name : string) : Transform 按名字尋找並返回子物件
IsChildOf (parent : Transform) : bool 看他是不是別人的子物件