畢業設計之四元數

2021-06-18 16:23:04 字數 1472 閱讀 5525

在3d的遊戲中,用的最多的就是矩陣和向量,矩陣其實就是乙個世界,向量就是這個世界的具體位置。每個3d都會有世界座標和各種區域性座標。乙個向量乘上不同的矩陣,就會變成在這個矩陣所代表的世界裡。區域性座標是以單個模型為原點設定的座標系,世界座標是以整個世界的原點作為座標系。但是涉及到世界座標各個物體的計算時,就必須把物體的區域性座標轉換為世界座標,或者反過來計算。其中,4d齊次矩陣就是主要用來計算關於平移的。

區域性座標轉換為全域性座標:

v(全域性) = v(區域性)*w

其中w是乙個矩陣,是4x4的:

這是因為在區域性座標系中,會有以自己的中心點為原點的區域性座標系,這裡的r,u,f就是區域性座標系裡面的三個座標軸,p是要計算的區域性座標。

如果要計算世界座標到區域性座標的位置,則就是全域性向量乘上w矩陣的逆矩陣:

v(區域性) = v(全域性)*w(-1)

這個時候,在矩陣間不斷變換的向量,出現了一種情況,就是不但要平移,還要旋轉,這兩者要同時做,怎麼辦呢。。。所以就出現了四元數。

四元數,其實就是乙個4次的向量,這個向量很有意義,因為前三個數字,是代表要變換的向量所要圍繞旋轉的向量的x,y,z值,最後的那個數字,就是要圍繞這個軸旋轉多少度。這裡,這個角度值應該是被計算為弧度了,在dx中,預設逆時針的旋轉方向為正,在opengl就反過來。這個時候,要變換的那個向量就必須和它所在的座標系,世界座標或者是區域性座標結合成為乙個4d齊次矩陣,矩陣前三個向量就是所在矩陣的x,y,z值,最後乙個就是要變換的向量。這樣成上四元數,就能得到圍繞旋轉之後的向量。

下圖是在同一空間(矩陣)中的向量變換:

計算的時候,區域性座標就要對應區域性的四元數來計算,世界座標就要對應世界的四元數來計算。

不過,在ogre中,一切都格外簡單,僅僅是呼叫乙個函式而已,例如:

quaternion q = direction.getrotationto(destination);

nmeshnode->rotate(q);

//

//用於在改變了destination的值的時候,改變當前節點的x軸朝向(就是旋轉乙個四元數來變化區域性的x軸在世界座標的位置)

//在轉換朝向的時候,不用nmeshnode->setdirection(mnextposition,node::transformspace::ts_world)的原因是因為這個模型的正前方是x軸

//setdirection是設定z軸的方向(通常來說都是預設z軸為正朝向)

void  enimy::rotatexaix(const vector3 &destination)

else

}

畢業設計(四)

畢業設計 四 一如既往,先說說兩天來的感悟吧 1.如果以前我說xml是個好東西,都是人家告訴我的,今天我終於在設計 的時候在xml上收到巨大的好處啊 只要把網頁做成乙個個小的xml直譯器,就可以把資源整合到最大的程度,同時也分離到最大的程度 以後一切的修改更新盡在xml中,真是perfect之至阿 ...

畢業設計!畢業設計!!畢業設計!!!

看到ceocio的帖子 嚇人哦 深有體會。進幾年有些本科學生的程式與 實在不象話。有的組的答辯問題簡直成了挑錯字,平均每頁都有錯字。有的組在資料庫設計時,姓名 身份證號 手機號 日期全部都用char 10 答辯時還振振有辭,說在做測試時僅僅輸入了些簡單的數字做測試,所以沒有發現問題!還有的學生 是這...

畢業設計之劇情設計

在冬天的乙個晚上,像往常一樣,leevy正坐在電腦面前,劈里啪啦的敲著鍵盤。leevy 好睏呀!哈欠 畢業設計要做什麼呢?好煩啊。突然,一陣眩暈,leery感覺自己掉了下去。睜開眼發現身處乙個陌生的世界。而且自身的樣子的也變得很奇怪。leevy o o,這裡是哪?我怎麼會在這裡?還有我怎麼變成了這個...