OpenGL ES 中GLKit常用API解析
1 GLKit简析
GLKit 框架的设计?目标是为了了简化基于OpenGL / OpenGL ES 的应?用开发。
GLKit出现加快了OpenGL ES或OpenGL应?用程序开发。 使?用数学库,背景纹理加载,预先创建的着?器效果,以及标准视图和视图控制器来实现渲染循环。
苹果弃?了OpenGL ES ,但iOS开发者可以继续使用.
2 GLKit 功能
GLKit在四个关键领域提供功能:
- 纹理加载 使用
GLKTextureLoader - 数学库提供常用的向量,四元数和矩阵运算
- 效果提供了常见着色器效果的标准实现,包括了三个效果该类实现OpenGL ES 1.1阴影和光照模型的关键子集,该类扩展了基本效果以包括反射映射支持,并且该类提供了skybox效果的实现。
- 视图和视图控制器提供了OpenGL ES视图和相应的视图控制器的标准实现(
GLKViewController和GLKView)
3 GLKit常用api
3.1 GLKTextureLoader
功能:简化从各种资源文件中加载纹理
初始化
- initWithSharegroup: 初始化?个新的纹理加载到对象中
- initWithShareContext: 初始化?个新的纹理加载对象
从文件中加载纹理
+ textureWithContentsOfFile:options:errer: 从?件加载2D纹理图像并从数据中创建新的纹理
- textureWithContentsOfFile:options:queue:completionHandler: 从?件中异步加载2D纹理图像,并根据数据创建新纹理
从URL加载纹理
- textureWithContentsOfURL:options:error: 从URL加载2D纹理图像并从数据创建新纹理
- textureWithContentsOfURL:options:queue:completionHandler: 从URL异步加载2D纹理图像,并根据数据创建新纹理
从内存中加载纹理
+ textureWithContentsOfData:options:errer: 从内存空间加载2D纹理图像,并根据数据创建新纹理
- textureWithContentsOfData:options:queue:completionHandler:从内存空间异步加载2D纹理图像,并从数据中创建新纹理
从CGImages创建纹理
- textureWithCGImage:options:error: 从Quartz图像 加载2D纹理图像并从数据创建新纹理
- textureWithCGImage:options:queue:completionHandler: 从Quartz图像异步加载2D纹理图像,并根据数据创建新纹理
从URL加载多维纹理
+ cabeMapWithContentsOfURL:options:errer: 从单个URL加载?方体贴图纹理图像,并根据数据创建新纹理
- cabeMapWithContentsOfURL:options:queue:completionHandler:从单个URL异步加载?方体贴图纹理图像,并根据数据创建新纹理
从文件加载多维数据创建纹理
+ cubeMapWithContentsOfFile:options:errer: 从单个文件加载立方体贴图纹理对象,并从数据中创建新纹理
- cubeMapWithContentsOfFile:options:queue:completionHandler:从单个文件异步加载?方体贴图纹理对象,并从数据中创建新纹理
+ cubeMapWithContentsOfFiles:options:errer: 从一系列文件中加载?方体贴图纹理图像,并从数据总创建新纹理
- cubeMapWithContentsOfFiles:options:options:queue:completionHandler:从?系列文件异步加载?方体贴图纹理图像,并从数据中创建新纹理
3.2 GLKView
功能:使用OpenGL ES 绘制内容的视图的默认实现
3.2.1 属性
代理
delegate 视图的代理
配置帧缓存区对象
drawableColorFormat 颜?色渲染缓存区格式
drawableDepthFormat 深度渲染缓存区格式
drawableStencilFormat 模板渲染缓存区的格式
drawableMultisample 多重采样缓存区的格式
帧缓存区属性
drawableHeight 底层缓存区对象的?高度(以像素为单位)
drawableWidth 底层缓存区对象的宽度(以像素为单位)
绘制视图的内容
context 绘制视图内容时使?的OpenGL ES 上下文
enableSetNeedsDisplay 布尔值,指定视图是否响应使得视图内容?无效的消息
snapshot 绘制视图内容并将其作为新图像对象返回
3.2.2 方法
初始化视图
- initWithFrame:context: 初始化新视图
绘制视图的内容
- bindDrawable 将底层FrameBuffer 对象绑定到OpenGL ES
- display ?立即重绘视图内容
删除视图FrameBuffer对象
- deleteDrawable 删除与视图关联的可绘制对象
绘制视图的内容
- glkView:drawInRect: 绘制视图内容 (必须实现代理)
3.3 GLKViewController
功能:管理OpenGL ES渲染循环的视图控制器
更新
- (void) update 更新视图内容
- (void) glkViewControllerUpdate:
配置帧速率
preferredFramesPerSecond 视图控制器调?视图以及更新视图内容的速率
framesPerSencond 视图控制器调用视图以及更新其内容的实际速率
配置GLKViewController 代理
delegate 视图控制器的代理
控制帧更新
paused 布尔值,渲染循环是否已暂停
pausedOnWillResignActive 布尔值,当前程序重新激活动状态时视图控制器是否自动暂停渲染循环
resumeOnDidBecomeActive 布尔值,当前程序变为活动状态时视图控制是否自动恢复呈现循环
获取有关View 更更新信息
frameDisplayed 视图控制器?创建以来发送的帧更新数
timeSinceFirstResume ?视图控制器第一次恢复发送更新事件以来经过的时间量
timeSinceLastResume ?上次视图控制器恢复发送更新事件以来更新的时间量
timeSinceLastUpdate ?上次视图控制器调用委托方法以及经过的时间量glkViewControllerUpdate:
timeSinceLastDraw ?上次视图控制器调用视图display 方法以来经过的时间量
3.4 GLKViewControllerDelegate
功能:渲染循环回调方法
处理理更更新事件
- glkViewControllerUpdate: 在显示每个帧之前调?用
暂停/恢复通知
- glkViewController:willPause: 在渲染循环暂停或恢复之前调?用.
3.5 GLKBaseEffect
功能:一种简单光照/着?系统,?于基于着色器OpenGL 渲染
命名Effect
label 给Effect(效果)命名
配置模型视图转换
transform 绑定效果时应?于顶点数据的模型视图,投影和纹理理变换
配置光照效果
lightingType 用于计算每个片段的光照策略,
对应类型为GLKLightingType类型包含:
GLKLightingTypePerVertex 表示在三角形中每个顶点执行光照计算,然后在三角形进行插值
GLKLightingTypePerPixel 表示光照计算的输入在三角形内插入,并且在每个?段执行光照计算
配置光照
lightModelTwoSided 布尔值,表示为基元的两侧计算光照
material 计算渲染图元光照使?的材质属性
lightModelAmbientColor 环境颜色,应用效果渲染的所有图元.
light0 场景中第一个光照属性
light1 场景中第二个光照属性
light2 场景中第三个光照属性
配置纹理理
texture2d0 第?一个纹理理属性 texture2d1 第?二个纹理理属性
textureOrder 纹理理应?用于渲染图元的顺序
配置雾化
fog 应?用于场景的雾属性
配置颜?色信息
colorMaterialEnable 布尔值,表示计算光照与材质交互时是否使?用颜?色顶点属性
useConstantColor 布尔值,指示是否使?用常量量颜?色
constantColor 不不提供每个顶点颜?色数据时使?用常量量颜?色
准备绘制效果
- prepareToDraw 准备渲染效果