音视频开发之旅(七) OpenGL ES 基本概念

目录

  1. OpenGL ES的简介
  2. OpenGL ES的基本流程和概念

篇外话:本来这篇要写SurfaceView和TextureView相关的,但是没有理解清楚,主要是对于纹理和SurfaceFlinger等认知不足,而纹理又是OpenGL的一个重要概念,所以先开启OpenGL的系列,后面再补上SurfaceView和TextureView。

我第一次接触OpenGL ES是一年前,但是看到OpenGL中各种专业名词和专业术语,感觉云里雾里,虽然按照书中的介绍实现了效果,但是终究还是没有理解。这个系列我们一起对OpenGL ES进行重新学习实践,掌握OpenGL ES 3.0,编写迷人的OpenGL ES 3.0的程序。

下面开始今天的主题。

一、OpenGL ES的简介

OpenGL(Open Graphics Library)是一个跨平台图像程序接口,用于二维和三位图片的渲染。OpenGL ES(Open Graphic Library Embedded Systems)是OpenGL的一个子集,用于手机和嵌入式设备
在android中对OpenGL ES的支持如下

  1. OpenGL ES 2.0 支持android2.2以后的版本
  2. OpenGL ES 3.0 支持android4.3以后的版本
  3. OpenGL ES 3.1 支持android5.0以后的版本
    基于目前android系统占比分布和OpenGL ES的版本使用趋势,我们基于OpenGL ES3.0进行学习实践。

有个问题:OpenGL ES在整个系统中的作用是什么?

通过下面两种图我们可以看到OpenGL ES是CPU和GPU交互的桥梁,是一个Lib


图片来源 OpenGL(一) OpenGL入门


图片来源 [Android官方文档]

那为什么需要OpenGL ES 这个桥梁呐?能不能CPU和GPU直接交互呐?

将数据从一块内存复制到另一块内存中,传递速度是非常慢的,CPU主要处理逻辑控制,GPU在逻辑运算方面比较强大,可以高并行处理图形数据和复杂算法,我们对比看下CPU和GPU的内部结构


图片来源 OpenGL(一) OpenGL入门

二、基本流程和概念

OpenGL ES 3.0 实现了具有可编程着色功能的图形管线,有两个规范组成:OpenGL ES 3.0 API 和 GLSL着色器语言。在学习这些规范之前,我们先了解下相关的基本概念

2.1 渲染的基本流程


图片来源 LearnOpenGL CN

OpenGL在处理Shader时,和其他编译器一样。通过编译、链接等步骤,生成了着⾊器程序(glProgram),着⾊器程序同时包含了顶点着⾊器和⽚段着⾊器的运算逻辑。在OpenGL进行绘制的时候,⾸先由顶点着⾊器对传⼊的顶点数据进行运算。再通过图元装配,将顶点转换为图元。然后进行光栅化,将图元这种⽮量图形,转换为栅格化数据。最后,将栅格化数据传入⽚段着⾊器中进行运算。⽚段着色器会对栅格化数据中的每⼀个像素进行运算,并决定像素的颜⾊。

2.2 管线

它是一系列数据处理的过程,将应用程序的数据最终转换到渲染的图像。下图展示了OpenGL ES 图形管线



图片来源:《OpenGL ES 3.0 编程指南》

2.3 顶点

OpenGL ES 的基本元素有点、线、三角形,就像盖钢架结构的房子一样,先确定好位置,搭出框架,OpenGL ES 也需要确定好位置即顶点


图片来源 通俗易懂的 OpenGL ES 3.0(一)入门必备知识

2.4 纹理

纹理通常是一张图片,也可以用来存储大量的数据,这些数据可以发送到着色器。我们这个章节了解下纹理作为一张图片的意义。
那么为什么需要纹理呐?
我们可以为每个顶点添加颜色来丰富图像的细节,如果想让图形开起来更加有趣真实,我们就必须有足够的顶点从而指定足够多的颜色,但这会产生很多额外开销。使用纹理可以避免这个问题

你可以想象纹理是一张绘有砖块的纸,无缝折叠贴合到你的3D的房子上,这样你的房子看起来就像有砖墙外表了。因为我们可以在一张图片上插入非常多的细节,这样就可以让物体非常精细而不用指定额外的顶点。


图片来源LearnOpenGL CN

下面是一张怀旧滤镜的纹理图


2.5 顶点着色器(VertexShader)

顶点着色器一般用来处理图形每个顶点的变换,例如 平移、缩放、旋转、投影等
顶点着色器是OpenGL ES中用于计算顶点属性的程序,每个顶点都会并行的执行一次顶点着色器程序。

2.6 图元装配

图元(Primitive)是点、线、三角形等基本几何对象,图元的每个顶点被发送到顶点着色器处理,而图元装配就是把这些顶点做合成图元

2.7 光栅化

光栅化是把顶点数据转换为片元的过程。将有基本元素(点、线、三角形)组成的几何图元变为二维图像的过程。
这个过程包含两部分内容

  1. 确定视图坐标中哪些区域被基本图元占用
  2. 分配一个颜色值和一个深度值到各个区域

2.8 片段着色器(FragmentShader)

片段着色器又叫片元着色器,用来处理图形中每个像素点颜色计算和填充

2.9 逐片段操作

在逐片段操作阶段,每个片段上会执行 像素归属测试、裁剪测试、模版和深度测试、混合、抖动

在测试阶段之后,如果像素依然没有被剔除,那么像素的颜色将会和帧缓冲区中颜色附着上的颜⾊进⾏混合,混合的算法可以通过OpenGL的函数进行指定。但是OpenGL提供的混合算法是有限的,如果需要更加复杂的混合算法,一般可以通过像素着色器进行实现,当然性能会⽐比原⽣的混合算法差一些.

参考

《音视频开发进阶指南》
《OpenGL ES 3.0 编程指南》
LearnOpenGL CN
OpenGL(一) OpenGL入门
通俗易懂的 OpenGL ES 3.0(一)入门必备知识

收获

  1. 了解OpenGL ES的版本和android系统兼容性
  2. 了解OpenGL ES在手机CPU和GPU之间的桥梁作用
  3. 了解OpenGL ES中顶点、着色器、图元装配、光栅化等基本概念
  4. 了解OpenGL ES的图形管线渲染的流程

感谢你的阅读

下一篇我们学习实践OpenGL ES开发的语言GLSL的使用,欢迎关注“音视频开发之旅”,一起学习成长。

欢迎交流

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,612评论 5 471
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,345评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,625评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,022评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,974评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,227评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,688评论 3 392
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,358评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,490评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,402评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,446评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,126评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,721评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,802评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,013评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,504评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,080评论 2 341