OpenGL滑鼠軌跡球

2021-07-11 10:07:03 字數 1717 閱讀 1699

**:

什麼是滑鼠軌跡球

類似autocad裡的「動態觀察」,三維模型都是要投影到二維的螢幕上才能顯示給使用者,而使用者如果想觀察一下三維模型的立體形狀使用「動態觀察」是再好不過了。我們一般的操作是這樣的:滑鼠(按中健或者其他健)在二維螢幕上拖動,之後三維模型就會以螢幕中心點為中心進行相應的旋轉,滑鼠拖動得越長,三維模型旋轉的角度就越大。autocad這種重量級的商業軟體在這方面的使用者體驗自然是非常完美的了,可你知道它的原理麼,如果自己用opengl如果實現呢?

opengl裡的軌跡球

計算機的三維顯示類似生活中的攝影,螢幕就是乙個相機,三維模型就是被攝物體。我們可以調整相機與被攝物之間的距離來在螢幕顯示不同大小影像。軌跡球就是在

螢幕之外虛構乙個球形曲面

,使滑鼠在二維螢幕上的移動投影到球形曲面上,這樣就能

得到更佳的使用者體驗

(不使用軌跡球也能實現動態觀察,只是效果很生硬)。

以螢幕中心為球心,x軸向右,y軸向上,z軸向螢幕之外,很容易建立乙個球體的幾何方程如下: x

2+y2

+z2=

r2這裡,r代表球體的半徑。

當滑鼠在球面的範圍內移動時,我們可以由滑鼠在二維螢幕上的二維點座標p(x,y)通過數學關係求得其在球面上的投影點p',滑鼠從p1點移動到p2點,對應的在球面上就是從p1'移動到p2'。p1'和p2'與球心之間可以形成兩個向量,

滑鼠移動轉化成了向量從v1(op1'向量)轉到v2(op2'向量)

,v1和v2的向量叉乘得到向量n即是三維物體的旋轉軸,v1到v2的轉角量就是三維物體的旋轉角度。

使軌跡球更連續

實際的螢幕是個矩形,而球體在平面的投影只會是個圓,因此只要軌跡球的半徑不是無限大,就總會有一些區域的點投影後會落在球面之外。此時怎麼辦呢?

乙個好的辦法就是在球體投影不能覆蓋的區域使用另外乙個曲面與之拼接。乙個現成的二次曲面能夠勝任,它的表示式如下: z

(x,y

)=r2

/2x2

+y2−

−−−−

−√這個曲面與球面的交線正好乙個圓(下圖中所示紅線),其半徑為r/2√。

經過這樣處理的軌跡球就比較平滑,於是整個座標計算過程如下: z

(x,y

)={r

2−(x

2+y2

)−−−

−−−−

−−−−

√r2/

2x2+

y2√x^2+y^2 <= r^2 

otherwise

說明:在指定半徑內,z軸變化量比較大,半徑外,比較小 v

1=(x

1,y1

,z(x

1,y1

))|(

x1,y

1,z(

x1,y

1))|

v1=(x1,y1,z(x1,y1))|(x1,y1,z(x1,y1))|v2

=(x2

,y2,

z(x2

,y2)

)|(x

2,y2

,z(x

2,y2

))| v2=(x2,y2,z(x2,y2))|(x2,y2,z(x2,y2))|n=

v1×v

2 n=v1×v2θ=

arccosv1

⋅v2 θ=arccos⁡v1⋅v2

object mouse trackball

【opengl(sharpgl)】支援任意相機可平移縮放的軌跡球實現

軌跡球經歷 2017 6

參考 2017年6月終於下了決定。買了軌跡球產品 又不用了。只因為沒有達到我的希望。左鍵確認沒有我想的好,還特別靈敏。輕輕一碰就按下。接著考慮是不是買羅技的 m570 保修時間查了一下有說一年有說三年,官網 也無貨。說不准了。球的操作是否支援橫向滾動條?看了上面這個我找得到的最全面的評測,我認為不支...

python滑鼠移動軌跡 B超軌跡球的維修與替換

在b超機器使用一段時間後,就有可能出現測量游標移動不靈敏的現象。即影象中的游標不隨著軌跡球的轉動而做相應的移動,影響了b超的正常使用。或者游標乾脆不動,使得b超機器不能使用。遇到上述現象,就需要卸下軌跡球盒,開啟盒子維修。盒子外有一條扁平電纜聯向電路板接插座上。軌跡球盒內裝有乙個大滾動球和一套光電檢...

軌跡球 百度百科

軌跡球 目錄概述 特徵 軌跡球滑鼠 現狀 工作原理 編輯本段概述 軌跡球是另外一種型別的滑鼠,其工作原理與機械式滑鼠相同,內部結構也類似。不同的是軌跡球工作時球在上面,直接用手撥動,而球座固定不動。因而軌跡球占用空間小,多用於膝上型電腦等便攜機。軌跡球有兩個按鈕,乙個用於使用者單擊或雙擊,而另乙個提...