美文网首页
OpenGL ES初探(下)

OpenGL ES初探(下)

作者: 小溜子 | 来源:发表于2020-07-10 16:36 被阅读0次

1、GLKit框架简介

GLKit 框架的设计⽬标是为了简化基于 OpenGL / OpenGL ES 的应用开发。它的出现加快 OpenGL ES 或 OpenGL 应⽤程序开发。使⽤数学库,背景纹理加载,预先创建的着色器效果,以及标准视图和视图控制器来实现渲染循环。
主要功能:
1、加载纹理
2、提供高性能的数学运算
3、提供常⻅的着⾊器
4、提供视图以及视图控制器

2、用 GLKit 进行视图渲染

2.1 GLKView

GLKView 继承 UIView,提供绘制场所(View)。
下面看一下 GLKView 使用 OpenGL ES 绘制内容的视图默认实现:

  • 1、初始化视图
    -(instancetype)initWithFrame:(CGRect)frame context:(EAGLContext *)context;初始化新视图。
  • 2、设置视图的代理
  • 3、配置帧缓冲区对象
    drawableColorFormat颜色缓冲区 的格式
    drawableDepthFormat深度缓冲区 的格式
    drawableStencilFormat模板缓冲区 的格式
    drawableMultisample多重采样缓冲区 的格式
  • 4、设置帧缓冲区属性
    drawableHeight底层缓存区对象的高度(以像素为单位)
    drawableWidth底层缓存区对象的宽度(以像素为单位)
  • 5、绘制视图的内容
    context 存储绘制视图内容时使用的 OpenGL ES 上下文状态。
  • (void)bindDrawable; 将底层 FrameBuffer 对象绑定到 OpenGL ES
    enableSetNeedsDisplay 布尔值,指定视图是否响应使得视图内容无效的消息。
  • (void)display; 立即重绘视图内容。
    snapshot UIImage 类型,绘制视图内容并将其作为新图像对象返回。
  • 6、删除视图 FrameBuffer 对象
  • (void)deleteDrawable; 删除与视图关联的可绘制对象。
  • 7、实现 GLKViewDelegate 代理方法
    -(void)glkView:(GLKView *)view drawInRect:(CGRect)rect;
    绘制视图内容(必须实现代理)

2.2 GLKViewController

GLKViewController 继承 UIViewController,(扩展于标准的 UIKit 设计模式,用于绘制视图内容的管理与呈现)

  • 1、配置帧速率
    preferredFramesPerSecond 视图控制器调用视图以及更新视图内容的速率,默认为30。
    framesPerSecond 视图控制器调用视图以及更新视图内容的实际速率。
  • 2、配置 GLKViewController 代理
  • 3、控制帧更新:
    paused 布尔值,渲染循环是否已暂停。
    pauseOnWillResignActive 布尔值,当前程序重新激活活动状态时视图控制器是否自动暂停渲染循环。
    resumeOnDidBecomeActive 布尔值,当前程序变为活动状态时视图控制是否自动恢复呈现循环。
  • 4、获取有关 View 的更新信息:
    framesPerSecond 视图控制器自创建以来发送的帧更新数。
    timeSinceFirstResume 视图控制器第一次恢复发送更新事件以来经过的时间量。
    timeSinceLastResume 自上次视图控制器恢复发送更新事件以来更新的时间量。
    timeSinceLastUpdate 自上次视图控制器调用委托方法以及经过的时间量。
    timeSinceLastDraw 自上次视图控制器调用视图 display 方法以来经过的时间量。
  • 5、实现代理方法:
    -(void)glkViewControllerUpdate:(GLKViewController *)controller; 处理更新事件
  • (void)glkViewController:(GLKViewController *)controller willPause:(BOOL)pause; 暂停/恢复通知

2.3 GLKBaseEffect

GLKBaseEffect 是 GLKit 提供的一种简单的光照/着色系统,用于基于着色器 OpenGL 渲染。

  • 1、命名 Effect:
    label 给 Effect(效果)命名。
  • 2、配置模型视图转换:
    transform 绑定效果时应用于顶点数据的模型视图,投影和纹理变换。
  • 3、配置光照效果:
    lightingType 用于计算每个片段的光照策略,GLKLightingType。
typedef NS_ENUM(GLint, GLKLightingType)
{
    GLKLightingTypePerVertex,
    GLKLightingTypePerPixel
} NS_ENUM_AVAILABLE(10_8, 5_0);

GLKLightingTypePerVertex 表示在三⻆形中每个顶点执行光照计算,然后在三⻆形进⾏插值。
GLKLightingTypePerPixel 表示光照计算的输入在三角形内插入,并且在每个⽚段执行光照计算。

  • 4、配置光照:
    lightModelTwoSided 布尔值,表示为基元的两侧计算光照。
    material 计算渲染图元光照使⽤的材质属性。
    lightModelAmbientColor 环境颜⾊,应⽤效果渲染的所有图元。
    light0,light1,light2 分别为场景中第 1、2、3 个光照属性。
    注意: GLKit 最多就支持3个光照。
  • 5、配置纹理:
    texture2d0 是 readonly 的,第一个纹理属性。
    texture2d1 是 readonly 的,第二个纹理属性。
    textureOrder 纹理应⽤于渲染图元的顺序。
    注意:最多就支持俩纹理,三个光照,所以 GLKit 有局限性,如果要支持多个纹理,就不能用 GLKit 了,得自己写了。
  • 6、配置雾化:
    fog 应用于场景的雾属性。
  • 7、配置颜色信息:
    colorMaterialEnabled 布尔值,表示计算光照与材质交互时是否使用颜色顶点属性。
    useConstantColor 布尔值,指示是否使用常量颜⾊。
    constantColor 不提供每个顶点颜色数据时使⽤的常量颜⾊。
  • 8、准备绘制效果:
    -(void) prepareToDraw; 准备渲染效果(绘制时同步所有效果更改以保持一致状态)。注意:绘制之前必须写。

思维导图:


image.png

相关文章

  • OpenGL ES初探(下)

    1、GLKit框架简介 GLKit 框架的设计⽬标是为了简化基于 OpenGL / OpenGL ES 的应用开发...

  • openGL

    OpenGl ES 初探 专业名词解释 OpenGL上下文[ context) 在应用程序调用任何OpenGL的指...

  • OpenGL笔记十一:GLKit初探

    前言 期待您移步上篇:OpenGL笔记十:OpenGL ES初探 GLKit 框架概述 GLKit 框架的设计⽬标...

  • OpenGL ES初探(下)—— GLKit

    一、GLKit 框架简介 GLKit 框架的设计⽬标是为了简化基于 OpenGL / OpenGL ES 的应用开...

  • OpenGL ES 用 GLSL 实现加载图片

    一、前言 上次我写了一篇《OpenGL ES初探(下)—— GLKit》,使用 GLKit 加载了一个立体图形,但...

  • OpenGL/OpenGL ES初探

    当初接触OpenGL的时候,也关注到了苹果爸爸弃用的问题,心里想着,苹果爸爸都弃用了OpenGL/Open LG ...

  • OpenGL ES(一) OpenGL ES初探

    OpenGL ES (OpenGL for Embedded Systems) 是以手持和嵌入式为目标的高级3D图...

  • OpenGL ES(一)-OpenGL ES初探

    OpenGL ES简介 OpenGL ES (OpenGL for Embedded Systems) 是以⼿和嵌...

  • OpenGL ES - 初探

    OpenGL ES(OpenGL for Embedded Systems)是以手持和嵌入式设备为目标的高级3D图...

  • OpenGL ES初探

    OpenGL ES 苹果官方文档 OpenGL ES 开放式图形库(OpenGL的)⽤用于可视化的⼆二维和三维数据...

网友评论

      本文标题:OpenGL ES初探(下)

      本文链接:https://www.haomeiwen.com/subject/zzqmcktx.html