美文网首页
初识 OpenGL ES

初识 OpenGL ES

作者: 远方竹叶 | 来源:发表于2020-07-26 20:00 被阅读0次

简介

OpenGL ES (OpenGL for Embedded Systems)是以手持和嵌入式为⽬标的高级 3D 图形应用程序编程接口(API)。OpenGL ES 是目前智能手机中占据统治地位的图形 API。支持的平台: iOS,Andriod,BlackBerry,bada,Linux,Windows。其中安卓主要还是采用 OpenGL ES,而 iOS 在 iOS 12开始被废弃,但是仍然可用,官方主推 Metal,但是有很多应用还是基于 OpenGL ES 写的,还没那么快直接迁移至 Metal,就像 Swift 和 OC 一样。

Metal 的也是采取了 OpenGL ES 的思想和做法自己开发的一个图形接口集合,因为高度封装所以使用很方便,但是想要熟悉了解还得深入底层,那么了解和学习 OpenGL ES 是很有必要的,毕竟这也是 iOS12之前的做法。

渲染流程

OpenGL ES允许应用程序利用底层图形处理器的强大功能。iOS 设备上的 GPU 可以执⾏复杂的 2D 和 3D 绘图,以及最终图像中每个像素的复杂着⾊计算。

OpenGL ES 图形管道

  • Application:提供图元装配的顶点、纹理信息
  • Vertex(顶点着色器):处理顶点的平移、旋转、缩放
  • GeoMetry:图元装配,超出屏幕部分裁剪
  • Fragment:片元着色器,处理纹理、蒙版
  • Framebuffer Operations:帧缓冲区,颜色混合、模版、深度测试

顶点着色器

着色器程序是执行顶点操作的顶点着色器程序源代码/可执行文件。

接收方式

  • Attribute:接收顶点数组数据

  • Uniform:接收顶点/片元着色器使用的不变化的数据

  • 采样器:接收纹理的特殊统一变量

主要任务

  1. 计算矩形变换位置

  2. 根据光照公式计算颜色

  3. 生成/变换纹理,片元着色器是没有办法传入属性即attribute的,可以通过顶点着色器桥接,间接将纹理坐标属性传递到片元着色器

图元装配

根据图元类型和顶点数据计算生成一个个的图元,裁剪、透视分割和视口变换操作都是在这个阶段进行,之后进入光栅化阶段

光栅化

把装配后的图元(点、线、三角形等)转化成一组二维片段的过程(屏幕是 2D 的)。二维片段有屏幕坐标、颜色属性、纹理坐标等数据。

片元着色器

接收方式

  • 输入变量:光栅化单元用插值为每个⽚段生成的顶点着色器输出

  • Uniform:接收顶点/片元着色器使用的不变化的数据

  • 采样器:⽚元着色器器使⽤纹理的特殊统一变量量类型

主要任务

  1. 计算颜色
  2. 获取纹理值
  3. 往像素中填充颜色值【纹理值/颜色值】

它可以用于图片/视频/图形中每个像素的颜色填充(比如给视频添加滤镜,实际上就是将视频中每个图片的像素点颜色填充进⾏修改)。

顶点着色器、片元着色器都是代码段,类似于iOS中的函数/方法,有返回值。顶点着色器的返回值会被复制给 gl_Position,片元着色器的结果会赋值给 gl_fragColor。这两个返回值都属于 GLSL中 的内建变量,是封装好的,直接将数据赋值给它即可。

  • gl_Position:顶点着色器中某一个顶点经过一系列处理后得到的结果
  • gl_fragColor:经过片元着色器对某一个像素点来进行处理之后的结果

EGL(Embedded Graphics Library)

  • OpenGL ES 命令需要渲染上下文和绘制表面才能完成图形图像的绘制
  • 渲染上下⽂: 存储相关OpenGL ES状态,是一个状态机
  • 绘制表面:⽤于绘制图元的表面,需要指定渲染的缓存区,例如颜⾊缓、深度和模板
  • OpenGL ES API 并没有提供如何渲染上下文或者上下文如何连接到原生窗口系统,EGL 是 Khronos 渲染 API(OpenGL ES)和原生窗口的之间的接口,iOS 是唯一支持 OpenGL ES 却不支持 EGL 的平台,因为 Apple 提供自己的 EGL API 实现— EAGL。
  • 因为每个窗⼝系统都有不同的定义,所以EGL提供基本的不透明类型—EGLDisplay, 这 个类型封装了所有系统相关性,用于和原生窗⼝系统接⼝

相关文章

  • 02总结--014--OpenGL ES 初识

    OpenGL ES 初识 OpenGL ES 简介 OpenGL ES (OpenGL for Embedded ...

  • OpenGL-ES初探

    初识 OpenGL ES OpenGL ES是OpenGL的子集 OpenGL ES 是针对嵌入式设备及移动终端设...

  • 2018-07-12

    初识OpenGL ES 要在Android应用程序中使用OpenGL ES绘制图形,就必须为他们创建一个视图容器,...

  • OpenGL ES 01 --- 初识OpenGL ES

    本文Demo:https://github.com/haogaoming123/openGL-ES 简述: Ope...

  • 初识OpenGL ES

    因为公司需要 所以我在学习OpenGl ES下面和大家分享下我对它的认识OpenGL ES是一个嵌入式系统,用来提...

  • 初识OpenGL ES

    好久没有学习和总结了, 整个五月六月都在浪, 来到新公司, 跟着新同事浪, 好久不见的同学来广州带着同学去浪, 然...

  • 初识OpenGL ES

    本人菜鸟一枚, 需要大神来指教. OpenGL是用于可视化的二维和三维数据。它是一个多用途开放标准图形库,支持2D...

  • 初识 OpenGL ES

    简介 OpenGL ES (OpenGL for Embedded Systems)是以手持和嵌入式为⽬标的高级 ...

  • OpenGL ES 初识

    1、OpenGL ES简介 OpenGL ES (OpenGL for Embedded Systems) 是以⼿...

  • 初识OpenGL ES

    简介 OpenGL ES (OpenGL for Embedded Systems) 是以手持和嵌入式为目标的⾼级...

网友评论

      本文标题:初识 OpenGL ES

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