鼠标 ArcBall 局部坐标系 旋转模型
坐標(biāo)系統(tǒng)
關(guān)鍵詞:世界坐標(biāo)系 模型坐標(biāo)系 相機(jī)坐標(biāo)系 模型坐標(biāo)系到世界坐標(biāo)系的變換舉證,世界坐標(biāo)系到相機(jī)坐標(biāo)系的變換舉證,透視投影,成像面與屏幕的比例映射
一般在計算機(jī)圖形顯示中,我們需要三個坐標(biāo)系構(gòu)成一個坐標(biāo)系統(tǒng)。分別是世界坐標(biāo)系,局部坐標(biāo)系(模型坐標(biāo)系),相機(jī)坐標(biāo)系。我們一開始建立模型的時候都是在模型坐標(biāo)系(局部坐標(biāo)系下完成的),然后我們通過局部坐標(biāo)系到世界坐標(biāo)系的變換矩陣,把局部坐標(biāo)系中的模型變換到世界坐標(biāo)系,最后我們將所有在世界坐標(biāo)系中的位置變換到相機(jī)坐標(biāo)系,然后一般利用透視投影將其投影到成像面,再利用成像面的大小和屏幕的大小關(guān)系將其在屏幕上的位置求出來
為什么需要使用三個坐標(biāo)系?
因為三個坐標(biāo)系基本上滿足了圖形自由顯示的需要,也與真是世界也比較好的對應(yīng)關(guān)系。在三個坐標(biāo)系中世界坐標(biāo)系基本上固定不動,相機(jī)坐標(biāo)系一般也運動比較少,我們喜歡把相機(jī)坐定在世界坐標(biāo)系的Z軸上,這樣會帶來很多方便,當(dāng)然通過改變相機(jī)坐標(biāo)系和世界坐標(biāo)系的變換矩陣,我們就間接改變了相機(jī)的位置和方向。
在這里比較重要的是局部坐標(biāo)系(模型坐標(biāo)系),每一個獨立的模型都有自己的模型坐標(biāo)系,而世界坐標(biāo)系和相機(jī)坐標(biāo)系,整個坐標(biāo)系統(tǒng)中只有一個,但是局部坐標(biāo)系可以有很多個,我們通過改變模型坐標(biāo)系與世界坐標(biāo)系的變換矩陣,我們可以改變模型相對于世界原點的位置和方向,我們通過在給模型附加一個旋轉(zhuǎn)矩陣可以使模型在局部坐標(biāo)系中旋轉(zhuǎn),而且模型中心相對于世界坐標(biāo)系的位置沒有變化。就像在真實世界中我們手拿一個玩偶翻轉(zhuǎn)它,并不改變它相對于其他物體的位置。
什么是透視投影?
透視投影就是模仿人的眼睛,根據(jù)成像物體的遠(yuǎn)景,讓越遠(yuǎn)的物體成像越小,越近的物體成像越大,成像投影的模型如下:
旋轉(zhuǎn)
關(guān)鍵詞 鼠標(biāo)控制 arcBall原理
首先是arcBall原理,arcBall原理將鼠標(biāo)在屏幕上的二維坐標(biāo)映射到三維,并且根據(jù)兩個二維坐標(biāo)獲得兩個三維位置來計算出旋轉(zhuǎn)軸和旋轉(zhuǎn)角。
將屏幕歸一化到一個半徑為1的外接圓上更好,這樣通過勾股定理可以計算出屏幕上兩個點在圓上對應(yīng)的Z值,這個時候兩個向量叉乘可以獲得垂直于兩個向量的軸,這就是旋轉(zhuǎn)軸,點成利用反余玄可以獲得旋轉(zhuǎn)角。
但是這個時候的旋轉(zhuǎn)軸是用屏幕坐標(biāo)系(與相機(jī)坐標(biāo)系表示一樣),我們希望在模型坐標(biāo)系中旋轉(zhuǎn)模型,所以需要把旋轉(zhuǎn)軸轉(zhuǎn)化到模型坐標(biāo)系中去,(不管在哪個坐標(biāo)系中,旋轉(zhuǎn)軸的方向都是一樣的,只不過表示的參數(shù)不同),又因為旋轉(zhuǎn)軸是一個向量,向量可以看做起點在原點,另一個點在一個單位球上,我們做矩陣逆變換時,只需要做旋轉(zhuǎn)的逆變換即可 首相逆變換世界模型到相機(jī)模型的逆矩陣,然后逆變換世界模型到局部模型的的逆矩陣,**注意這個順序很重要,**最后得到在局部坐標(biāo)系下的旋轉(zhuǎn)軸。
繞任意直線旋轉(zhuǎn)
繞任意直線旋轉(zhuǎn)的方法
首先將這條直線旋轉(zhuǎn)到某一個平行軸,然后旋轉(zhuǎn)角度,再把這條直線逆旋轉(zhuǎn)回之前的位置,注意逆旋轉(zhuǎn)的時候逆矩陣級聯(lián)的順序是相反的
在這里編程時要注意,萬一這個旋轉(zhuǎn)軸與某一個坐標(biāo)軸重合,需要考慮u v等于0的情況,這個時候單獨判斷三角函數(shù)的值,因為計算不能除0。
參考文章1:https://blog.csdn.net/jennybi/article/details/79742058
參考文章2:https://learnopenglcn.github.io/01%20Getting%20started/08%20Coordinate%20Systems/
總結(jié)
以上是生活随笔為你收集整理的鼠标 ArcBall 局部坐标系 旋转模型的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: armadillo 配置
- 下一篇: 球体模型建立