OpenGL模型檢視變換、投影變換、視口變換
OpenGL中不設定模型,投影,視口,所繪製的幾何圖形的座標只能是-1到1(X軸向右,Y軸向上,Z軸垂直螢幕)。
產生目標場景的過程類似於用照相機進行拍照:
(1)把照相機固定在三角架上,並讓他對準場景
從不同位置觀察場景(檢視變換)
(2)對場景進行安排,使各個物體在照片中的位置是我們所希望的
移動,旋轉或者放大縮小場景中的物體(模型變換)
(3)選擇照相機鏡頭,並調整放大倍數(調焦)
顯示物體時,可以選擇物體是如何投影到螢幕上(投影變換)
(4)確定照片的大小,放大照片還是縮小照片
把圖形畫下來,是要佔據整個螢幕還是螢幕的一部分(視口變換)
三大變換:(都是通過操作矩陣來實現的)
1、模型檢視變換
在進行模型檢視變換之前,應先設定當前操作的矩陣為"模型檢視矩陣",通過設定glMatrixMode( GL_MODELVIEW),在進行變換
之前把當前矩陣設定為單位矩陣glLoadIdentity();如果不進行單位化,所有的後續操作都是在當前矩陣的前提下進行的。
2、投影變換
投影變換即定義一個可視空間,可視空間以外的物體不會被繪製到螢幕上(從現在起,座標不在是-1.0到1.0了)
OpenGL支援兩種投影,透視投影和正投影,通過設定glMatrixMode( GL_PROJECTION )來操作投影矩陣。
透視投影的主要函式
1、glFrustum()
2、glPerspective( GLdouble fovy, GLdouble aspect, GLdouble near, GLdouble far)
建立一個表示對稱透視檢視平截頭體的矩陣,並把它與當前矩陣相乘。fovy是YZ平面上視野的角度,範圍【0,180】。aspect是這個平截頭體的縱橫比,也就是寬度除於高度。near和far值分別是觀察點與近側裁剪平面以及遠側裁剪平面的距離(沿Z軸負方向)這兩個值都是正的。
正投影的主要函式
1、glOrtho( GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near, GLdouble far)
建立一個平行視景體(就是一個長方體空間區域)。實際上這個函式的操作是建立一個正射投影矩陣,並且用這個矩陣乘以當前矩陣。其中近裁剪平面是一個矩形,矩形左下角點三維空間座標是(left,bottom,-near),右上角點是(right,top,-near);遠裁剪平面也是一個矩形,左下角點空間座標是(left,bottom,-far),右上角點是(right,top,-far)。注意,near和far都是正值。只有在視景體裡的物體才能顯示出來,我感覺你最後兩個引數取得有點問題,而且你改成0,0後,視景體深度沒有了,整個視景體都被壓成個平面了,當然就顯示不正確了。
2、glOrtho2D( GLdouble left, GLdouble right, GLdouble bottom, GLdouble top)
建立一個表示把二維座標投影到螢幕上的矩陣,並把當前矩陣與它相乘,裁剪區域為矩形。
把畫素繪製到螢幕上glViewport()定義視口,前兩個引數最左下方,後兩個引數寬度和高度。
3、視口變換
在視窗中定義一個畫素矩形,最終的影象將對映到這個矩形中。
glViewport( Glint x, Glint y, GLsizei width, GLsizei height );XY指定了視口的左下角,WH指定了視口的高度和寬度。在預設情況下,視口的初始值是(0,0,winwidth,winheight)。
視口的縱橫比一般和視景體的縱橫比相同。當視窗的大小發生變化時,並不會自動影響視口,應用程式應該檢測視窗大小改變事件。
本文來自CSDN部落格,轉載請標明出處:http://blog.csdn.net/longge7685/archive/2010/01/31/5274467.aspx
關於模型轉換的基礎知識
1.模型轉換與視點轉換: glTranslate{fd}(TYPE x, TYPE y, TYPE z )、 glRotate{fd}( TYPE angle, TYPE x, TYPE y, TYPE z )、
glScale{fd}(TYPE x, TYPE y, TYPE z )
這三個函式分別對模型進行平移,旋轉,縮放。我們可以想象一下,視點轉換和模型轉換可以使用相同的函式進行,比如,在用相機拍攝物體時,我們可以保持物體的位置不動,而將相機移離物體,這就相當於視點轉換;也可以保持相機的位置不動,將物體移離相機,這就相當於模型轉換。
模型轉換和視點轉換共同構成模型視景矩陣。
2.矩陣堆疊操作:glPushMatrix(),glPopMatrix()
說明,OpenGL中有兩個最基本的矩陣,模型視景矩陣和投影矩陣,它們都有相應的矩陣堆疊,這些矩陣的當前值就是在矩陣堆疊中的最頂層元素。對於轉換操作,發出轉換命令後生成的新的當前矩陣就儲存在矩陣堆疊中,因此,我們可以利用矩陣堆疊儲存當前值,並在需要的時候將當前值彈出堆疊。
舉例來說,我們現在需要繪製一個自行車,設定自行車的兩個輪子相對於座標原點是對稱的。我們可以這樣繪製:將座標系原點移動到前車輪中心,然後進行繪製,完成後,計算前車輪中心到後車輪中心的距離,並將座標系原點移動到後車輪中心,再繪製後車輪。顯然,這種繪製順序是不科學的,如果需要繪製更多的對稱物體,那麼這種計算量會非常大,而且容易產生錯誤。
這種問題,我們使用矩陣堆疊可以很容易得到解決。在繪製前車輪之前,將當前矩陣儲存在矩陣堆疊中,然後將座標原點移動到前車輪中心,繪製前車輪,繪製結束後,將儲存的當前矩陣彈出矩陣堆疊,這時堆疊頂部的矩陣仍為原座標系,下一步只需相對於原座標系移動相應距離到後車輪進行繪製,這樣,所有物體的位置都是相對於原座標系進行設定,程式計算量得到縮減,而且不容易出錯誤。
相關文章
- [OpenGL ES 03]3D變換:模型,檢視,投影與Viewport3D模型View
- OpenGL 使用矩陣變換改變檢視矩陣
- OpenGL 學習 07 向量 矩陣變換 投影矩陣
- OpenGL中的座標變換、矩陣變換矩陣
- View Transform(檢視變換)詳解ViewORM
- OpenCV計算機視覺學習(3)——影像灰度線性變換與非線性變換(對數變換,伽馬變換)OpenCV計算機視覺
- 【OpenCV】影像變換(四-2)霍夫變換圓檢測OpenCV
- 【OpenCV】影像變換(四-1)-霍夫變換線段檢測OpenCV
- OpenGL座標系與幾何變換
- OpenGL 矩陣變換相關連結矩陣
- Hough變換
- 傅立葉變換
- 霍夫變換檢測圓
- 仿射變換及其變換矩陣的理解矩陣
- 小波變換與傅立葉變換的區別
- 【DWT筆記】傅立葉變換與小波變換筆記
- 離散傅立葉變換(DFT)和快速傅立葉變換(FFT)FFT
- RxSwift -- 變換Swift
- 快速傅立葉變換
- OpenCV計算機視覺學習(10)——影像變換(傅立葉變換,高通濾波,低通濾波)OpenCV計算機視覺
- CGAffineTransform二維檢視旋轉、縮放、平移變換詳解ORM
- OpenGL/OpenGL ES 入門:基礎變換 - 初識向量/矩陣矩陣
- OpenCV計算機視覺學習(11)——影像空間幾何變換(影像縮放,影像旋轉,影像翻轉,影像平移,仿射變換,映象變換)OpenCV計算機視覺
- 計算機圖形:三維觀察之投影變換計算機
- 灰度變換函式:對數及對比度拉伸變換函式
- 【OpenCV-Python】:影像的傅立葉變換與逆傅立葉變換OpenCVPython
- 計算機視覺—圖片幾何變換(2)計算機視覺
- 視覺化學習:CSS transform與仿射變換視覺化CSSORM
- SVG animateTransform變換動畫SVGORM動畫
- 【八】查詢變換
- pose座標變換
- 離散傅立葉變換
- Win10如何改變切換視窗開啟所有視窗Win10
- 複變函式與積分變換函式
- 【SQL優化器查詢變換器】檢視合併(View Merging)SQL優化View
- 理解SVG座標系統和變換: 建立新視窗SVG
- Python 實現影像快速傅立葉變換和離散餘弦變換Python
- OpenCV 離散傅立葉變換OpenCV