iOS开发之OpenGL ES (十) GLKit详解

2019-06-09  本文已影响0人  Hiphone_e365

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渲染的一个简单的天空盒视觉效果

关于视图

GLKViewGLKViewController 提供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

上一篇下一篇

猜你喜欢

热点阅读