一、OpenGL 簡介
- 什么是OpenGL?摘抄自極客雨露--iOS OpenGL 學習
1、OpenGL是一種應用程序編程接口,它是一種可以對圖形硬件設備特性進行訪問的軟件庫。
2、OpenGL被設計為一個現(xiàn)代化的、硬件無關的接口,因此我們可以在不考慮計算機操作系統(tǒng)或窗口系統(tǒng)的前提下,在多種不同的圖形硬件系統(tǒng)上,或者完全通過軟件的方式實現(xiàn)OpenGL接口。
3、OpenGL自身并不包含任何執(zhí)行窗口任務,或者處理用戶輸入的函數。
4、OpenGL也沒有提供任何用于表達三維物體模型,或者讀取圖像文件的操作。我們需要通過一系列的幾何圖元(點,線段,三角形,以及patch)來創(chuàng)建三維空間物體!
(ps: 2D + 透視 = 3D)
5、OpenGL API是過程性的,不是描述性的,即OpenGL不是面向對象的,所以OpenGL無法利用面向對象的特性。使用的時候只需要:程序與OpenGL的實現(xiàn)鏈接就可以了!
6、OpenGL的實現(xiàn)可以是軟件實現(xiàn),也可以是硬件實現(xiàn)。
軟件實現(xiàn):是對OpengGL函數調用時作出的響應并創(chuàng)建二維或三維圖像的函數庫。
硬件實現(xiàn):則是通過設置能夠繪制圖形或圖像的圖形卡驅動程序
硬件實現(xiàn)要比軟件實現(xiàn)快得多?。?br> (ps: 簡單理解就是開發(fā)的圖形庫)

- OpenGL可以用來干什么?
- 1.視頻,圖形,圖片處理
- 2.2D/3D 游戲引擎開發(fā)
- 3.科學可視化
- 4.醫(yī)學軟件開發(fā)
- 5.CAD(計算機輔助技術)
- 6.虛擬實境(AR,VR)
- 7.AI ?工智能
- 圖片
-
了解客戶端/服務端的概念?
圖片
-
- OpenGL 與 OpenGL ES 的關系
OpenGL 與 OpenGL ES 的主要區(qū)別,在于OpenGL ES 主要針對嵌入式設備使?
- 1、OpenGL ES是OpenGL的子集,針對手機、PDA和游戲主機嵌入式設備而設計
- 2、OpenGL ES 是從 OpenGL 裁剪定制而來的,去除了 glBegin/glEnd,四邊形(GL_QUADS)、多邊形(GL_POLYGONS)等復雜圖元等許多非絕對必要的特性,剩下最核心有用的部分。
可以理解成:OpenGL ES是一個在移動平臺上能夠支持 OpenGL 最基本功能的精簡規(guī)范。
二、OpenGL基本知識了解
-
著色器渲染流程
著色器渲染流程
可編程管線 & 固定管線
簡化版
-
2.什么是管線?
在OpenGL 下渲染圖形,就會有經歷一個一個節(jié)點.而這樣的操作可以理解管線.大家可以想象成流水線.每個任務類似流水線般執(zhí)行.任務之間有先后順序. 管線是一個抽象的概念,之所以稱之為管線是因為顯卡在處理數據的時候是按照一個固定的順序來的,而且嚴格按照這個順序。就像水從一根管子的一端流到另一端,這個順序是不能打破的
- 頂點著色器(VertexShader)
一般用來處理圖形每個頂點變換(旋轉/平移/投影等)
頂點著色器是OpenGL中用于計算頂點屬性的程序。頂點著色器是逐頂點運算的程序,也就是說每個頂點數據都會執(zhí)行一次頂點著色器,當然這是并行的,并且頂點著色器運算過程中無法訪問其他頂點的數據。
一般來說典型的需要計算的頂點屬性主要包括頂點坐標變換、逐頂點光照運算等等。頂點坐標由自身坐標系轉換到歸一化坐標系的運算,就是在這里發(fā)生的。
- 片元著色器程序(FragmentShader)
一般用來處理圖形中每個像素點顏色計算和填充
片段著色器是OpenGL中用于計算片段(像素)顏色的程序。片段著色器是逐像素運算的程序,也就是說每個像素都會執(zhí)行一次片段著色器,當然也是并行的。
- 5.GLSL(OpenGL Shading Language)
OpenGL著色語言(OpenGL Shading Language)是用來在OpenGL中著色編程的語言,也即開發(fā)人員寫的短小的自定義程序,他們是在圖形卡的GPU (Graphic Processor Unit圖形處理單元)上執(zhí)行的,代替了固定的渲染管線的一部分,使渲染管線中不同層次具有可編程性。比如:視圖轉換、投影轉換等。GLSL(GL Shading Language)的著色器代碼分成2個部分:Vertex Shader(頂點著色器)和Fragment(片斷著色器)
- 6.光柵化(Rasterization)
- 是把頂點數據轉換為片元的過程,具有將圖轉化為一個個柵格組成的圖象的作用,特點是每個元素對應幀緩沖區(qū)中的一像素。
- 光柵化就是把頂點數據轉換為片元的過程。片元中的每一個元素對應于幀緩沖區(qū)中的一個像素。
- 光柵化其實是一種將幾何圖元變?yōu)槎S圖像的過程。該過程包含了兩部分的工作。第一部分工作:決定窗口坐標中的哪些整型柵格區(qū)域被基本圖元占用;第二部分工作:分配一個顏色值和一個深度值到各個區(qū)域。光柵化過程產生的是片元
- 把物體的數學描述以及與物體相關的顏色信息轉換為屏幕上用于對應位置的像素及用于填充像素的顏色,這個過程稱為光柵化,這是一個將模擬信號轉化為離散信號的過程
- 7.紋理
紋理可以理解為圖片. 大家在渲染圖形時需要在其編碼填充圖片,為了使得場景更加逼真.而這里使用的圖片,就是常說的紋理.但是在OpenGL,我們更加習慣叫紋理,而不是圖片.
- 8.混合(Blending)
在測試階段之后,如果像素依然沒有被剔除,那么像素的顏色將會和幀緩沖區(qū)中顏色附著上的顏色進行混合,混合的算法可以通過OpenGL的函數進行指定。但是OpenGL提供的混合算法是有限的,如果需要更加復雜的混合算法,一般可以通過像素著色器進行實現(xiàn),當然性能會比原生的混合算法差一些。
- 9.OpenGL 圖元
- 1.點
- 2.線
- 3.線帶
- 4.線環(huán)
- 5.三角形
- 6.三角形帶
- 7.三角形扇




