前言
OpenGL,一個跨平臺的圖像渲染引擎框架;
OpenGL ES,作為OpenGL的一個子集,針對移動端設備或者游戲主機等嵌入式設備的渲染框架;
Metal,Apple推出的圖形渲染框架,目前作為iOS底層的渲染的核心;
常見名詞
-
狀態(tài)機(Context):在使用OpenGL指令前,需要創(chuàng)建一個OpenGL的上下文(Context),來保存一些配置信息(或者叫狀態(tài)信息),可以保存狀態(tài),接收輸入,停止狀態(tài)。就比如我們在使用iOS中的
CoreGraphics繪圖的操作一樣:
//獲取上下文
CGContextRef context = UIGraphicsGetCurrentContext();
//更新/設置上下文狀態(tài)
CGContextAddEllipseInRect(context, CGRectMake(0,0,100,100));
//更新/設置上下文狀態(tài)
CGContextSetFillColorWithColor(context, [UIColor blueColor].CGColor);
//更新/設置上下文狀態(tài)
CGContextFillPath(context);
-渲染(Render):繪制到屏幕的過程。
-頂點數(shù)組(VertexArray):屏幕上的位置信息集合(頂點數(shù)據(jù)),比如UIView.frame,通常存放在內(nèi)存中。
-頂點緩沖區(qū)(VertexBuffer):將頂點數(shù)據(jù)緩存到GPU的顯存中。
-管線:就像工廠的生產(chǎn)流水線,一個接一個的環(huán)節(jié)。
-固定管線:一個設定好的生產(chǎn)方式;比如調(diào)用一些系統(tǒng)固定功能的API,我們不需要關注內(nèi)部實現(xiàn),而且無法改變它的內(nèi)部實現(xiàn);在OpenGL中就是固定著色器(OpenGL提供了一些預設好的渲染API).
-可編程管線:可自定義,正好跟固定管線相反,在OpenGL下使用GLSL語法來自定義。
-著色器(shader):運行在GPU上的一個代碼段。
-固定著色器(存儲著色器):預設好的代碼段,直接調(diào)用,不可更改。
-自定義著色器:使用GLSL語法自定義代碼段,比如頂點著色器(確實要顯示圖形的位置;縮放/平移/旋轉(zhuǎn);3D效果的投影換算),片元著色器(對圖形每一個像素點的處理,GPU并行計算)。
-GLSL: OpenGL Shader Language 的縮寫
-光柵化:將代碼邏輯位置轉(zhuǎn)換為屏幕像素物理位置的過程,首先確認圖像像素范圍,然后將顏色映射上去。
-紋理:理解為一張圖片,位圖(bitmap);
-混合(Blend):對兩個圖層重疊部分的渲染計算。比如兩個半透明視圖重疊部分的顏色計算。
-變換矩陣:矩陣(Matrix)是一個按照長方陣列排列的復數(shù)或?qū)崝?shù)集合,是數(shù)學線性代數(shù)中的一個概念。比如iOS下CGAffineTransform,可以實現(xiàn)視圖的平移,縮放,旋轉(zhuǎn)。
-投影矩陣:?用于將3D坐標轉(zhuǎn)換為?二維屏幕坐標,實際線條也將在?二維坐標下進?行行繪制。
-正投影:又稱為平行投影,1:1的繪制,描述2D效果
-透視投影:描述3D效果,具有空間感(遠小近大)
-物體坐標系:類似于UIView.layer.bounds
-世界坐標系:類似于UIView.layer.frame
以上的解釋可能不是很標準,只是個人對這些名詞的一些理解,如果有錯誤的地方,請指正,謝謝!
圖片的渲染流程
圖片的渲染是有CPU和GPU共同完成的
- CPU:計算顯示的位置(Frame),圖片解壓(png->bitmap)等,通過總線交給GPU;
- GPU:頂點著色->圖元裝配->光柵化->片元著色->幀緩存區(qū)->渲染顯示
CoreGraphics 解壓圖片
1.CGBitmapContextCreate()
2.CGContextDrawImage()
3.CGBitmapContextCreateImage()
總結
以上信息待完善。這里先記錄一下!?。?/p>