OpenGL ES开发学习iOS 第1章

本文深入解析3D渲染原理,探讨GPU如何将3D数据转化为2D图像,重点介绍OpenGLES缓存机制,包括缓存生成、绑定、数据设置及帧缓存的作用。

1.1 3D渲染

图形处理单元(GPU)就是能够结合几何、颜色、灯光和其他数据而产生一个屏幕图像的硬件组件。屏幕只有二维

用3D数据生成一个2D图像的过程就叫渲染。在计算机上显示的图片是由矩形的颜色点组成的,这些矩形的颜色点叫做像素。

1.2.1 缓存:提供数据的最好方式

OpenGL ES为两个内存区域件的数据交换定义了缓存(buffers)的概念。缓存是指图形处理器能够控制和管理的连续RAM。程序从CPU的内存复制数据到OpenGL ES的缓存。在GPU取得一个缓存的所有权以后,运行在CPU中的程序理想情况下将不再接触这个缓存。通过控制独占的缓存,GPU就能够尽可能以最有效的方式读写内存。图形处理器把它处理大量数据的能力异步同时地应用到缓存上,这意味着在GPU使用缓存中的数据工作的同时,运行在CPU中的程序可以继续执行。

为缓存提供数据有如下7个步骤。

  1. 生成 -请求OpenGL ES为图形处理控制器的缓存生成一个独一无二的标识符。
  2. 绑定 -告诉OpenGL ES为接下来的运算使用一个缓存。
  3. 缓存数据 -让OpenGL ES为当前绑定的缓存分配并初始化足够的连续内存
  4. 启用或禁用 -告诉OpenGL ES在接下来的渲染中是否使用缓存中的数据。
  5. 设置指针 -告诉OpenGL ES在缓存中的数据的类型和所有需要访问的数据的内存偏移值。
  6. 绘图 -告诉OpenGL ES使用当前绑定并启用的缓存中的数据渲染整个场景或某个场景的一部分。
  7. 删除 -告诉OpenGL ES删除以前生成的缓存并释放相关的资源。

OpenGL ES为一种类型的缓存在使用过程中的每一个步骤的执行定义了c语言函数。

  • glGenBuffers() -请求OpenGL ES为图形处理控制器的缓存生成一个独一无二标识符。
  • glBindBuffer() -告诉OpenGL ES为接下来运算使用一个缓存。
  • glBufferData()或者glBufferSubData() -让OpenGL ES为当前绑定的缓存分配并初始化足够的连续内存。
  • glEnableVertexAttribArray()或者glDisableVertexAttribArray() -告诉OpenGL ES在接下来的渲染中是否使用缓存中的数据。
  • glVertexAttribPointer() -告诉OpenGL ES在缓存中的数据的类型和所有需要访问的数据的内存便宜。
  • glDrawArrays()或者glDrawElements() -告诉OpenGL ES使用当前绑定并启用的缓存中的数据渲染整个场景或某个场景的一部分。
  • glDeleteBuffers() -告诉OpenGL ES删除以前生成的缓存并释放相关的资源。

1.2.2 帧缓存

GPU需要知道应该在内存中哪个位置存储渲染出来的2D图像像素数据。就像为GPU提供数据缓存一样,接收渲染结果的缓冲区叫做帧缓存(frame buffer)。

1.3 OpenGL ES的上下文

用于配置OpenGL ES的保存在特定平台的软件数据结构中的信息会被封装到一个OpenGL ES上下文(context)中。

1.4坐标系

转载于:https://juejin.im/post/5d00a38cf265da1b614ff06e

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值