美文网首页iOS视觉
十九 GLKit 及API

十九 GLKit 及API

作者: 王俏 | 来源:发表于2020-08-05 09:02 被阅读0次

GLKit

目标是为了简化基于OpenGL / OpenGL ES 的应⽤开发,使用数学库,背景纹理加载,预先创建的着
⾊器效果,以及标准视图和视图控制器来实现渲染循环

使⽤GLKit视图呈现OpenGL ES内容

image

图转自逻辑教育CC老师

  • GLKView 提供绘制场所(View)

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

  • GLKBaseEffect 视图渲染

苹果弃⽤OpenGL ES ,但iOS开发者可以继续使用.

GLKit功能

  • 加载纹理

  • 提供高性能的数学运算

  • 提供常见的着色器

  • 提供视图以及视图控制器

GLKit 纹理加载

  • 创建OpenGL 纹理信息 GLKTextureInfo

    name : OpenGL 上下文中纹理名称

    target : 纹理绑定的目标

    height : 加载的纹理高度

    width : 加载纹理的宽度

    textureOrigin : 加载纹理中的原点位置

    alphaState: 加载纹理中alpha分量状态

    containsMipmaps: 布尔值,加载的纹理是否包含mip贴图

从各种资源文件中加载纹理 GLTextureLoader

  • 初始化

     - initWithSharegroup: 初始化一个新的纹理加载到对象中
     - initWithShareContext: 初始化一个新的纹理加载对象
    
  • 从文件中加载纹理

     + textureWithContentsOfFile:options:errer: 从⽂件加载2D纹理图像并从数据中创建新的纹理
     - textureWithContentsOfFile:options:queue:completionHandler: 从⽂件中异步加载2D纹理图像,并根据数据创建新纹理
    
  • 从URL中加载纹理

      - textureWithContentsOfURL:options:error: 从URL 加载2D纹理图像并从数据创建新纹理
      - textureWithContentsOfURL:options:queue:completionHandler: 从URL异步加载2D纹理图像,并根据数据创建新纹理
    
  • 从内存中读取数据创建纹理

      + textureWithContentsOfData:options:errer: 从内存空间加载2D纹理图像,并根据数据创建新纹理
      - textureWithContentsOfData:options:queue:completionHandler:从内存空间异步加载2D纹理图像,并从数据中创建新纹理
    
  • 从CGImage创建纹理

      - textureWithCGImage:options:error: 从Quartz图像 加载2D纹理图像并从数据创建新纹理
      - textureWithCGImage:options:queue:completionHandler: 从Quartz图像异步加载2D纹理图像,并根据数据创建新纹理
    
  • 从URL加载多为创建纹理

     + cabeMapWithContentsOfURL:options:errer: 从单个URL加载⽴方体贴图纹理图像,并根据数据创建新纹理
     - cabeMapWithContentsOfURL:options:queue:completionHandler:从单个URL异步加载⽴方体贴图纹理图像,并根据数据创建新纹理
    
  • 从文件加载多为数据创建纹理

     + cubeMapWithContentsOfFile:options:errer: 从单个文件加载⽴方体贴图纹理对象,并从数据中创建新纹理
     - cubeMapWithContentsOfFile:options:queue:completionHandler:从单个文件异步加载⽴方体贴图纹理对象,并从数据中创建新纹理
     + cubeMapWithContentsOfFiles:options:errer: 从一系列文件中加载⽴方体贴图纹理图像,并从数据总创建新纹理
     - cubeMapWithContentsOfFiles:options:options:queue:completionHandler:从⼀系列文件异步加载⽴方体贴图纹理图像,并从数据中创建新纹理
    

提供视图以及视图控制器

绘制内容的视图默认实现 GLKView

  • 初始化视图

     - initWithFrame:context: 初始化新视图
    
  • 代理 GLKViewDelegate回调函数

      - glkView:drawInRect: 绘制视图内容 (必须实现代理)
    
  • 配置帧缓冲区对象

     drawableColorFormat 颜⾊渲染缓存区格式
     drawableDepthFormat 深度渲染缓存区格式
     drawableStencilFormat 模板渲染缓存区的格式
     drawableMultisample 多重采样缓存区的格式
    
  • 帧缓冲区属性

      drawableHeight 底层缓存区对象的⾼度(以像素为单位)
      drawableWidth 底层缓存区对象的宽度(以像素为单位)
    
  • 绘制视图的内容

      context 绘制视图内容时使用的OpenGL ES 上下⽂
      
      - bindDrawable 将底层FrameBuffer 对象绑定到OpenGL ES
      
      - enableSetNeedsDisplay 布尔值,指定视图是否响应使得视图内容无效的消息
      
      - display ⽴即重绘视图内容
      
      snapshot 绘制视图内容并将其作为新图像对象返回
    
  • 删除视图FrameBuffer对象

     - deleteDrawable 删除与视图关联的可绘制对象
    

管理OpenGL ES 渲染循环的视图控制器 GLKViewController

  • 更新

      - (void) update 更新视图内容
        - (void) glkViewControllerUpdate:
    
  • 配置帧速率

      preferredFramesPerSecond 视图控制器调⽤视图以及更新视图内容的速率
      framesPerSencond 视图控制器调⽤视图以及更新其内容的实际速率
    
  • 控制帧更新

      paused 布尔值,渲染循环是否已暂停
      pausedOnWillResignActive 布尔值,当前程序重新激活动状态时视图控制器是否⾃动暂停渲染循环
      resumeOnDidBecomeActive 布尔值,当前程序变为活动状态时视图控制是否自动恢复呈现循环
    
  • 获取有关View更新信息

      frameDisplayed 视图控制器⾃创建以来发送的帧更新数
      timeSinceFirstResume ⾃视图控制器第一次恢复发送更新事件以来经过的时间量
      timeSinceLastResume ⾃上次视图控制器恢复发送更新事件以来更新的时间量
      timeSinceLastUpdate ⾃上次视图控制器调⽤用委托方法以及经过的时间量
      timeSinceLastDraw ⾃上次视图控制器调⽤视图display ⽅法以来经过的时间量.
    
  • 处理更新事件

      - glkViewControllerUpdate: 在显示每个帧之前调⽤
    
  • 暂停/恢复通知

      - glkViewController : willPause: 在渲染循环暂停或恢复之前调用.
    

GLKit OpenGL ES 视图渲染GLKBaseEffect

  • 命名Effect

    label 给Effect(效果)命名

  • 配置模型视图转换

    transform 绑定效果时应⽤于顶点数据的模型视图,投影和纹理变换

  • 配置光照效果

    lightingType ⽤于计算每个片段的光照策略,GLKLightingType
    GLKLightingType:

    GLKLightingTypePerVertex 表示在三⻆形中每个顶点执行光照计算,然后在三⻆形进行插值

    GLKLightingTypePerPixel 表示光照计算的输入在三⻆角形内插入,并且在每个片段执行光照计算

  • 配置光照

    lightModelTwoSided 布尔值,表示为基元的两侧计算光照

    material 计算渲染图元光照使⽤的材质属性

    lightModelAmbientColor
    环境颜色,应用效果渲染的所有图元.

    light0 场景中第一个光照属性

    light1 场景中第二个光照属性

    light2 场景中第三个光照属性

  • 配置纹理

    texture2d0 第⼀个纹理属性

    texture2d1 第二个纹理属性

    textureOrder 纹理应用于渲染图元的顺序

  • 配置雾化

    fog 应⽤于场景的雾属性

  • 配置颜色信息

    colorMaterialEnable 布尔值,表示计算光照与材质交互时是否使⽤颜色顶点属性

    useConstantColor 布尔值,指示是否使⽤常量颜色

    constantColor 不提供每个顶点颜色数据时使⽤常量颜⾊

  • 准备绘制效果

    -prepareToDraw 准备渲染效果

相关文章

  • 十九 GLKit 及API

    GLKit 目标是为了简化基于OpenGL / OpenGL ES 的应⽤开发,使用数学库,背景纹理加载,预先创建...

  • GLKit 及常用 API

    GLKit GLKit 官方文档 GLKit 框架的设计目标是为了简化基于 OpenGL/OpenGL ES 的应...

  • GLKit 及 常见API

    GLKit 简述 先了解GLKit框架前,先附上GLKit的苹果官方文档GLKitAPI[https://deve...

  • OpenGL ES 入门:GLKit加载图片

    本案例的目的在于熟悉GLKit框架的使用,如果还有不了解的,可以看看这篇文章GLKit 及 常见API[https...

  • 案例01:GLKit加载图片

    本案例的目的在于熟悉GLKit框架的使用,如果还有不了解的,可以看看这篇文章二、GLKit 及 常见API 整体效...

  • iOS图形编程总结

    iOS实现图形编程可以使用三种API(UIKIT、Core Graphics、OpenGL ES及GLKit)。 ...

  • iOS 图形处理总结

    iOS实现图形编程可以使用三种API(UIKIT、Core Graphics、OpenGL ES及GLKit)。 ...

  • 二、GLKit 及 常见API

    OpenGL + OpenGL ES +Metal 系列文章汇总 GLKit 简述 先了解GLKit框架前,先附上...

  • 二、GLKit 及 常见API

    GLKit 简述 先了解GLKit框架前,先附上GLKit的苹果官方文档GLKitAPI GLKit框架的设计目的...

  • 二、GLKit 及 常见API

    GLKit 简述 先了解GLKit框架前,先附上GLKit的苹果官方文档GLKitAPI[https://deve...

网友评论

    本文标题:十九 GLKit 及API

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