OpenGL
是一個跨編程語言、跨平臺的編程圖形程序接口
OpenGL ES
是
OpenGL
三維圖形API的本身,針對
手機、PDA和遊戲主機
等嵌入式設備而設計的,去除了不少沒必要要覺和性能較低的API接口
DirectX
是由不少API組成的,
DirectX
並非一個單純的圖形API。最重要的是
DirectX
是屬於Windows上一個多媒體處理框架,並不支持Windows之外的平臺
Metal
是Apple爲遊戲開發者退出的新的平臺技術,該技術能爲3D圖像提升10倍的渲染性能
簡單來講就是 實現圖形的底層渲染
web
OpenGL/OpenGL ES/Metal 在任何項目中解決問題的本質——利用 GPU芯片
來高效渲染圖形圖像編程
圖形API是iOS開發者惟一接近GPU的方式數組
Context
OpenGL狀態機
描述了一個對象的生命週期經歷各類狀態發生轉變時的動因、條件及轉變中所執行的活動
渲染
:將圖形/圖像數據轉換成3D空間圖像的操做叫作渲染(Rendering)即
數據->可視化界面
的過程,也就是咱們口中所說的
繪製
頂點數組
(VertexArray)和
頂點緩衝區
(VertexBuffer):
管線
:能夠理解爲流水線。在OpenGL下渲染圖形,就會經歷一個一個節點,這樣的操做能夠理解爲管線。之因此稱爲管線是由於顯卡在處理數據的時候是按照一個固定的順序來的
固定管線/存儲着色器
:在早期OpenGL版本中,開發者只須要傳入相應的參數,就能快速完成圖形的渲染。開發者只須要調用API使用封裝好的固定shader程序段,並不須要關注底層實現原理
着色器程序Shader
是一段程序代碼,是用來操做GPU進行計算的,主要的着色器有:
頂點着色器
對傳入的頂點數據進行運算,將頂點轉換爲圖元;而後進行
光柵化
轉化爲柵格化數據;最後傳入
片元着色器
進行運算
頂點着色器
(VertexShader)
片元着色器
(FragmentShader)
GLSL
(OpenGL Shading Language)
頂點着色器
和
片元着色器
光柵化
(Rasterization)
幾何圖元變爲二維圖像
的過程。該過程包含了兩部分工做:決定窗口座標中的那些整形柵格區域被基本圖元佔用;分配一個顏色值和一個深度值到各個區域
紋理
:即圖片(位圖)
混合
:兩種顏色的視圖疊在一塊兒後的顏色就叫混合
變換矩陣
(Transformation):圖形發平生移、縮放、旋轉變換
投影矩陣
(Projection):將3D座標轉換爲二維屏幕座標
渲染上屏/交換緩衝區
(SwapBuffer)
垂直同步信號
,這個技術成爲
垂直同步
MVP矩陣:Model、View、Projection框架
經常使用座標系的比較編程語言
物體座標系
和
世界座標系
轉換過程當中的一箇中轉站,爲了方便物體座標系轉換到世界座標系
座標系對應的空間系編輯器
物體座標/對象座標->(模型變換)->世界座標->(視覺變換)->觀察者座標/攝像機座標->(投影變換)->裁剪座標->(透視除法)->規範化設備座標->(視口變化)->屏幕座標
這個過程當中如下過程是能夠開發者定義的:函數
頂點着色器
處理頂點數據
細分着色器
描述物體的形狀(OpenGL3.0已經不開放細分着色器的API)
幾何着色器
決定輸出的圖元類型和個數(不須要關心細節)
圖元設置
明確圖元的類型,是三條線仍是三角形(三個頂點並必定是三角形)
光柵化
幾何圖元轉爲二維圖像(像素點)
片元着色器
填充像素點的顏色、深度值等
具體請見iOS中圖片的解壓縮到渲染過程oop
+imageWithContentOfFile:
從磁盤中加載一張圖片並不會解壓縮圖片
CATransaction
捕獲到了
UIImageView
圖層數的變化
Runloop
到來時,
Core Animation
提交了這個隱式的
transaction
CGBitmapContextCreate
對圖片進行從新繪製,獲得一張新的解壓縮後的位圖