本文採用兩種方式,在opengl中實現放大縮小功能:
方式一. 改變「視點」與模型之間的距離【改變模型視點變換矩陣】
對於這種方式存在三個問題需要解決:
① 縮放過程過渡平滑
② 當模型放大或縮小到一定程度,減慢其縮放速度,以免視點很快地貼近模型或消失在場景中
③ 防止視點進入模型內部
解決方案:
使用反正切函式:y=0.5*arctan(0.1*x)+0.25*pi,函式影象如下圖:
當模型放大時,x--, y減小
當模型縮小時,x++, y增大
y減小時,即∠apm變小,視點a向m點移動(由於y>0,所以a永遠不會到達m點)
y增大時,即∠apm變大,視點a遠離m點
視點與物體中心的距離由三部分組成【am+mn+no】,這樣可以保證無論模型處於什麼姿態,都可以保證物體不會跨越近裁截面(問題③)
1void
seteyeandradius()2
方式二. 改變投影變換的fovy夾角【改變投影變換矩陣】
fovy越小,模型越大;fovy越大,模型越小。
使用反正切函式:y=arctan(0.1*x)+0.5*pi,函式影象如下圖:
當模型放大時,x--, y減小(fovy減少)
當模型縮小時,x++, y增大 (fovy增大)
1void
setfovy()2
對於模型瀏覽而言,第二種方式更簡潔,也易於理解,不用考慮視點會進入模型的情況。
效果圖如下:
原圖:
放大:
縮小:
Qt實現視窗同比例放大 縮小
實現思路 qt中有resizeevent事件,該事件當視窗大小改變時便會產生響應,所以可利用此來實現視窗同比例縮放問題,但是由於resizeevent事件是隨著視窗大小改變不斷重新整理的,因此在重寫resizeevent時,直接改變視窗大小,會產生衝突,無法決斷該放大和縮小,因此為了判別resize...
放大縮小 去處寶山這個地方把世界放大又縮小
寶山智慧型灣,在這座由各種顏色的貨櫃設計改造而來的新型園區裡,隨處可見科技與藝術的融合,除了6月舉行的首屆智慧型灣夜生活節 9月新開的大陸首家星巴克貨櫃店 梅派青衣史依弘的劇場 家宋思衡的多 工作室,這裡還藏著乙個工業旅遊地標 首個中國3d列印文化博物館。彼時,這裡是上海第三毛紡織廠的倉庫用地,如今...
QT 放大與縮小按鈕
標頭檔案 painttest.h ifndef painttest h define painttest h include include class painttest public qwidget endif painttest hpainttest.cpp include painttest...