iOS开发之OpenGL ES (十) GLKit详解
1、GLKit简介
GLKit框架的设计目标是苹果为了简化OpenGL/OpenGL ES 的应用开发。加快OpenGL/OpenGL ES的开发速度,使用数学库,背影纹理加载,预先创建的着色器效果,以及标准视图(GLKView)和试图控制器(GLKViewController)来实现渲染循环
2、GLKIT关键特性
关于纹理
苹果封装了GLKTextureLoader类进行纹理加载,只需几行代码,可以轻松的加载各种纹理资源,甚至可以在app后台异步加载。
关于数学计算
数学库提供了向量、四元数、矩阵运算等。计算获得优化以提供较好的性能
关于着色器
苹果提供Effect类实现着色器效果。主要包括三个着色效果如下,用来解决着色器复杂的用法,可以了解下GLSL的复杂
GLKBaseEffect:在GLKit中使用最高频。提供了投影光照和着色的功能,提供了三个光照(light0,light1,light2),两个纹理(texture2d0,texture2d1)。如果这些不满足需求,则需要自定义着色器。
GLKReflectionMapEffect:用于基于着色器的OpenGL渲染的支持反射映射的照明和着色系统
GLKSkyboxEffect:用于基于着色器的OpenGL渲染的一个简单的天空盒视觉效果
关于视图
GLKView和GLKViewController 提供OpenGL ES视图和试图控制器的实现。减少了OpenGL ES创建 iOS应用程序所需的代码量(比如GLSL创建program那些)
3、GLKIT呈现OpenGL ES的内容
要想用GLKView,首先为其提供OpenGL ES上下文。然后设置颜色缓冲区格式drawableColorFormat,深度缓冲区格式drawableDepthFormat,模板缓冲区格式drawableStencilFormat,多重采样缓冲区格式drawableMultisample,通过以上设置来配置帧缓冲区格式(framebuffer)。然后,只要是此GLView需要重新绘制的时候,它就会自动创建或者更新framebuffer。
说到View的重新绘制,那就是drawRect方法,当调用drawRect之前,上面说了,首先为其提供OpenGL ES上下文,绑定它的framebuffer到OpenGL的上下文作为渲染命令的target,一旦此渲染命令告知绘制返回,就会将数据传递到Core Animation实现画面。
app的drawRect方法,应该调用一个或者多个OpenGL ES函数将对象呈现到framebuffer上,此时,视图解析通过多重采样(multisampling)来完成传递。有一点要注意的是,绘图方法只能修改framebuffer的内容,不能从framebuffer中读取像素信息,或者修改framebuffer对象。或者修改OpenGL ES函数的其他属性。相反我们要依赖GLView提供的属性和方法。
4、(GLKView)和试图控制器(GLKViewConitroller)以及案例解析
首先要创建继承于GLKViewController的视图,总共大致分三部 + 一部绘制
1、OpenGL ES初始化
2、加载顶点、纹理坐标数据
3、加载纹理
4、绘制纹理
源码地址:https://github.com/Hiphone-Du/GLKit
备注:图片引用:简书@CC老师_HelloCoder