GLKit官方文档里描述了GLKit
框架设计的目标:加速OpenGL ES
或OpenGL
应用程序开发。使用数学库、背景纹理加载、预先创建的着色器效果以及标准视图和视图控制器来实现渲染循环。
GLKit
框架提供的函数和类可以减少创建新的基于着色器的应用程序或移植依赖于OpenGL ES
或OpenGL
早期版本提供的固定函数顶点或片段处理的现有应用程序所需的工作量。(苹果弃用了OpenGL ES但是开发者依然可以继续使用)。
GLKView
提供绘制场所(View
)
GLKViewController
(扩展于标准的UIKit
设计模式,⽤于绘制视图内容的管理与呈现)。
GLKit
是苹果对OpenGL ES
的封装,其关系苹果官方文档里有图片说明。
1.创建和配置
GLKView
,GLKView
继承自UIView
2.使用GLKView
对象,设置颜色,绑定纹理等操作
3.读取帧缓冲区内容显示到屏幕上
注意:GLKView
类通过维护一个framebuffer
对象来完成此功能,该对象保存opengles
绘图命令的结果,然后在绘图方法返回后自动将其显示给核心动画。
GLKit常用API
纹理加载GLKTextureInfo
使用GLKTextureInfo对象创建OpenGL 纹理信息。常见的属性如表所示:
属性 | 说明 |
---|---|
name | OpenGL 上下⽂文中纹理名称 |
target | 纹理绑定的目标 |
height | 加载的纹理高度 |
width | 加载纹理的宽度 |
textureOrigin | 加载纹理中的原点位置 |
alphaState | 加载纹理中alpha分量状态 |
containsMipmaps | 布尔值,加载的纹理是否包含mip贴图 |
初始化,加载文件资源到纹理对象中:
//初始化一个新的纹理对象并加载到对象中
- (instancetype)initWithSharegroup:(EAGLSharegroup *)sharegroup;
//初始化一个新的纹理加载对象
- (instancetype)initWithShareContext:(NSOpenGLContext *)context;
//从文件加载2D纹理对象并从数据中创建新的纹理
+ (nullable GLKTextureInfo *)textureWithContentsOfFile:options:error:
//异步加载
- (void) textureWithContentsOfFile:options:queue:completionHandler:
//从URL加载2D纹理对象并从数据中创建新的纹理
+ (nullable GLKTextureInfo *)textureWithContentsOfURL:options:error
//异步加载
- (void) textureWithContentsOfURL:options:queue:completionHandler:
//从内存中加载2D纹理对象,并根据数据创建新的纹理
+ (nullable GLKTextureInfo *)textureWithContentsOfData:options:error:
//异步加载
-(void) textureWithContentsOfData:options:queue:completionHandler:
//从Quartz图像 加载2D纹理图像并从数据创建新纹理
+ (nullable GLKTextureInfo *)textureWithCGImage:options:error:
//异步加载
-(void) textureWithCGImage:options:queue:completionHandler:
//从单个URL加载⽴⽅体贴图纹理图像,并根据数据创建新纹理
+ (nullable GLKTextureInfo*)cubeMapWithContentsOfFiles:options: error:
//异步加载
-(void)cubeMapWithContentsOfURL:options:queue:completionHandler:
//从单个⽂件加载⽴⽅体贴图纹理对象,并从数据中创建新纹理
+(nullable GLKTextureInfo*)cubeMapWithContentsOfFile:options:errer:
//从单个⽂件异步加载⽴⽅体贴图纹理对象,并从数据中创建新纹理
-(void) cubeMapWithContentsOfFile:options:queue:completionHandler:
//从⼀系列⽂件中加载⽴⽅体贴图纹理图像,并从数据总创建新纹理
+(nullable GLKTextureInfo*)cubeMapWithContentsOfFiles:options:errer:
//从⼀系列⽂件异步加载⽴⽅体贴图纹理图像,并从数据中创建新纹理
-(void)cubeMapWithContentsOfFiles:options:options:queue:completionHandler:
视图GLKView
GLKView
是OpenGL ES
绘制内容的视图实现,包含下方的各种属性和方法,其中绘制内容的代理方法必须实现!!!!!
属性 | 说明 |
---|---|
context | 绘制视图内容时使⽤用的OpenGL ES 上下⽂ |
delegate | 视图的代理 |
drawableColorFormat | 颜⾊渲染缓存区格式 |
drawableDepthFormat | 深度渲染缓存区格式 |
drawableStencilFormat | 模板渲染缓存区的格式 |
drawableMultisample | 多重采样缓存区的格式 |
drawableHeight | 底层缓存区对象的⾼度(以像素为单位) |
drawableWidth | 底层缓存区对象的宽度(以像素为单位) |
snapshot | 绘制视图内容并将其作为新图像对象返回 |
enableSetNeedsDisplay | 指定视图是否响应使得视图内容⽆效的消息 |
//初始化
- (instancetype)initWithFrame:(CGRect)frame context:(EAGLContext *)context;
//将底层的绘制对象绑定到OpenGL ES上下文
- (void)bindDrawable;
//删除和视图关联的可绘制对象
- (void)deleteDrawable;
//必须实现的绘制代理,绘制内容
- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect;
GLKViewController视图控制器
属性 | 说明 |
---|---|
delegate | 视图控制器的代理 |
preferredFramesPerSecond | 视图控制器调⽤视图以及更新视图内容的速率 |
framesPerSencond | 视图控制器调⽤视图以及更新其内容的实际速率 |
paused | 布尔值,渲染循环是否已暂停 |
pausedOnWillResignActive | 布尔值,当前程序重新激活活动状态时视图控制器器是否自动暂停渲染循环 |
resumeOnDidBecomeActive | 布尔值,当前程序变为活动状态时视图控制是否⾃自动恢复呈现循环 |
frameDisplayed | 视图控制器自创建以来发送的帧更新数 |
timeSinceFirstResume | 自视图控制器第⼀次恢复发送更新事件以来经过的时间量 |
timeSinceLastResume | 自上次视图控制器恢复发送更新事件以来更新的时间量 |
timeSinceLastUpdate | 自上次视图控制器调⽤委托⽅法以及经过的时间量 |
timeSinceLastDraw | ⾃上次视图控制器调⽤委托⽅法以及经过的时间量 |
//在显示每个帧之前调⽤,类似OpenGL中RenderScene函数
- (void)glkViewControllerUpdate:(GLKViewController *)controller;
//在渲染循环暂停或恢复之前调⽤
- (void)glkViewController:(GLKViewController *)controller willPause:(BOOL)pause;
GLKBaseEffect
类似于基础的着色器效果系统,可以当做OpenGL里的固定着色器
属性 | 说明 |
---|---|
label | 给Effect(效果)命名 |
transform | 绑定效果时应⽤于顶点数据的模型视图,投影和纹理变换 |
lightingType | 用于计算每个片段的光照策略,GLKLightingType |
GLKLightingTypePerVertex | 表示在三角形中每个顶点执⾏光照计算,然后在三角形进⾏插值 |
GLKLightingTypePerPixel | 表示光照计算的输⼊在三角形内插入,并且在每个片段执行光照计算 |
lightModelTwoSided | 布尔值,表示为基元的两侧计算光照 |
material | 计算渲染图元光照使⽤的材质属性 |
lightModelAmbientColor | 环境颜⾊,应⽤效果渲染的所有图元. |
light0 | 场景中第⼀个光照属性 |
light1 | 场景中第⼆个光照属性 |
light2 | 场景中第三个光照属性 |
texture2d0 | 第一个纹理属性 |
texture2d1 | 第⼆个纹理属性 |
textureOrder | 纹理应用于渲染图元的顺序 |
fog | 应⽤于场景的雾属性 |
colorMaterialEnable | 布尔值,表示计算光照与材质交互时是否使⽤颜⾊顶点属性 |
useConstantColor | 布尔值,指示是否使用常量颜⾊ |
constantColor | 不提供每个顶点颜色数据时使⽤常量颜⾊ |
//准备渲染
- (void) prepareToDraw;
网友评论