二津滞、GLKit 及 常見API

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呈現(xiàn)圖片過程

通過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加載處理
從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)建紋理
從內(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)建紋理
從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)建紋理
從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: 初始化新視圖
  • 設(shè)置代理
屬性 說明
delegate 視圖的代理
  • 配置幀緩存區(qū)對象
屬性 說明
配置幀緩存區(qū)對象 drawableColorFormat 顏?渲染緩存區(qū)格式
drawableDepthFormat 深度渲染緩存區(qū)格式
drawableStencilFormat 模板渲染緩存區(qū)的格式
drawableMultisample 多重采樣緩存區(qū)的格式

-幀緩存區(qū)屬性

屬性 說明
drawableHeight 底層緩存區(qū)對象的?度(以像素為單位)
drawableWidth 底層緩存區(qū)對象的寬度(以像素為單位)
  • 繪制視圖的內(nèi)容
屬性 說明
context 繪制視圖內(nèi)容時使?用的OpenGL ES 上下?文
drawableStencilFormat 將底層FrameBuffer 對象綁定到OpenGL ES
enableSetNeedsDisplay 布爾值,指定視圖是否響應(yīng)使得視圖內(nèi)容?效的消息
snapshot 繪制視圖內(nèi)容并將其作為新圖像對象返回
方法 說明
- bindDrawable 深度渲染緩存區(qū)格式
- display ?即重繪視圖內(nèi)容
  • 刪除視圖FrameBuffer對象
方法 說明
- 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)容的實際速率
  • 配置GLKViewDelegate代理
屬性 說明
delegate 視圖控制器的代理
  • 控制幀更新

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)
  • 獲取有關(guān)View 更新信息
屬性 說明
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ù)
  • 暫停/恢復(fù)通知
回調(diào)方法 說明
- glkViewController : willPause: 在渲染循環(huán)暫臀嗨埃或恢復(fù)之前調(diào)?

GLKBaseEffect

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

  • 命名Effect
屬性 說明
label 給Effect(效果)命名
  • 配置模型視圖轉(zhuǎn)換
屬性 說明
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ù)時使?常量顏?
  • 準(zhǔn)備繪制效果
方法 說明
- prepareToDraw 準(zhǔn)備渲染效果

注意
1、GLKit中最多只有3個光照称近,2個紋理
2第队、常量顏色:黑色

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市刨秆,隨后出現(xiàn)的幾起案子凳谦,更是在濱河造成了極大的恐慌,老刑警劉巖衡未,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件尸执,死亡現(xiàn)場離奇詭異,居然都是意外死亡缓醋,警方通過查閱死者的電腦和手機如失,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來送粱,“玉大人岖常,你說我怎么就攤上這事『剑” “怎么了竭鞍?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長橄镜。 經(jīng)常有香客問我偎快,道長,這世上最難降的妖魔是什么洽胶? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任晒夹,我火速辦了婚禮,結(jié)果婚禮上姊氓,老公的妹妹穿的比我還像新娘丐怯。我一直安慰自己,他們只是感情好翔横,可當(dāng)我...
    茶點故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布读跷。 她就那樣靜靜地躺著,像睡著了一般禾唁。 火紅的嫁衣襯著肌膚如雪效览。 梳的紋絲不亂的頭發(fā)上无切,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天,我揣著相機與錄音丐枉,去河邊找鬼哆键。 笑死,一個胖子當(dāng)著我的面吹牛瘦锹,可吹牛的內(nèi)容都是我干的籍嘹。 我是一名探鬼主播,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼弯院,長吁一口氣:“原來是場噩夢啊……” “哼辱士!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起抽兆,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤识补,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后辫红,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體凭涂,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年贴妻,在試婚紗的時候發(fā)現(xiàn)自己被綠了切油。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡名惩,死狀恐怖澎胡,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情娩鹉,我是刑警寧澤攻谁,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站弯予,受9級特大地震影響戚宦,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜锈嫩,卻給世界環(huán)境...
    茶點故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一受楼、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧呼寸,春花似錦艳汽、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春甚牲,著一層夾襖步出監(jiān)牢的瞬間义郑,已是汗流浹背蝶柿。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工丈钙, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人交汤。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓雏赦,卻偏偏與公主長得像,于是被迫代替她去往敵國和親芙扎。 傳聞我的和親對象是個殘疾皇子星岗,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,779評論 2 354