二、GLKit 及 常見(jiàn)API

OpenGL + OpenGL ES +Metal 系列文章匯總

GLKit 簡(jiǎn)述

先了解GLKit框架前,先附上GLKit的蘋(píng)果官方文檔GLKitAPI

GLKit框架的設(shè)計(jì)目的是為了簡(jiǎn)化基于OpenGL/OpenGL ES的應(yīng)用開(kāi)發(fā),加快了OpenGL/OpenGL ES應(yīng)用程序開(kāi)發(fā)

GLKit功能

  • 提供高性能的數(shù)學(xué)運(yùn)算(Math libraries):提供常用的向量,四元數(shù)和矩陣運(yùn)算。
  • 加載紋理(Texture loading):允許加載各種紋理,且可以后臺(tái)加載,通過(guò)GLKTextureLoader類來(lái)加載
  • 提供常見(jiàn)的著色器(effect):包含以下3種著色器
    • GLKBaseEffect
    • GLKReflectionMapEffect
    • GLKSkyboxEffect
  • 提供視圖視圖以及視圖控制器:GLKView和GLKViewController
    • GLKView:提供繪制場(chǎng)所,繼承自UIView
    • GLKViewController:?于繪制視圖內(nèi)容的管理與呈現(xiàn),繼承自UIViewController)

使用GLKit視圖呈現(xiàn)OpenGL ES 內(nèi)容

下圖來(lái)自Apple官方文檔Drawing with OpenGL ES and GLKit

GLKit呈現(xiàn)圖片過(guò)程

通過(guò)GLKit展示圖片,主要有以下三個(gè)步驟

  • GLKView的創(chuàng)建和配置
  • 使用GLKView對(duì)象繪制圖形,并存儲(chǔ)到幀緩存區(qū)
  • 從幀緩存區(qū)中讀取數(shù)據(jù),顯示到屏幕上

GLKit 常用API

GLKit 紋理加載

GLKTextureInfo 創(chuàng)建OpenGL 紋理信息

常見(jiàn)的屬性如表所示

屬性 說(shuō)明
name OpenGL 上下?文中紋理名稱
target 紋理綁定的目標(biāo)
height 加載的紋理高度
width 加載紋理的寬度
textureOrigin 加載紋理中的原點(diǎn)位置
alphaState 加載紋理中alpha分量狀態(tài)
containsMipmaps 布爾值,加載的紋理是否包含mip貼圖

GLTextureLoader 簡(jiǎn)化從各種資源?件中加載紋理

  • 初始化
初始化方法 說(shuō)明
- initWithSharegroup: 初始化?個(gè)新的紋理加載到對(duì)象中
- initWithShareContext: 初始化一個(gè)新的紋理加載對(duì)象
  • 從文件中加載處理
從文件中加載處理方法 說(shuō)明
+ textureWithContentsOfFile:options:errer: 從?件加載2D紋理圖像并從數(shù)據(jù)中創(chuàng)建新的紋理
- textureWithContentsOfFile:options:queue:completionHandler: 從?件中異步加載2D紋理圖像,并根據(jù)數(shù)據(jù)創(chuàng)建新紋理
  • 從URL加載處理
從URL加載紋理方法 說(shuō)明
- textureWithContentsOfURL:options:error: 從URL加載2D紋理圖像并從數(shù)據(jù)創(chuàng)建新紋理
- textureWithContentsOfURL:options:queue:completionHandler: 從URL異步加載2D紋理圖像,并根據(jù)數(shù)據(jù)創(chuàng)建新紋理
  • 從內(nèi)存中表示創(chuàng)建紋理
從內(nèi)存中表示創(chuàng)建紋理方法 說(shuō)明
+ 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)建紋理
從CGImages創(chuàng)建紋理方法 說(shuō)明
- textureWithCGImage:options:error: 從Quartz圖像 加載2D紋理圖像并從數(shù)據(jù)創(chuàng)建新紋理
- textureWithCGImage:options:queue:completionHandler: 從Quartz圖像異步加載2D紋理圖像,并根據(jù)數(shù)據(jù)創(chuàng)建新紋理
  • 從URL加載多維創(chuàng)建紋理
從URL加載多維創(chuàng)建紋理方法 說(shuō)明
+ cabeMapWithContentsOfURL:options:errer: 從單個(gè)URL加載?立?方體貼圖紋理圖像,并根據(jù)數(shù)據(jù)創(chuàng)建新紋理
- cabeMapWithContentsOfURL:options:queue:completionHandler: 從單個(gè)URL異步加載?方體貼圖紋理圖像,并根據(jù)數(shù)據(jù)創(chuàng)建新紋理
  • 從文件加載多維數(shù)據(jù)創(chuàng)建紋理
文件加載多維數(shù)據(jù)創(chuàng)建紋理方法 說(shuō)明
+ cubeMapWithContentsOfFile:options:errer: 從單個(gè)文件加載?方體貼圖紋理對(duì)象,并從數(shù)據(jù)中創(chuàng)建新紋理
- cubeMapWithContentsOfFile:options:queue:completionHandler: 從單個(gè)?件異步加載?方體貼圖紋理對(duì)象,并從數(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)容的視圖默認(rèn)實(shí)現(xiàn),常用API及屬性如下所示

  • 初始化視圖
屬性 說(shuō)明
- initWithFrame:context: 初始化新視圖
  • 設(shè)置代理
屬性 說(shuō)明
delegate 視圖的代理
  • 配置幀緩存區(qū)對(duì)象
屬性 說(shuō)明
配置幀緩存區(qū)對(duì)象 drawableColorFormat 顏?渲染緩存區(qū)格式
drawableDepthFormat 深度渲染緩存區(qū)格式
drawableStencilFormat 模板渲染緩存區(qū)的格式
drawableMultisample 多重采樣緩存區(qū)的格式

-幀緩存區(qū)屬性

屬性 說(shuō)明
drawableHeight 底層緩存區(qū)對(duì)象的?度(以像素為單位)
drawableWidth 底層緩存區(qū)對(duì)象的寬度(以像素為單位)
  • 繪制視圖的內(nèi)容
屬性 說(shuō)明
context 繪制視圖內(nèi)容時(shí)使?用的OpenGL ES 上下?文
drawableStencilFormat 將底層FrameBuffer 對(duì)象綁定到OpenGL ES
enableSetNeedsDisplay 布爾值,指定視圖是否響應(yīng)使得視圖內(nèi)容?效的消息
snapshot 繪制視圖內(nèi)容并將其作為新圖像對(duì)象返回
方法 說(shuō)明
- bindDrawable 深度渲染緩存區(qū)格式
- display ?即重繪視圖內(nèi)容
  • 刪除視圖FrameBuffer對(duì)象
方法 說(shuō)明
- deleteDrawable 刪除與視圖關(guān)聯(lián)的可繪制對(duì)象

GLKViewDelegate ?于GLKView 對(duì)象回調(diào)方法

  • 繪制視圖的內(nèi)容(必須實(shí)現(xiàn)代理!?。。。?/li>
屬性 說(shuō)明
- glkView:drawInRect: 繪制視圖內(nèi)容 (必須實(shí)現(xiàn)代理)

GLKViewController
管理OpenGL ES 渲染循環(huán)的視圖控制器,常用的API如下

  • 更新
方法 說(shuō)明
- (void) update 更新視圖內(nèi)容
- (void) glkViewControllerUpdate: 更新視圖控制器顯示
  • 配置幀速率
屬性 說(shuō)明
preferredFramesPerSecond 視圖控制器調(diào)?視圖以及更新視圖內(nèi)容的速率
framesPerSencond 視圖控制器調(diào)?視圖以及更新其內(nèi)容的實(shí)際速率
  • 配置GLKViewDelegate代理
屬性 說(shuō)明
delegate 視圖控制器的代理
  • 控制幀更新

resumeOnDidBecomeActive 布爾值,當(dāng)前程序變?yōu)榛顒?dòng)狀態(tài)時(shí)視圖控制是否?自動(dòng)恢復(fù)呈現(xiàn)循環(huán)

屬性 說(shuō)明
paused 布爾值,渲染循環(huán)是否已暫停
pausedOnWillResignActive 布爾值,當(dāng)前程序重新激活活動(dòng)狀態(tài)時(shí)視圖控制器器是否自動(dòng)暫停渲染循環(huán)
resumeOnDidBecomeActive 布爾值,當(dāng)前程序變?yōu)榛顒?dòng)狀態(tài)時(shí)視圖控制是否?自動(dòng)恢復(fù)呈現(xiàn)循環(huán)
  • 獲取有關(guān)View 更新信息
屬性 說(shuō)明
frameDisplayed 視圖控制器自創(chuàng)建以來(lái)發(fā)送的幀更新數(shù)
timeSinceFirstResume 自視圖控制器第?次恢復(fù)發(fā)送更新事件以來(lái)經(jīng)過(guò)的時(shí)間量
timeSinceLastResume 自上次視圖控制器恢復(fù)發(fā)送更新事件以來(lái)更新的時(shí)間量
timeSinceLastUpdate 自上次視圖控制器調(diào)?委托?法以及經(jīng)過(guò)的時(shí)間量
timeSinceLastDraw ?上次視圖控制器調(diào)?委托?法以及經(jīng)過(guò)的時(shí)間量

**GLKViewControllerDelegate **
渲染循環(huán)回調(diào)?方法

  • 處理理更更新事件
回調(diào)方法 說(shuō)明
- glkViewControllerUpdate: 在顯示每個(gè)幀之前調(diào)?,類似OpenGL中RenderScene函數(shù)
  • 暫停/恢復(fù)通知
回調(diào)方法 說(shuō)明
- glkViewController : willPause: 在渲染循環(huán)暫?;蚧謴?fù)之前調(diào)?

GLKBaseEffect

一種簡(jiǎn)單光照/著色系統(tǒng),?于基于著?器的OpenGL渲染

  • 命名Effect
屬性 說(shuō)明
label 給Effect(效果)命名
  • 配置模型視圖轉(zhuǎn)換
屬性 說(shuō)明
transform 綁定效果時(shí)應(yīng)?于頂點(diǎn)數(shù)據(jù)的模型視圖,投影和紋理變換
  • 配置光照效果
屬性 說(shuō)明
lightingType 用于計(jì)算每個(gè)片段的光照策略,GLKLightingType
GLKLightingType枚舉 說(shuō)明
GLKLightingTypePerVertex 表示在三角形中每個(gè)頂點(diǎn)執(zhí)?光照計(jì)算,然后在三角形進(jìn)?插值
GLKLightingTypePerPixel 表示光照計(jì)算的輸?在三角形內(nèi)插入,并且在每個(gè)片段執(zhí)行光照計(jì)算
  • 配置光照
屬性 說(shuō)明
lightModelTwoSided 布爾值,表示為基元的兩側(cè)計(jì)算光照
material 計(jì)算渲染圖元光照使?的材質(zhì)屬性
lightModelAmbientColor 環(huán)境顏?,應(yīng)?效果渲染的所有圖元.
light0 場(chǎng)景中第?個(gè)光照屬性
light1 場(chǎng)景中第?個(gè)光照屬性
light2 場(chǎng)景中第三個(gè)光照屬性
  • 配置紋理
屬性 說(shuō)明
texture2d0 第一個(gè)紋理屬性
texture2d1 第?個(gè)紋理屬性
textureOrder 紋理應(yīng)用于渲染圖元的順序
  • 配置霧化
屬性 說(shuō)明
fog 應(yīng)?于場(chǎng)景的霧屬性
  • 配置顏色信息
屬性 說(shuō)明
colorMaterialEnable 布爾值,表示計(jì)算光照與材質(zhì)交互時(shí)是否使?顏?頂點(diǎn)屬性
useConstantColor 布爾值,指示是否使用常量顏?
constantColor 不提供每個(gè)頂點(diǎn)顏色數(shù)據(jù)時(shí)使?常量顏?
  • 準(zhǔn)備繪制效果
方法 說(shuō)明
- prepareToDraw 準(zhǔn)備渲染效果

注意
1、GLKit中最多只有3個(gè)光照,2個(gè)紋理
2、常量顏色:黑色

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容