絕大多數3d圖形並不是真正的3d的。我們使用3d的概念和術語描述看上去像3d的東西,然後把這種3d圖形「壓平」到2d計算機螢幕上,把3d圖形壓平為3d圖形的過程叫做投影。投影分為正投影和透視投影,不同的投影型別投影過程中使用的變換不同。
opengl變換術語:
檢視 viewing 指定觀察者或相機的位置
模型 modeling 在場景中移動物體
模型檢視 modelview 描述檢視和模型變換的對偶性
投影 projection 改變可視區域的大小或重新設定它的形狀
視口 viewport 這是一種偽變換,只是對視窗上的最終輸出進行縮放
(1)視覺座標
視覺座標是根據觀察者的角度而言的,與可能發生的變換無關,可以把她看成是「絕對」的螢幕座標。因此,視覺座標表示一種虛擬的固定的座標系統,常常作為一種參考係使用。
圖1顯示了兩種不同檢視所看到的座標系統,圖a,視覺座標系是根據場景觀察者的角度(垂直顯示器)來表示的。圖b,視覺座標稍稍旋轉,這樣就更好的觀察z軸的相對位置。從觀察著的角度出發,x和y的正方向分別是向右和向上。z的正方向從原點朝向使用者,z的負方向則是沿著與螢幕的垂直方向遠離觀察者。
圖1,來至opengl超級寶典opengl在空間進行繪圖時,所使用的是笛卡爾座標系統。在不進行任何變換的情況下,這種座標系統與前面剛剛介紹的視覺系統相同。
(2)檢視變換
檢視變換是場景所應用的第乙個變換。它用於確定場景的拍攝點。在預設情況下, 在透視投影中,觀察者是從原點向z軸的負方向看過去(垂直「穿入」顯示器)。這個觀察點相對於視覺座標進行移動,以提供乙個特定的拍攝點。當觀察者位於原點時,場景中z值為正的物體就位於觀察者的後面。
檢視變換允許把觀察點放在自己所希望的任何位置,並允許在任何方向上觀察場景。確定檢視變換就像在場景中放置照相機並讓它志向某個方向。
作為總體原則,在進行任何其他變換之前必須先指定檢視變換。原因是檢視變換的效果相當於根據視覺座標系統移動當前所使用的座標系統。然後,根據最新修改的座標進行其他所有的後續變換。
(3)模型變換
模型變換用於對模型以及模型內部的特定物體進行操縱。它可以移動物體,對它們進行旋轉,或則對它們進行縮放。
(4)模型檢視對偶性
根據檢視和模型變換的內部效果以及他們場景的最終外觀所產生的效果實際上是一樣的。向後移動物體和向前移動參考座標系並沒有真正的區別。模型檢視這個術語表示我們既可以把這個變換看成是模型變換,也可以把它看成檢視變換,他們之間並不存在區別,因此可以將其統稱為模型檢視變換。
檢視變換並沒有鐵別之處。從本質上說,他只是在繪製物體之前應用到虛擬物體之上的一種模型變換。在場景放置更多的物體時,需要不斷指定新的變換。按照約定,最初進行變換作為參照,其他所有變換均為基礎。
(5)投影變換
投影變換是在模型檢視變換之後應用於物體的頂點之上的。這種投影實際上定義了可視區域,並建立裁剪平面。裁剪平面是3d空間的平面方程式,opengl用它來確定幾何圖形能否被觀察者所看到。根據題的說,投影變換指定乙個完成的場景(在所有模型變換完成之後)投影到螢幕上的最終影象。本篇討論正投影和透視投影。
正投影(平行投影)中,螢幕上繪製的所有多邊形都是按照相對大小出現的。直線和多邊形使用平行線直接對映到2d螢幕上。這意味著不管物體有多遠,都仍然按照相同的大小進行繪製,平面的出現在螢幕上。這種型別的投影通常用於cad或渲染二維影象和二維圖形。
透視投影所顯示的場景跟接近真實,透視投影的標誌性特點就是透視縮短,他會使遠處物體看上去比相同大小的近視物體小一些。3d空間中平行的直線在觀察者眼裡並不是平行的,一鐵軌為例,鐵軌是平行的,但在透視投影下,他們看上去似乎在遠處交匯在一起。
正投影和透視投影區別如下圖:
圖2,來至opengl超級寶典
(6)視口變換
當上面的這些操作全部完成後,最終所獲得的是場景的二維投影,將他對映到螢幕上的某個視窗。這種到物理視窗座標的對映是最後乙個完成的變換,稱為視口變換。通常,顏色緩衝區和視窗畫素之間是一對一的對應關係,但並非嚴格如此。有些情況下,視口變換要把一種「規範化」的裝置座標重新對映到視窗座標。幸運的是,我們不必操心這方面的細節。
OpenGL學習筆記之一 什麼是OpenGL
opengl到底是什麼?制定並維護的規範 specification opengl規範嚴格規定了每個函式該如何執行,以及它們的輸出值。至於內部具體每個函式是如何實現 implement 的,將由opengl庫的開發者自行決定 譯註 這裡開發者是指編寫opengl庫的人 因為opengl規範並沒有規定...
openg離線包 OpenGL離線渲染和緩衝區物件
理論 輸入 影象,點,線。輸出 影象 實現方案 從一般到特殊 1.不支援fbo 主要介紹pc上,移動裝置如果不支援fbo要實現離線渲染那就實在沒轍了。gldrawbuffer gl back glreadbuffer gl back 設定讀寫時後快取區。一般pc都支援雙緩衝機制,如果沒有gl bac...
OpenGL學習(一) OpenGL簡介
opengl是乙個開放式的 與硬體無關的圖形軟體包。opengl是乙個專業的 功能強大 呼叫方便的底層三圍圖形函式庫。opengl是乙個圖形與硬體的介面。建模變換 著色光照處理和材質設定 位圖顯示 影象增強和紋理對映 雙快取動畫 根據基本圖形單元 點 線 多邊形 影象和點陣圖 建立景物模型,並且對所...