GLKit 框架的设计目标是为了
简化基于OpenGL/OpenGL ES的应用开发
。它的出现加快了OpenGL ES或OpenGL应⽤用程序开发。
GLKit功能
- 提供高性能的数学运算:提供常用的向量,四元数和矩阵运算。
- 加载纹理:允许加载各种纹理,且可以后台加载,通过GLKTextureLoader类来加载;
- 提供常见的着色器(effect):包含3种着色器
GLKBaseEffect
、GLKReflectionMapEffect
、GLKSkyboxEffect
- 提供视图视图以及视图控制器:
GLKView
和GLKViewController
GLKView
提供绘制场所,继承自UIView
。
GLKViewController
⽤于绘制视图内容的管理与呈现,继承自UIViewController
。
使用GLKit视图呈现OpenGL ES 内容
GLKit常用API
GLKit 纹理加载
GLKTextureInfo
创建OpenGL
纹理信息
属性 | 说明 |
---|---|
name | OpenGL 上下⽂文中纹理名称 |
target | 碗里绑定的目标 |
height | 加载的纹理高度 |
width | 加载的纹理宽度 |
textureOrigin | 加载纹理中原点的位置 |
alphaState | 加载纹理中alpha分量状态 |
containsMipmaps | 布尔值。加载的纹理是否包含mip贴图 |
GLTextureLoader
简化从各种资源⽂件中加载纹理
初始化
- 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:
从一系列文件异步加载立方体贴图纹理图像,并从数据中创建新纹理
视图渲染
初始化视图
- initWithFrame:context
设置代理
delegate
配置缓冲区对象
属性 | 说明 |
---|---|
drawableColorFormat | 颜⾊渲染缓存区格式 |
drawableDepthFormat | 深度渲染缓存区格式 |
drawableStencilFormat | 模板渲染缓存区的格式 |
drawableMultisample | 多重采样缓存区的格式 |
- 帧缓存区属性
属性 | 说明 |
---|---|
drawableHeight | 底层缓存区对象的⾼高度(以像素为单位) |
drawableWidth | 底层缓存区对象的宽度(以像素为单位) |
- 绘制视图内容
属性 | 说明 |
---|---|
context | 绘制视图内容时使用的OpenGL ES 上下⽂ |
bindDrawable | 将底层FrameBuffer对象绑定到OpenGL ES |
enableSetNeedsDisplay | 布尔值,指定视图是否响应使得视图内容没有无效的消息 |
display | ⽴即重绘视图内容 |
snapshot | 绘制视图内容并将其作为新图像对象返回 |
删除视图FrameBuffer对象
- deleteDrawable
删除与视图关联的可绘制对象绘制视图内容
- glkView:drawInRect:
绘制视图内容 (必须实现的代理GLKViewDelegate
)更新
- (void)update
更新视图内容
- (void)glkViewControllerUpdate:
配置帧速率
属性 | 说明 |
---|---|
preferredFramesPerSecond | 视图控制器调用视图以及更新视图内容的速率 |
framesPerSencond | 视图控制器调用视图以及更新其内容的实际速率 |
配置
GLKViewController
代理
delegate
视图控制器的代理控制帧更新
属性 | 说明 |
---|---|
paused | 视图控制器调用视图以及更新视图内容的速率 |
pausedOnWillResignActive | 布尔值,当前程序重新激活活动状态时视图控制器是否⾃动暂停渲染循环 |
resumeOnDidBecomeActive | 布尔值,当前程序变为活动状态时视图控制器是否自动恢复呈现循环 |
- 获取有关
View
更新信息
属性 | 说明 |
---|---|
frameDisplayed | 视图控制器自创建以来发送的帧更新数 |
timeSinceFirstResume | ⾃视图控制器第一次恢复发送更新事件以来经过的时间量 |
timeSinceLastResume | 自上次视图控制器恢复发送更新事件以来更新的时间量 |
timeSinceLastUpdate | 自上次视图控制器调⽤委托⽅法以及经过的时间量 |
timeSinceLastDraw | ⾃上次视图控制器调⽤视图display 方法以来经过的时间量 |
处理更新事件
- glkViewControllerUpdate:
在显示每个帧之前调⽤暂停/恢复通知
- glkViewController : willPause:
在渲染循环暂停或恢复之前调⽤
GLKBaseEffect
⼀种简单光照/着色系统,用于基于着⾊器OpenGL
渲染
命名Effect
label
给Effect(效果)命名配置模型视图转换
transform
绑定效果时应用于顶点数据的模型视图、投影和纹理变换配置光照效果
lightingType
用于计算每个片段的光照策略,GLKLightingType
GLKLightingType | 说明 |
---|---|
GLKLightingTypePerVertex | 表示在三角形中每个顶点执⾏光照计算,然后在三角形中进⾏插值 |
GLKLightingTypePerPixel | 表示光照计算的输入在三角形内插⼊,并且在每个片段执⾏光照计算 |
- 配置光照
属性 | 说明 |
---|---|
lightModelTwoSided | 布尔值,表示为基元的两侧计算光照 |
material | 计算渲染图元光照使⽤用的材质属性 |
lightModelAmbientColor | 环境颜色,应用效果渲染的所有图元 |
light0 | 场景中第一个光照属性 |
light1 | 场景中第二个光照属性 |
light2 | 场景中第三个光照属性 |
- 配置纹理
属性 | 说明 |
---|---|
texture2d0 | 第一个纹理属性 |
texture2d1 | 第二个纹理属性 |
textureOrder | 纹理应用于渲染图元的顺序 |
配置雾化
fog
应用于场景的雾属性配置颜色信息
属性 | 说明 |
---|---|
colorMaterialEnable | 布尔值,表示计算光照与材质交互时是否使用颜色顶点属性 |
useConstantColor | 布尔值,指示是否使用常量颜色 |
constantColor | 不提供每个顶点颜色数据时使用常量颜色 |
- 准备绘制效果
- prepareToDraw
准备渲染效果