当前课程知识点:移动图形概论 > 第二章 图形编程入门 > 2.1 OpenGL ES 基本概念 > OpenGL ES 基本概念
各位同学大家好
今天主要给大家介绍OpenGL ES的基本概念
今天的主要内容包括OpenGL ES处理图像的基本流程
和OpenGL ES的软件架构
由于OpenGL ES是OpenGL的一个子集
大部分基础概念二者都是相通的
为了叙述方便
有时候我们会直接使用OpenGL这种说法
而不强调ES
好 下面我们就来看一下
OpenGL的坐标系统
由于OpenGL是一个3D的图形编程接口
我们在描述三维空间的时候
必然要用到X Y Z三个坐标轴
而如何定义这三个坐标轴的方向
就成为一个必须要明确的一个标准
在OpenGL里面用到的是右手坐标系
左图是OpenGL相关书籍里常用的一个指示图
我们可以用大拇指来表示X轴
食指来表示Y轴
中指代表Z轴
这样当我们把右手
按照三个手指展开的姿势摆在面前的时候
大拇指指向的就是X轴方向
食指指向的就是Y轴的方向
而中指指向自己就是Z轴的方向
其实在数学课中
我们经常用到的XY坐标是大家比较熟悉的
所以把坐标原点放在屏幕左下方
X轴指向右侧
Y轴指向上面
这种方式会比较熟悉
需要记忆的就是Z轴的方向
我们在物理课上的时候也学到过右手定则
这时我们也可以用右手
按照从X轴到Y轴的方向握紧拳头
竖起大拇指
那么大拇指指的方向就是Z轴的方向
OpenGL在内部使用的是归一化的坐标
也就是NDC坐标
所有的屏幕上显示的内容
都包含在一个边长为二的立方体内
也就是X Y Z的坐标都在[+1,-1]之间
只有在这个范围的内容才会显示在屏幕上
但是这个坐标范围在实际操作中并不是非常方便
因此实际编程中大多数
是通过各种变换获得最终的归一化设备坐标
在定义了所有图形元素的位置之后
显示硬件还要计算各种图形的颜色
并通过可选的深度测试
也就是计算出所有图形元素之间的遮蔽关系后
才把没有被遮挡的元素给绘制到屏幕上
OpenGL绘制图形的基本元素
主要有点、线、还有三角形
点和线是很好理解的概念
唯一需要注意的是要知道点是有一定大小的
在OpenGL里面可以设置它的尺寸
线也是有一定宽度的
也可以通过特定的API来进行设置
而三角形才是OpenGL里面应用最多的一个图形元素
我们经常可以听到某某显卡
可以在一秒钟绘制多少个三角形
作为它的一种性能指标的表现
这也体现了三角形是OpenGL里面最常见和基本的元素
很多复杂的模型实际上也都是由很多的三角形组成的
每个三角形有三个顶点
而这些顶点就直接确定了模型的主要形状
每个点的颜色和纹理就决定了模型的显示细节
右图中
第二个模型显得更加逼真
也只是因为它具有更多细分的三角形而已
着色器是我们在前面多次提到的一个概念
它的英文是Shader
他是OpenGL所使用的可编程模块
它所使用的编程语言叫GLSL
也就是OpenGL Shader Language
它主要用来对图像进行可编程的渲染
右图是OpenGL ES 3.2的图像处理管线
其中蓝色的部分是不可编程的
而橙色的部分是可以编程的部分
我们可以看到顶点数据来自应用程序
它首先经过的可编程模块是顶点着色器
它会对顶点的数据进行坐标变换
接着处理管线进入曲面细分着色器
曲面细分将图元进一步分割
获得更多的细节信息
曲面细分包括三个部分
其中控制着色器和评估着色器是可编程的
再接下来进入几何形状着色器
它可以把单个的顶点扩展成一个几何形状
简化模型的设计
后面经过一系列的变换
光栅化
早期片段测试后进入到片段着色器
在片段着色器里面
会对屏幕上显示的每个像素点
颜色进行计算
最后通过后续的片段操作和混合
将像素点显示在屏幕上
在这个管线中
只有顶点着色器和片段着色器是必须的
其他可编程着色器都可以不提供
这个图对我们将要重点介绍的
顶点着色器和片段着色器
进行了更加形象化的展示
顶点数据也就是三角形的顶点
在图元装配阶段
被组合成三角形
然后在光栅化的过程中
就确定为独立的显示在屏幕上的点
而片段着色器里
将对每个点的颜色进行计算
最后的测试和混合
包括遮挡的测试和其他的一些可编程测试
决定了最终在显示屏上显示的效果
这个图从编程接口的角度
对OpenGL ES 3.0的图形管线进行了描述
绘图程序中所使用的顶点缓冲区数据
纹理数据
还有顶点着色器和片段着色器的程序代码
都可以通过OpenGL ES所提供的API来进行控制
将数据传递给GPU
而图形管线完成所生成的最终显示结果
也就是帧缓冲区的内容
也可以通过API进行访问
OpenGL ES是一个通用的图形API接口标准
但它并不提供与操作系统和硬件的直接接口
这些功能由EGL所提供
EGL提供的功能包括与设备的原生窗口系统通信
查询绘图表面的可用类型和配置创建绘图表面
与其他图形渲染API之间的同步
还有管理纹理贴图等资源
这些功能虽然不是绘图操作
但都与最终图形在显示设备上的展示密切相关
和操作系统也有密切的关系
一般这个功能都会由第三方程序库来提供
PowerVR所提供的SDK框架也包含了这方面的支持
使用PowerVR的框架可以轻松地实现
跨平台代码的开发
和OpenGL ES环境的仿真
通过向各平台提供
特定于平台的PVRVFrame软件
可以实现真正的跨平台
PVRVFrame是一个OpenGL ES仿真器
支持在PC上开发OpenGL ES代码
而不用完全在嵌入式设备上来进行测试
在上节课中
我们就是利用PVRVFrame的库文件
才让我们的程序可以在Windows系统中运行
PowerVR的SDK中提供了丰富的编程接口
简化用户在编写绘图程序中所使用的代码
这里列出了其中包含的很多个模块
在后续的课程中
我们会逐渐的接触到它们
并对它们有更加深入的了解
SDK的在线文档也可以帮助用户了解
特定的API和SDK的功能
其中的示例代码也是学习SDK的重要资源
另外
还有PowerVR的专用开发者论坛可以参考
这里列出了它的网址
当你有问题的时候
可以先在论坛上搜索问题
如果找不到答案
也可以在论坛上提问
另外
这里再介绍两本很有价值的OpenGL ES相关参考书籍
也会对大家在学习和编程的过程中
提供很好的帮助
其中左边那本是对OpenGL的详细介绍
由于其英文版是红色封面
所以经常被称为OpenGL红宝书
右边那本是针对OpenGL ES的介绍书籍
可以作为本课程的教材使用
今天的课就到这里
谢谢大家
-1.1 课程基本情况介绍
--课程基本情况介绍
-1.2 GPU 相关基础知识
-1.3 OpenGL ES 技术发展历史
-1.4 PowerVR SDK 安装和使用
-第一章测试
-2.1 OpenGL ES 基本概念
-2.2 编写第一个图形程序
-2.3 主要 API 介绍
-第二章测试
-3.1 矢量和矩阵知识基础
-3.2 旋转与位移变换
--旋转与位移变换
-3.3 OpenGL ES 变换基础
-第三章测试
-4.1 着色器编程语言介绍
-4.2 着色器编程实例
--着色器编程实例
-第四章测试
-5.1 颜色的基本概念
--颜色的基本概念
-5.2 纹理素材的使用
--纹理素材的使用
-5.3 立方体纹理
--立方体纹理
-第五章测试
-6.1 光照的基本概念
--光照的基本概念
-6.2 光源模型
--光源模型
-6.3 使用着色器渲染颜色
-6.4 反射与折射
--反射与折射
-第六章测试
-7.1 基于物理渲染的基本概念
-7.2 基于图像的照明
--基于图像的照明
-7.3 PBR 的实现
--PBR 的实现
-第七章测试
-8.1 Vulkan 介绍
-8.2 SDK 中的实用工具介绍
-综合测试



