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