OpenGL是用于可視化的二維和三維數據。它是一個多用途開放標準圖形庫,支持2D和3D數字內容創建,機械和建筑設計,虛擬原型,飛行模擬,視頻游戲等應用。您可以使用OpenGL配置3D圖形管道并提交數據。頂點被變換和點亮,組合成原始圖像,并進行光柵化以創建2D圖像。OpenGL旨在將函數調用轉換為可發送到底層圖形硬件的圖形命令。因為這個底層硬件專門用于處理圖形命令,因此OpenGL繪圖通常非常快。
用于嵌入式系統的OpenGL(OpenGL ES)是OpenGL的簡化版本,可以消除冗余功能,從而提供更容易學習和易于在移動圖形硬件中實現的庫。
OpenGL ES允許應用程序利用底層圖形處理器的功能。iOS設備上的GPU可以執行復雜的2D和3D繪圖,以及最終圖像中每個像素的復雜陰影計算。您應該使用OpenGL ES,如果您的應用程序的設計要求要求最直接和全面的訪問可能對GPU硬件
在iOS中構建OpenGL ES應用程序需要幾個注意事項,其中一些是OpenGL ES編程的通用,其中一些特定于iOS。
1.確定哪個版本的OpenGL ES具有適合您應用程序的功能集,并創建一個OpenGL ES上下文。
2.在運行時驗證設備是否支持您要使用的OpenGL ES功能。
3.選擇在哪里渲染您的OpenGL ES內容。
4.確保您的應用程序在iOS中正常運行。
5.實現您的渲染引擎。
6.使用Xcode和Instruments調試您的OpenGL ES應用程序,并調整它以獲得最佳性能。
選擇哪些OpenGL ES版本支持
決定您的應用程序是否應支持OpenGL ES 3.0,OpenGL ES 2.0,OpenGL ES 1.1或多個版本。
OpenGL ES 3.0是iOS 7中的新功能。它增加了許多新功能,可以實現更高性能,通用GPU計算技術,以及以前只能在桌面級硬件和游戲機上使用更復雜的視覺效果。
OpenGL ES 2.0是iOS設備的基準配置文件,具有基于可編程著色器的可配置圖形流水線。
OpenGL ES 1.1僅提供基本的固定功能圖形管道,主要用于向后兼容的iOS中。
配置OpenGL ES上下文
EAGL是iOS實現的OpenGL ES渲染上下文
在您的應用程序可以調用任何OpenGL ES函數之前,它必須初始化一個
EAGLContext對象。EAGLContext類還提供用于OpenGL ES的內容與核心動畫結合的方法。
每個上下文定位一個特定版本的OpenGL ES
一個EAGLContext對象只支持一個版本的OpenGL ES。例如,為OpenGL ES 1.1編寫的代碼與OpenGL ES 2.0或3.0上下文不兼容。使用核心OpenGL ES 2.0功能的代碼與OpenGL ES 3.0上下文兼容,為OpenGL ES 2.0擴展設計的代碼通常可以在OpenGL ES 3.0上下文中進行微小更改。許多新的OpenGL ES 3.0功能和增加的硬件功能需要OpenGL ES 3.0上下文。
您的應用程序決定時,它支持哪種OpenGL ES的版本創建和初始化的EAGLContext對象。如果設備不支持所需版本的OpenGL ES,則該initWithAPI返回nil。您的應用程序必須進行測試,以確保在使用之前成功初始化上下文。
為了支持OpenGL ES的多個版本作為應用程序中的渲染選項,您應該首先嘗試初始化要定位的最新版本的渲染上下文。如果返回的對象是nil,則初始化舊版本的上下文。
- (EAGLContext *)createBestEAGLContext {
EAGLContext * context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES3];
if(context == nil){
context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];
}
return context;
}
繪制OpenGL ES和GLKit
GLKit框架提供視圖和視圖控制器類,可以消除繪圖和動畫化OpenGL ES內容所需的設置和維護代碼。本GLKView類管理OpenGL ES的基礎設施,為您的繪制代碼提供一個場所,而GLKViewController類提供了在GLKit視圖的OpenGL ES內容的流暢的動畫渲染循環。這些類擴展了用于繪制視圖內容和管理視圖呈現的標準UIKit設計模式。因此,您可以將重點放在OpenGL ES渲染代碼上,使您的應用程序快速啟動并運行。GLKit框架還提供了其他功能來簡化OpenGL ES 2.0和3.0開發。
使用GLKit視圖渲染OpenGL ES內容