OpenGL + OpenGL ES +Metal 系列文章匯總
GLKit 簡述
先了解GLKit框架前,先附上GLKit的蘋果官方文檔GLKitAPI
GLKit框架的設(shè)計目的是為了簡化基于OpenGL/OpenGL ES的應(yīng)用開發(fā),加快了OpenGL/OpenGL ES應(yīng)用程序開發(fā)
GLKit功能
- 提供高性能的數(shù)學(xué)運算(Math libraries):提供常用的向量,四元數(shù)和矩陣運算躺率。
- 加載紋理(Texture loading):允許加載各種紋理,且可以后臺加載讼积,通過
GLKTextureLoader
類來加載
- 提供常見的著色器(effect):包含以下3種著色器
- GLKBaseEffect
- GLKReflectionMapEffect
- GLKSkyboxEffect
- 提供視圖視圖以及視圖控制器:GLKView和GLKViewController
- GLKView:提供繪制場所肥照,繼承自UIView
- GLKViewController:?于繪制視圖內(nèi)容的管理與呈現(xiàn),繼承自UIViewController)
使用GLKit視圖呈現(xiàn)OpenGL ES 內(nèi)容
下圖來自Apple官方文檔Drawing with OpenGL ES and GLKit
通過GLKit展示圖片勤众,主要有以下三個步驟
- GLKView的創(chuàng)建和配置
- 使用GLKView對象繪制圖形,并存儲到幀緩存區(qū)
- 從幀緩存區(qū)中讀取數(shù)據(jù)鲤脏,顯示到屏幕上
GLKit 常用API
GLKit 紋理加載
GLKTextureInfo 創(chuàng)建OpenGL 紋理信息
常見的屬性如表所示
屬性 |
說明 |
name |
OpenGL 上下?文中紋理名稱 |
target |
紋理綁定的目標(biāo) |
height |
加載的紋理高度 |
width |
加載紋理的寬度 |
textureOrigin |
加載紋理中的原點位置 |
alphaState |
加載紋理中alpha分量狀態(tài) |
containsMipmaps |
布爾值,加載的紋理是否包含mip貼圖 |
GLTextureLoader 簡化從各種資源?件中加載紋理
初始化方法 |
說明 |
- initWithSharegroup: |
初始化?個新的紋理加載到對象中 |
- initWithShareContext: |
初始化一個新的紋理加載對象 |
從文件中加載處理方法 |
說明 |
+ textureWithContentsOfFile:options:errer: |
從?件加載2D紋理圖像并從數(shù)據(jù)中創(chuàng)建新的紋理 |
- textureWithContentsOfFile:options:queue:completionHandler: |
從?件中異步加載2D紋理圖像,并根據(jù)數(shù)據(jù)創(chuàng)建新紋理 |
從URL加載紋理方法 |
說明 |
- textureWithContentsOfURL:options:error: |
從URL加載2D紋理圖像并從數(shù)據(jù)創(chuàng)建新紋理 |
- textureWithContentsOfURL:options:queue:completionHandler: |
從URL異步加載2D紋理圖像,并根據(jù)數(shù)據(jù)創(chuàng)建新紋理 |
從內(nèi)存中表示創(chuàng)建紋理方法 |
說明 |
+ textureWithContentsOfData:options:errer: |
從內(nèi)存空間加載2D紋理圖像,并根據(jù)數(shù)據(jù)創(chuàng)建新紋理 |
- textureWithContentsOfData:options:queue:completionHandler: |
從內(nèi)存空間異步加載2D紋理圖像,并從數(shù)據(jù)中創(chuàng)建新紋理 |
從CGImages創(chuàng)建紋理方法 |
說明 |
- textureWithCGImage:options:error: |
從Quartz圖像 加載2D紋理圖像并從數(shù)據(jù)創(chuàng)建新紋理 |
- textureWithCGImage:options:queue:completionHandler: |
從Quartz圖像異步加載2D紋理圖像,并根據(jù)數(shù)據(jù)創(chuàng)建新紋理 |
從URL加載多維創(chuàng)建紋理方法 |
說明 |
+ cabeMapWithContentsOfURL:options:errer: |
從單個URL加載?立?方體貼圖紋理圖像,并根據(jù)數(shù)據(jù)創(chuàng)建新紋理 |
- cabeMapWithContentsOfURL:options:queue:completionHandler: |
從單個URL異步加載?方體貼圖紋理圖像,并根據(jù)數(shù)據(jù)創(chuàng)建新紋理 |
- 從文件加載多維數(shù)據(jù)創(chuàng)建紋理
文件加載多維數(shù)據(jù)創(chuàng)建紋理方法 |
說明 |
+ cubeMapWithContentsOfFile:options:errer: |
從單個文件加載?方體貼圖紋理對象,并從數(shù)據(jù)中創(chuàng)建新紋理 |
- cubeMapWithContentsOfFile:options:queue:completionHandler: |
從單個?件異步加載?方體貼圖紋理對象,并從數(shù)據(jù)中創(chuàng)建新紋理 |
+ cubeMapWithContentsOfFiles:options:errer: |
從?系列文件中加載?方體貼圖紋理圖像,并從數(shù)據(jù)中創(chuàng)建新紋理 |
-cubeMapWithContentsOfFiles:options:options:queue:completionHandler: |
從?系列?件異步加載?方體貼圖紋理圖像,并從數(shù)據(jù)中創(chuàng)建新紋理 |
GLKit OpenGL ES視圖渲染 API
GLKView
使?OpenGL ES 繪制內(nèi)容的視圖默認實現(xiàn)们颜,常用API及屬性如下所示
屬性 |
說明 |
- initWithFrame:context: |
初始化新視圖 |
屬性 |
說明 |
配置幀緩存區(qū)對象 |
drawableColorFormat |
顏?渲染緩存區(qū)格式 |
drawableDepthFormat |
深度渲染緩存區(qū)格式 |
drawableStencilFormat |
模板渲染緩存區(qū)的格式 |
drawableMultisample |
多重采樣緩存區(qū)的格式 |
-幀緩存區(qū)屬性
屬性 |
說明 |
drawableHeight |
底層緩存區(qū)對象的?度(以像素為單位) |
drawableWidth |
底層緩存區(qū)對象的寬度(以像素為單位) |
屬性 |
說明 |
context |
繪制視圖內(nèi)容時使?用的OpenGL ES 上下?文 |
drawableStencilFormat |
將底層FrameBuffer 對象綁定到OpenGL ES |
enableSetNeedsDisplay |
布爾值,指定視圖是否響應(yīng)使得視圖內(nèi)容?效的消息 |
snapshot |
繪制視圖內(nèi)容并將其作為新圖像對象返回 |
方法 |
說明 |
- bindDrawable |
深度渲染緩存區(qū)格式 |
- display |
?即重繪視圖內(nèi)容 |
方法 |
說明 |
- deleteDrawable |
刪除與視圖關(guān)聯(lián)的可繪制對象 |
GLKViewDelegate ?于GLKView 對象回調(diào)方法
- 繪制視圖的內(nèi)容(必須實現(xiàn)代理B蓝洹!?弧E!)
屬性 |
說明 |
- glkView:drawInRect: |
繪制視圖內(nèi)容 (必須實現(xiàn)代理) |
GLKViewController
管理OpenGL ES 渲染循環(huán)的視圖控制器,常用的API如下
方法 |
說明 |
- (void) update |
更新視圖內(nèi)容 |
- (void) glkViewControllerUpdate: |
更新視圖控制器顯示 |
屬性 |
說明 |
preferredFramesPerSecond |
視圖控制器調(diào)?視圖以及更新視圖內(nèi)容的速率 |
framesPerSencond |
視圖控制器調(diào)?視圖以及更新其內(nèi)容的實際速率 |
resumeOnDidBecomeActive 布爾值,當(dāng)前程序變?yōu)榛顒訝顟B(tài)時視圖控制是否?自動恢復(fù)呈現(xiàn)循環(huán)
屬性 |
說明 |
paused |
布爾值,渲染循環(huán)是否已暫停 |
pausedOnWillResignActive |
布爾值,當(dāng)前程序重新激活活動狀態(tài)時視圖控制器器是否自動暫停渲染循環(huán) |
resumeOnDidBecomeActive |
布爾值,當(dāng)前程序變?yōu)榛顒訝顟B(tài)時視圖控制是否?自動恢復(fù)呈現(xiàn)循環(huán) |
屬性 |
說明 |
frameDisplayed |
視圖控制器自創(chuàng)建以來發(fā)送的幀更新數(shù) |
timeSinceFirstResume |
自視圖控制器第?次恢復(fù)發(fā)送更新事件以來經(jīng)過的時間量 |
timeSinceLastResume |
自上次視圖控制器恢復(fù)發(fā)送更新事件以來更新的時間量 |
timeSinceLastUpdate |
自上次視圖控制器調(diào)?委托?法以及經(jīng)過的時間量 |
timeSinceLastDraw |
?上次視圖控制器調(diào)?委托?法以及經(jīng)過的時間量 |
**GLKViewControllerDelegate **
渲染循環(huán)回調(diào)?方法
回調(diào)方法 |
說明 |
- glkViewControllerUpdate: |
在顯示每個幀之前調(diào)?阻问,類似OpenGL中RenderScene函數(shù) |
回調(diào)方法 |
說明 |
- glkViewController : willPause: |
在渲染循環(huán)暫臀嗨埃或恢復(fù)之前調(diào)? |
GLKBaseEffect
一種簡單光照/著色系統(tǒng),?于基于著?器的OpenGL渲染
屬性 |
說明 |
label |
給Effect(效果)命名 |
屬性 |
說明 |
transform |
綁定效果時應(yīng)?于頂點數(shù)據(jù)的模型視圖,投影和紋理變換 |
屬性 |
說明 |
lightingType |
用于計算每個片段的光照策略,GLKLightingType |
GLKLightingType枚舉 |
說明 |
GLKLightingTypePerVertex |
表示在三角形中每個頂點執(zhí)?光照計算,然后在三角形進?插值 |
GLKLightingTypePerPixel |
表示光照計算的輸?在三角形內(nèi)插入,并且在每個片段執(zhí)行光照計算 |
屬性 |
說明 |
lightModelTwoSided |
布爾值,表示為基元的兩側(cè)計算光照 |
material |
計算渲染圖元光照使?的材質(zhì)屬性 |
lightModelAmbientColor |
環(huán)境顏?,應(yīng)?效果渲染的所有圖元. |
light0 |
場景中第?個光照屬性 |
light1 |
場景中第?個光照屬性 |
light2 |
場景中第三個光照屬性 |
屬性 |
說明 |
texture2d0 |
第一個紋理屬性 |
texture2d1 |
第?個紋理屬性 |
textureOrder |
紋理應(yīng)用于渲染圖元的順序 |
屬性 |
說明 |
fog |
應(yīng)?于場景的霧屬性 |
屬性 |
說明 |
colorMaterialEnable |
布爾值,表示計算光照與材質(zhì)交互時是否使?顏?頂點屬性 |
useConstantColor |
布爾值,指示是否使用常量顏? |
constantColor |
不提供每個頂點顏色數(shù)據(jù)時使?常量顏? |
方法 |
說明 |
- prepareToDraw |
準(zhǔn)備渲染效果 |
注意
1、GLKit中最多只有3個光照称近,2個紋理
2第队、常量顏色:黑色
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者