個人
OpenGL
專題學習目錄,但願和你們一塊兒學習交流進步!緩存
- OpenGL學習(一)-- 術語瞭解
- OpenGL學習(二)-- Xcode 搭建 OpenGL 環境
- OpenGL學習(三)-- OpenGL 基礎渲染
- OpenGL學習(四)-- 正面&背面剔除和深度測試
- OpenGL學習(五)-- 裁剪與混合
- OpenGL學習(六)-- 基礎紋理
- OpenGL學習(七)-- 基礎變化綜合練習實踐總結
- OpenGL學習(八)-- OpenGL ES 初探(上)
- OpenGL學習(九)-- OpenGL ES 初探(下)GLKit
- OpenGL學習(十)-- 着色語言 GLSL 語法介紹
- OpenGL學習(十一)-- 用 GLSL 實現加載圖片
- OpenGL學習(十二)-- OpenGL ES 紋理翻轉的策略對比
在學習 OpenGL 以前,咱們先來了解一下涉及到的一些術語名詞。app
將數學和圖形數據轉換成 3D 空間圖像的操做叫作渲染(Rendering)。當這個術語做爲動詞使用時,指的是計算機建立三維圖像時所經歷的過程。它也做爲名詞使用,指的僅僅是最終的圖像做品。函數
- 變換: 經過 變換(Transformation),或者說旋轉這些點,並在他們之間繪製線段,咱們就能在平面的 2D 屏幕上創造出一個 3D 世界的錯覺。
- 頂點: 這些點自己叫作 頂點(Vertices,單數爲 Vertex),他們能經過一種稱爲 變換矩陣(Transformation Matrix) 的數學結構進行旋轉。 另外還有一種矩陣叫 投影矩陣(Projection Matrix),用於將 3D 座標轉換成二維屏幕座標,實際的線條也將在二維屏幕座標上進行繪製。
- 投影(Projection): 用於建立幾何圖形的3D座標將投影到一個2D表面(窗口背景)。
- 正投影(Orthographic Projection)或平行投影: 物體在屏幕上的大小和實際大小相同,不論是遠仍是近。
- 透視投影(Perspective Projection):遠處的物體看上去比近處的物體更小一些,在模擬和3D動畫中,這種投影可以得到最大程度的逼真感。
幾何頂點被組合爲圖元(點,線段或多邊形),而後圖元被合成片元,最後片元被轉換爲幀緩存中的象素數據。post
圖元被分幾步轉換爲片元:圖元被適當的裁剪,顏色和紋理數據也相應做出必要的調整,相關的座標被轉換爲窗口座標。最後,光柵化將裁剪好的圖元轉換爲片元。學習
- 1) 裁剪
- 2) 轉換到窗口座標
- 3) 光柵化
光柵化
是將一個圖元轉變爲一個二維圖象(其實只是佈滿平面,沒有真正的替換幀緩存區)的過程。二維圖象上每一個點都包含了顏色、深度和紋理數據。將該點和相關信息叫作一個 片元(fragment)。(這就是片元和像素之間的關鍵區別,雖然二者的直觀印象都是的像素,可是片元比像素多了許多信息,在光柵化中紋理映射以後圖元信息轉化爲了像素)測試
- 1)象素全部權(ownership)檢測
- 2)裁剪檢測
- 3)Alpha 檢測
- 4)模版檢測
- 5)深度檢測
- 6)融合
- 7)抖動
- 8)邏輯操做
着色: 沿着頂點之間改變顏⾊色值,可以輕鬆建立光照照射到一個立方體的效果。着色器(Shader) 則是在圖形硬件上執行的單獨程序,用來處理頂點和執行光柵化任務。動畫
紋理貼圖(Texture Mapping): 將紋理理圖⽚片附着到你繪圖的圖像上。一個紋理就是一副用來貼到三角形或多邊形上的圖片。code
混合(Blending): 顏⾊色混合效果。orm
狀態機 就是一種存在於理論中的機器,它具備如下的特色:cdn
- 它有記憶的能力,可以記住本身當前的狀態。
- 它能夠接收輸入,根據輸入的內容和本身的狀態,修改本身的狀態,而且能夠獲得輸出。
- 當它進入某個特殊的狀態(停機狀態)的時候,它再也不接收輸入,中止工做。
理論提及來很抽象,但其實是很好理解的。 首先,從本質上講,咱們如今的 電腦 就是典型的狀態機。能夠對照理解:
- 電腦的存儲器(內存、硬盤等等),能夠記住電腦本身當前的狀態(當前安裝在電腦中的軟件、保存在電腦中的數據,其實都是二進制的值,都屬於當前的狀態)。
- 電腦的輸入設備接收輸入(鍵盤輸入、鼠標輸入、文件輸入),根據輸入的內容和本身的狀態(主要指能夠運行的程序代碼),修改本身的狀態(修改內存中的值),而且能夠獲得輸出(將結果顯示到屏幕)。
- 當它進入某個特殊的狀態(關機狀態)的時候,它再也不接收輸入,中止工做。
OpenGL 也能夠當作這樣的一種機器。讓咱們先對照理解一下:
- OpenGL 能夠記錄本身的狀態(好比:當前所使用的顏色、是否開啓了混合功能,等等,這些都是要記錄的)
- OpenGL 能夠接收輸入(當咱們調用 OpenGL 函數的時候,實際上能夠當作 OpenGL 在接收咱們的輸入),根據輸入的內容和本身的狀態,修改本身的狀態,而且能夠獲得輸出(好比咱們調用
glColor3f
,則 OpenGL 接收到這個輸入後會修改本身的「當前顏色」這個狀態;咱們調用glRectf
,則 OpenGL 會輸出一個矩形)- OpenGL 能夠進入中止狀態,再也不接收輸入。這個可能在咱們的程序中表現得不太明顯,不過在程序退出前,OpenGL 總會先中止工做的。
簡單總結就是:OpenGL 是一個 狀態機,它保持自身的狀態,除非用戶輸入一條命令讓它改變狀態。
轉載請備註原文出處,不得用於商業傳播——凡幾多