日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

鼠标 ArcBall 局部坐标系 旋转模型

發(fā)布時(shí)間:2023/12/20 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 鼠标 ArcBall 局部坐标系 旋转模型 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
坐標(biāo)系統(tǒng)
關(guān)鍵詞:世界坐標(biāo)系 模型坐標(biāo)系 相機(jī)坐標(biāo)系 模型坐標(biāo)系到世界坐標(biāo)系的變換舉證,世界坐標(biāo)系到相機(jī)坐標(biāo)系的變換舉證,透視投影,成像面與屏幕的比例映射

一般在計(jì)算機(jī)圖形顯示中,我們需要三個(gè)坐標(biāo)系構(gòu)成一個(gè)坐標(biāo)系統(tǒng)。分別是世界坐標(biāo)系,局部坐標(biāo)系(模型坐標(biāo)系),相機(jī)坐標(biāo)系。我們一開始建立模型的時(shí)候都是在模型坐標(biāo)系(局部坐標(biāo)系下完成的),然后我們通過局部坐標(biāo)系到世界坐標(biāo)系的變換矩陣,把局部坐標(biāo)系中的模型變換到世界坐標(biāo)系,最后我們將所有在世界坐標(biāo)系中的位置變換到相機(jī)坐標(biāo)系,然后一般利用透視投影將其投影到成像面,再利用成像面的大小和屏幕的大小關(guān)系將其在屏幕上的位置求出來(lái)

為什么需要使用三個(gè)坐標(biāo)系?

因?yàn)槿齻€(gè)坐標(biāo)系基本上滿足了圖形自由顯示的需要,也與真是世界也比較好的對(duì)應(yīng)關(guān)系。在三個(gè)坐標(biāo)系中世界坐標(biāo)系基本上固定不動(dòng),相機(jī)坐標(biāo)系一般也運(yùn)動(dòng)比較少,我們喜歡把相機(jī)坐定在世界坐標(biāo)系的Z軸上,這樣會(huì)帶來(lái)很多方便,當(dāng)然通過改變相機(jī)坐標(biāo)系和世界坐標(biāo)系的變換矩陣,我們就間接改變了相機(jī)的位置和方向。
在這里比較重要的是局部坐標(biāo)系(模型坐標(biāo)系),每一個(gè)獨(dú)立的模型都有自己的模型坐標(biāo)系,而世界坐標(biāo)系和相機(jī)坐標(biāo)系,整個(gè)坐標(biāo)系統(tǒng)中只有一個(gè),但是局部坐標(biāo)系可以有很多個(gè),我們通過改變模型坐標(biāo)系與世界坐標(biāo)系的變換矩陣,我們可以改變模型相對(duì)于世界原點(diǎn)的位置和方向,我們通過在給模型附加一個(gè)旋轉(zhuǎn)矩陣可以使模型在局部坐標(biāo)系中旋轉(zhuǎn),而且模型中心相對(duì)于世界坐標(biāo)系的位置沒有變化。就像在真實(shí)世界中我們手拿一個(gè)玩偶翻轉(zhuǎn)它,并不改變它相對(duì)于其他物體的位置。

什么是透視投影?

透視投影就是模仿人的眼睛,根據(jù)成像物體的遠(yuǎn)景,讓越遠(yuǎn)的物體成像越小,越近的物體成像越大,成像投影的模型如下:

旋轉(zhuǎn)
關(guān)鍵詞 鼠標(biāo)控制 arcBall原理

首先是arcBall原理,arcBall原理將鼠標(biāo)在屏幕上的二維坐標(biāo)映射到三維,并且根據(jù)兩個(gè)二維坐標(biāo)獲得兩個(gè)三維位置來(lái)計(jì)算出旋轉(zhuǎn)軸和旋轉(zhuǎn)角。

將屏幕歸一化到一個(gè)半徑為1的外接圓上更好,這樣通過勾股定理可以計(jì)算出屏幕上兩個(gè)點(diǎn)在圓上對(duì)應(yīng)的Z值,這個(gè)時(shí)候兩個(gè)向量叉乘可以獲得垂直于兩個(gè)向量的軸,這就是旋轉(zhuǎn)軸,點(diǎn)成利用反余玄可以獲得旋轉(zhuǎn)角。
但是這個(gè)時(shí)候的旋轉(zhuǎn)軸是用屏幕坐標(biāo)系(與相機(jī)坐標(biāo)系表示一樣),我們希望在模型坐標(biāo)系中旋轉(zhuǎn)模型,所以需要把旋轉(zhuǎn)軸轉(zhuǎn)化到模型坐標(biāo)系中去,(不管在哪個(gè)坐標(biāo)系中,旋轉(zhuǎn)軸的方向都是一樣的,只不過表示的參數(shù)不同),又因?yàn)樾D(zhuǎn)軸是一個(gè)向量,向量可以看做起點(diǎn)在原點(diǎn),另一個(gè)點(diǎn)在一個(gè)單位球上,我們做矩陣逆變換時(shí),只需要做旋轉(zhuǎn)的逆變換即可 首相逆變換世界模型到相機(jī)模型的逆矩陣,然后逆變換世界模型到局部模型的的逆矩陣,**注意這個(gè)順序很重要,**最后得到在局部坐標(biāo)系下的旋轉(zhuǎn)軸。

繞任意直線旋轉(zhuǎn)

繞任意直線旋轉(zhuǎn)的方法
首先將這條直線旋轉(zhuǎn)到某一個(gè)平行軸,然后旋轉(zhuǎn)角度,再把這條直線逆旋轉(zhuǎn)回之前的位置,注意逆旋轉(zhuǎn)的時(shí)候逆矩陣級(jí)聯(lián)的順序是相反的


在這里編程時(shí)要注意,萬(wàn)一這個(gè)旋轉(zhuǎn)軸與某一個(gè)坐標(biāo)軸重合,需要考慮u v等于0的情況,這個(gè)時(shí)候單獨(dú)判斷三角函數(shù)的值,因?yàn)橛?jì)算不能除0。

參考文章1:https://blog.csdn.net/jennybi/article/details/79742058
參考文章2:https://learnopenglcn.github.io/01%20Getting%20started/08%20Coordinate%20Systems/

總結(jié)

以上是生活随笔為你收集整理的鼠标 ArcBall 局部坐标系 旋转模型的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。