




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、9/9u3d0用qaenion來對一個坐標(biāo)點進(jìn)行旋轉(zhuǎn)在unity3d中,用四元數(shù)來表示旋轉(zhuǎn),四元數(shù)英文名叫quternion 比如ranform。rotaton就是一個四元數(shù),其由四個部分組成 Quaeni = (x +yj k w ) = (x,y,z,w) 1 有四元數(shù)的定義 2。 有關(guān)四元數(shù)旋轉(zhuǎn)方面的基本概念和用法 ueron中 (,y,z) 跟旋轉(zhuǎn)軸有關(guān), 與繞旋轉(zhuǎn)軸旋轉(zhuǎn)的角度有關(guān),因為它們都要經(jīng)過代數(shù)運算才能得出旋轉(zhuǎn)軸和旋轉(zhuǎn)角度 在nity3d中, quaernon 的乘法操作 (ort *) 有兩種操作: (1) quaterni terion , 例如 q t * p;這是將一個
2、點先進(jìn)行t操作旋轉(zhuǎn),然后進(jìn)行p操作旋轉(zhuǎn). (2) Quatenin *Vector3, 例如 p: ector3,t :Quernion , q : uterion; qt * p;這是將點 進(jìn)性t操作旋轉(zhuǎn); 我進(jìn)行的是第2種操作,即對一個向量進(jìn)行旋轉(zhuǎn); 首先 ,Quaenio 的基本數(shù)學(xué)方程為: Q =co (a/2) i ( * sin(/2))+ (y sin(a/))+ k(z si(/2)) (為旋轉(zhuǎn)角度) w= cs (nle / 2) .x = axs. * si (ange 2) Qy axisy *sin (ange/ ) Q。z xiz *sin (angle / 2) 我
3、們只要有角度就可以給出四元數(shù)的四個部分值,例如我想要讓點M=Vcr3(o,p,q)繞x軸順時針旋轉(zhuǎn)90度;那么對應(yīng)的quaernion數(shù)值就應(yīng)該為: Q : aternion; x=1 sn(9度2) = sn(度) = 0071 Qy 0; Q.z ; Q。w os(0度/2) cos (45度) = .1 Q (0.71, , 0 , 0.71); = *m; (將點m繞 軸(,0,0) 順時針旋轉(zhuǎn)了9度)這是quatrno 的最基本用法,主要給出角度,就可以算出Quaternion,然后對點坐標(biāo)進(jìn)行旋轉(zhuǎn)。四元數(shù)在電腦圖形學(xué)中用于表示物體的旋轉(zhuǎn),在unity中由,y,z,w 表示四個值。四
4、元數(shù)是最簡單的超復(fù)數(shù).復(fù)數(shù)是由實數(shù)加上元素i 組成,其中 = ,。 相似地,四元數(shù)都是由實數(shù)加上三個元素 i、j、k 組成,而且它們有如下的關(guān)系:i = j = k =ij= 1, 每個四元數(shù)都是 、i、j 和k的線性組合,即是四元數(shù)一般可表示為+ bi c +k ,。現(xiàn)在只說說在uniy3D中如何使用Qaein來表達(dá)物體的旋轉(zhuǎn)。基本的旋轉(zhuǎn)我們可以用腳本內(nèi)置旋轉(zhuǎn)函數(shù)traformRoa()來實現(xiàn).但是當(dāng)我們希望對旋轉(zhuǎn)角度進(jìn)行一些計算的時候,就要用到四元數(shù)utrnon了。我對高等數(shù)學(xué)來說就菜鳥一個,只能用最樸素的方法看效果了。Quaterion的變量比較少也沒什么可說的,大家一看都明白。唯一要說
5、的就是yzw的取值范圍是-1,1,物體并不是旋轉(zhuǎn)一周就所有數(shù)值回歸初始值,而是兩周。初始值: (0,0,0,1)沿著y軸旋轉(zhuǎn):8(0,0,0) 6(,0,0,1)540(0,1,,0) 20(,0,0,1)沿著x軸旋轉(zhuǎn):18(1,0,0,0) 360(0,0,0,)54(1,0,0,0) 720(0,0,0,)無旋轉(zhuǎn)的寫法是Quateon.identify現(xiàn)在開始研究uternn的函數(shù)都有什么用。函數(shù)1)funi Angexis(out age : fat,out axi:Vetor3):voidDescritionConvesa rotati to ang-axis representati
6、n這個函數(shù)的作用就是返回物體的旋轉(zhuǎn)角度(物體的軸和世界坐標(biāo)z軸的夾角)和三維旋轉(zhuǎn)軸的向量到變量an 和outais腳本:vra=00;vr b=Vecor3。ero;tfrm。rotaionToAneAxis(a,b);輸入:ansrlocalulrAgle=(0,0,0);輸出: a=0, b=(,0,0);輸入:trasform.oalEarAgl=(0,9,0);輸出:a=90, b(0,1,0);輸入:transormloalEulaAnle=(270,0,0);輸出:a0, =(-1,0,)2)funcion SetmoRotatin(fromDrecin : Vecto3,toDi
7、eton : Vector) :voidDecrionCrees rotation which rtas from fromDiectiont toDiretion。這個函數(shù)的作用是把物體的fomrection旋轉(zhuǎn)到toDicion腳本:var a:Vector3;var :Vecto;va q:Quaternion;vr eadUpDir:ector3;StFroTotation(a,b);trar.otation=q;hedUpDirtrasf。TrnsrmDirectio(Vectr3Frwr);輸入:a=Veco3(0,0,1); b=Vecor3(0,1,0)/把z軸朝向y軸輸出:
8、=(0。7,0,0。7); eadpDir=(0,1,0) 輸入:=Vctor3(,1); =Vcr(1,0,0)/把z軸朝向軸輸出:q=(0,0。,0,。); heUir=(1,0)輸入:a=Veor3(0,,0); b=Vctor3(,0)/把y軸朝向軸輸出: =(0,,-0.,0。); eaUir=(,0,1)funion SLkRotaton(vi :Vecto3, up :etor= Vct3up) : vodescrioCrates tation hat s alnrard wit he the head upwards aong upwrdsLosa ror if t orwad
9、retionizr.這個函數(shù)建立一個旋轉(zhuǎn)使z軸朝向view y軸朝向u。這個功能讓我想起了Maya里的一種攝像機ol,大家自己玩好了,很有趣。腳本:varobj:Tnsfor;var ob: Tasfom;var q:aerion;q.SetookRotato(bj。stion, obj2。posion);traormrotati=q;然后大家拖動obj和oj就可以看到物體永遠(yuǎn)保持z軸朝向ob1,并且以oj2的位置來保持y軸的傾斜度.4)funtiooSrig() :stringeriptinReturns a nicly ormated sting of the Quaternion這個一般
10、用不著吧?看不懂的一邊查字典去Clss Funcions1)四元數(shù)乘法 建議非特別了解的人群就不要用了。作用很簡單,c=a*b (c,a,uaternio)可以理解為=ab但是a*和效果不一樣的。2) =和 !=不解釋了3)stat funtiono (a : Quaterion,b : utrn) : floatDesriptioTheotrodut between tworotaions點積,返回一個flot. 感覺用處不大。Vecor3。Anle()比較常用。4)sttic funcio Anglexis(age : float,axis : Veor3) : QuarnDesction
11、Creaes rotaton hicrotatesag egrearoudaxi.物體沿指定軸向xs旋轉(zhuǎn)角度agle, 很實用的一個函數(shù)也是。腳本:va bj: nsrm;vr ob2: asform;var :uaternion;物體沿obj2的z軸旋轉(zhuǎn),角度等于bj1的z軸。q=QatenionAnlAi(ob1.lalEuarAng., ob2TranforDirection(tr3.frward));transormotatio=q;)atic fctio FromToRotti(romDirecion : Vetor, oDiretin :Vecto3) : QuaternionDe
12、criptons a rotationwhic ttesofromDirectio to oDirctoUsualy you usthis to rtate transorm s thao of it axse. the yaxis follows trge direction toDrecton inorl pac跟SFomToRotaio差不多,區(qū)別是可以返回一個ateron.通常用來讓tansform的一個軸向(例如 y軸)與toiecton在世界坐標(biāo)中同步.)static funcionLookRttion (forward : Vctor3, pwards :Vco3 Vctor3。
13、up) :QaernonDescpineates rotatio tht looksalong rard it he t head upward alonupwadsosnerror iftheforard dieco izro。跟StLoRotto差不多,區(qū)別是可以返回一個Qatenn。7)stic fnction Slep (rom :Qarion,o :Quaternion, :la) : arnonDecripinSphricl ntepoats fm twards t by t從ro 轉(zhuǎn)換到to,移動距離為。也是很常用的一個函數(shù),用法比較多,個人感覺比較難控制.當(dāng)兩個quaterno
14、n接近時,轉(zhuǎn)換的速度會比較慢。 腳本:ar obj1: Trnfo;var =0.1;var:uateion;/讓物體旋轉(zhuǎn)到與bj1相同的方向qQterilerp(asform.rottion, 。rotatn,t);tansfom.tationq;根據(jù)我個人推測,可能t 代表的是r 和t 之間距離的比例。為此我做了實驗并證明了這一點即:qQutrion.Sler(a,b,t);q,a,bQteniont0,q=a+(b)并且t最大有效范圍為0腳本:var oj1: Tranfom;va bj2:ranform;vat=0.1;var :Quarnion;/讓物體obj和oj2 朝向不同的方向
15、,然后改變tqQutrninSlr(bj1rotaion, ob2.rottn,t);ransfom.rotationq;t+Inpu.GtAxs(horizonal”)0.1*Tme.detTime;8)static funon Ler (a : Quaterion, b :Quaternon, t : fla) :QuaternonDeriptionIterpoas otowrds to b tnd nrmlzeste resut afterwards.This i ate a Slerp but los wore if e otatin re fa at跟Serp相似,且比Serp快,但
16、是如果旋轉(zhuǎn)角度相距很遠(yuǎn)則會看起來很差.)static fncion Invers (otaion :Quterni): QutrnioDscripinReurn e Ivere of roaton.返回與rotaio相反的方向10)taticunion Ane(a: aterio, b : Quateo) :fatDecritionReturns heanl indegree betweetwo rotio ad b計算兩個旋轉(zhuǎn)之間的夾角。跟Vctor3Anle() 作用一樣。1)taticfntoul (x :oa,y : oat, :loat) :QuarnionDcipinReu a r
17、otatihat rotatez dgrs around he z axs,x ges roudthe x xis, and y eresaru th y xi (i tha orde).把旋轉(zhuǎn)角度變成對應(yīng)的Qatrnon以上就是Quateni的所有函數(shù)了。應(yīng)用關(guān)于應(yīng)用,就說一個,其他的有需要再補充。Slerp 函數(shù)是非常常用的一個函數(shù),用來產(chǎn)生旋轉(zhuǎn).tatic funtion Slerp (rom : Quaternion, to: Qternion, t :floa) : Qtern對于新手來說,最難的莫過于如何用它產(chǎn)生一個勻速的旋轉(zhuǎn)。如果想用它產(chǎn)生勻速轉(zhuǎn)動,最簡單的辦法就是把form和固
18、定,然后勻速增加t腳本:var j: Trsfrm;vroj2:Trnform;vr see:floa;r =0.1;a q:Quaterion;atrnonSle(obj1rotation, obj2。rttio,);trsformrotation=q;t+=TimedetaTm;但是這并不能解決所有情況。 很多時候fr和都不是固定的,而且上一個腳本也不能保證所有角度下的旋轉(zhuǎn)速度一致.所以我寫了這個腳本來保證可以應(yīng)付大多數(shù)情況.腳本:var arg: Transform;var rotateSpeed=30.0;vat=floa;v q:uaternio;varwatedtaon=uatrnion.FromoRotton(trnsfor.ositon,arge
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 什么的淚水中考語文作文
- 電氣機械維修手冊與指南考核試卷
- 水電工程施工現(xiàn)場安全事故案例分析考核試卷
- 6-5 PLA和PAL電子課件教學(xué)版
- 玻璃纖維的制備工藝考核試卷
- 旅行初二語文作文
- 新材料在D打印領(lǐng)域的應(yīng)用考核試卷
- 球類生產(chǎn)過程中的實時監(jiān)控技術(shù)考核試卷
- 景區(qū)旅游市場開發(fā)與拓展策略考核試卷
- 生態(tài)保護(hù)工程生態(tài)保護(hù)與生態(tài)工程長期效益評估考核試卷
- 寧夏傳統(tǒng)文化調(diào)研報告范文
- 景區(qū)食堂經(jīng)營外包合同
- 2024年骨科病區(qū)VTE測試試題
- 第14課推進(jìn)綠色發(fā)展的課件
- 汽車租賃合同協(xié)議電子版
- 模擬電子技術(shù)基礎(chǔ)智慧樹知到期末考試答案章節(jié)答案2024年北京航空航天大學(xué)
- 中國蠶絲綢文化 知到智慧樹網(wǎng)課答案
- T-CCAA 39-2022碳管理體系 要求
- 幼兒園大班健康《我會保護(hù)眼睛》說課課件
- 武漢大唐不夜城規(guī)劃方案
- 110(66)kV~220kV智能變電站設(shè)計規(guī)范
評論
0/150
提交評論