版本:unity 5.4.1 語言:c#
2023年了,使用unity也有一段時間了,略有心得吧,基本上要求一些功能可以拼拼湊湊地做出來,算是入門了吧。
不過很多遊戲上使用的技術還沒有接觸過,比如protobuf、熱更新、shader之類,今年的一開始接觸一下遊戲中常用的技術,然後shader方面好好入門一下。當然好早之前的3d遊戲開發大師也會在今年早期看完。
暫定這些目標吧,好好磨練一下技術。
今天給大家帶來的是矩陣和四元數,首先矩陣說實話在unity今天還是第一次,找api都花了點時間,不過使用下來還是挺容易的,跟代數很像。
首先是最簡單的平移矩陣:(看的實戰核心技術,不過書裡很多矩陣都是錯的)
1 0 0 0
0 1 0 0
0 0 1 0
tx ty tz 1
tx、ty、tz是x、y、z軸移動的數值,具體使用的話,使用matrix4x4 mat = new matrix4x4();建立矩陣物件,然後乘以new vector4(x, y, z, 1f)表示的三維座標,獲得的vector4就是移動後的座標。後面的矩陣也都是這個原理,就不會再贅述了。
縮放矩陣:
sx 0 0 0
0 sy 0 0
0 0 sz 0
0 0 0 1
x軸旋轉矩陣:
1 0 0 0
0 cos(a) sin(a) 0
0 -sin(a) cos(a) 0
0 0 0 1
y軸旋轉矩陣:
cos(a) 0 -sin(a) 0
0 1 0 0
sin(a) 0 cos(a) 0
0 0 0 1
z軸旋轉矩陣:
cos(a) -sin(a) 0 0
sin(a) cos(a) 0 0
0 0 1 0
0 0 0 1
以上就是常用的幾個矩陣了。
四元數其實有點像是矩陣的效果,不過計算更加複雜難以理解,我這邊參考了candycat的教程給出幾個結論。
四元數的表示為(v, w),其中v類似是乙個三維座標。
單位長度的乙個旋轉軸(x, y, z)和角度a,則對應的四元數為((x, y, z)*sin(a/2), cos(a/2)) 。
建立四元數的幾種方法:
quaternion.euler(vector3) 以尤拉角建立四元數
quaternion.axisangle(vector3,float) 相對於某個方向旋轉某個角度的四元數
quaternion.fromtorotation(vector3,vector3) 起始方向到結束方向的四元數
quaternion.lookrotation(vector3) 朝向為正方向,旋轉軸為上方向,旋轉到想要方向的四元數
使用四元數:
operator* 四元數相乘,旋轉累積
operator* vector3左乘四元數,點旋轉到對應點
lerp 線性插值
slerp 球形插值
lerpunclamped 非鉗制線性插值,可以突破0和1的界限
slerpunclamped 非鉗制球性插值,可以突破0和1的界限
尤拉角的旋**
transform.rotate(vector3) 就是transform的3個值,需要注意的是如果設定x為90度,則移動其他的緯度都會改變y,這就是萬向節鎖。
常用的方法估計就以上幾個,如果後面有好用的方法,我還會再補充。
unity3d四元數和旋轉矩陣
quaternion中存放了x,y,z,w四個資料成員,可以用下標來進行訪問,對應的下標分別是0,1,2,3。主要介紹幾個函式 1 根據兩個向量計算出旋轉量,計算出來的旋轉量為從fromdirection旋轉到todirection的旋轉量 static quaternion fromtorotat...
unity3d四元數和旋轉矩陣
quaternion中存放了x,y,z,w四個資料成員,可以用下標來進行訪問,對應的下標分別是0,1,2,3。主要介紹幾個函式 1 根據兩個向量計算出旋轉量,計算出來的旋轉量為從fromdirection旋轉到todirection的旋轉量 static quaternion fromtorotat...
Unity3D 四元數的理解
環境 unity2018.3 語言 c 複數 首先我來考慮複數軸i,i的定義為i 2 1。按照旋轉的角度來理解的話,從1變換到 1,1實際上是旋轉了180度到了 1。那麼旋轉90度呢?這個時候實際上就旋轉到了複數軸上了,我們便用i來表示這個軸。在2維空間中事情比較簡單。設點p為 x,y 以複數的概念...