【Unity】矩陣運算


 

 

void Start () {
		
        Vector3 pos = new Vector3(7,8,9);
        Quaternion q = Quaternion.identity;
        q.eulerAngles = new Vector3(0, 0, 0);
        Vector3 s = new Vector3(1,2,3);

        Matrix4x4 m1 = Matrix4x4.TRS(pos, q, s);

        Debug.Log(m1);

	}

  

1.00000 0.00000 0.00000 7.00000
0.00000 2.00000 0.00000 8.00000
0.00000 0.00000 3.00000 9.00000
0.00000 0.00000 0.00000 1.00000

 

 q.eulerAngles = new Vector3(0, 90, 0);

 

0.00000 0.00000 3.00000 7.00000
0.00000 2.00000 0.00000 8.00000
-1.00000 0.00000 0.00000 9.00000
0.00000 0.00000 0.00000 1.00000

 

 

 

q.eulerAngles = new Vector3(0, 180, 0);

  

-1.00000 0.00000 0.00000 7.00000
0.00000 2.00000 0.00000 8.00000
0.00000 0.00000 -3.00000 9.00000
0.00000 0.00000 0.00000 1.00000

 

 

 

 

 

 

http://www.cnblogs.com/wywnet/p/3585075.html

Vector3: 
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   看他是不是別人的子對象 
 
 

在unity3D里面。兩個向量的點乘所得到的是兩個向量的余弦值,也就是-1 到1之間,0表示垂直,-1表示相反,1表示相同方向。

兩個向量的叉乘所得到的是兩個向量所組成的面的垂直向量,分兩個方向。

 

簡單的說,點乘判斷角度,叉乘判斷方向。

形象的說當一個敵人在你身后的時候,叉乘可以判斷你是往左轉還是往右轉更好的轉向敵人,點乘得到你當前的面朝向的方向和你到敵人的方向的所成的角度大小。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM