2、OpenGL ES初探之基于OpenGL ES深入了解GLKit

前言部分: 

    由于OpenGL ES是基于C的API,因此它非常便携并且受到广泛支持。作为C API,它与Objective-C的CocoaTouch应用程序无缝集成。OpenGL ES规范没有定义窗口层;相反,托管操作系统必须提供函数来创建一个接受命令的OpenGL ES渲染上下文和一个帧缓冲区,其中写入任何绘图命令的结果。

    但是OpenGL ES API并没有提供如何创建渲染上下文或者上下文如何连接到原生窗口系统。EGL是Khronos渲染API和原生窗口系统之间的接口。需要注意的是:iOS是唯一支持OpenGL ES但是不支持的EGL的平台,但是Apple提供自己的EGL API的iOS实现,称为EAGL。

    因此,在iOS上使用OpenGL ES需要使用iOS类来设置和呈现绘图表面,并使用平台中立的API显示内容。

一、了解GLKit


    GLKit框架的设计目标是为了简化基于OpenGL/OpenGL ES的应用开发。它的出现加快OpenGL ES或OpenGL应用程序开发。使用数学库,背景纹理加载,预先创建的着色器效果,以及标准视图和视图控制器来实现渲染循环。

    GLKit框架提供功能和类,可以减少创建新的基于着色器的应用程序所需要的工作量,或者支持依赖早期版本OpenGL/OpenGL ES提供固定函数顶点或者片段处理的现有应用程序。

    GLKView提供绘制场所(View),GLKViewController(拓展于标准的UIKit设计模式,用于绘制视图内容的管理和呈现,继承自UIViewController,所以UIViewController常用的操作,GLKViewController是相同的)。

GLKit功能主要分为以下四种:

1、加载纹理

2、提供高性能的数学运算

3、提供常见的着色器

4、提供视图以及视图控制器

二、GLKit常用API介绍


下面首先来分析GLKit的一段示例代码,然后介绍GLKit的一些常用API

图1、GLKit示例代码

从图中可以看出来GLKView的简单使用,下面是官方API给出的初始化步骤

1. Create a OpenGL context.(创建一个context上下文,用来保存渲染的各种状态设置)

2. Create a GLKView.(初始化一个GLKview对象)

3. Set the GLKView’s context.(把上下文context绑定到GLKView上)

4. Set the GLKView’s delegate.(遵循代理,在代理中设置自定义绘制部分代码)

5. Add the GLKView as a subview. (将GLKView添加到窗口中)

以上就是GLKit的简单初始化部分,下面介绍GLKitView常用的属性和方法:

1、drawableColorFormat

    在OpenGL上下文中有个用于保存颜色值缓冲区,你可以用这个属性设置颜色的格式,默认颜色格式GLKViewDrawableColorFormatRGBA8888代表的是每一个颜色成分(r,g,b,a)分别占用8个位,每个像素占用4个字节,这个格式很好的给了我们最大范围的颜色的范围,当然你使用GLKViewDrawableColorFormatRGB565会消耗更少的资源,但是颜色就比GLKViewDrawableColorFormatRGBA8888少了很多。

2、drawableDepthFormat

    在OpenGL的上下文中还有一个可配置的缓冲区---深度缓冲区.深度缓冲区保证离观察者更近的物体”盖住”远的物体.

    OpenGL默认的工作方式是对每个像素点都会保存一个更近的物体,保存的这些值放在深度缓冲区里.当OpenGl绘制每一个像素的时候都检测深度缓冲区,判断一下OpenGL是不是已经绘制过一个离观察者更近的物体,如果确实绘制过,OpenGl就会丢弃这个点,不然OpenGl就会把这个像素添加到深度缓冲区和颜色缓冲区.

    你可以设置drawableDepthFormat选择深度缓冲区的格式,默认是GLKViewDrawableDepthFormatNone代表不开启深度缓冲区,如果想开启,可以选择枚举值GLKViewDrawableDepthFormat16和GLKViewDrawableDepthFormat24,前者消耗的资源会少一些,但是当物体非常接近的时候,深度缓冲区的绘制可能会不精确,

3、持续更新中...

[溪浣双鲤的技术摸爬滚打之路](https://www.jianshu.com/p/3fbecd65faae)

你可能感兴趣的:(2、OpenGL ES初探之基于OpenGL ES深入了解GLKit)