当前课程知识点:移动图形概论 > 第一章 课程简介 > 1.3 OpenGL ES 技术发展历史 > OpenGL ES 技术发展历史
各位同学 大家好
今天主要介绍一下opengLES技术的发展历史
本节的主要内容包括图形技术的发展历史
还有特别的介绍opengLES发展过程
首先
介绍计算机图形技术不可避免的要提到opengl
图形相关的应用一直是
计算机发展过程中的一个重要的组成部分
在上个世纪90年代三维图形开始迅速地发展
这方面的需求也逐渐越来越多
1992年sgi公司发布了opengl 1点零版本
同年成立了opengl arb
也就是opengl架构评审委员会
在arb的支持下
从1995年到2003年
openGL的版本从1.1发展到了1.5
成为了业界事实上的技术标准
2006年
ARB将标准的控制权转交给khronos工作组
由他维护标准的发行 直到今天
同期
另外一个不得不提的3D标准就是directx
在Opengl发布以后
微软立刻发布了DirectX1点零
其中包括了Direct 3D来对三维图形进行支持
但由于支持的硬件平台比较少
市场反应比较平淡
没有引起很大的市场关注
到了1997年
微软发布DirectX 5.0
相关技术才逐渐走向成熟
开始而2002年的DirectX9点零开始
支持高级编程语言的可编程管线
从技术上来讲已经领先于OpenGL
不过
直接把DirectX
和opengl比较有可能并不是特别的公平
因为DirectX不只是一个3D的图形库
还包括声音 用户输入 网络
等等跟游戏开发相关的解决方案
因此很多在WINDOWS平台发行的游戏
很多都是已支持directX为主
在WINDOWS系统中的生态和开发工具等
各方面的支持也都具有很明显的优势
接下来要介绍的就是我们这门课的重点 opengles
它的出现主要应对移动3D图形硬件的需求
与DirectX不同
它是一种完全跨平台的软件接口
可以在多种操作系统和不同的硬件平台上获得支持
这里列出了很多支持openGLes的硬件厂商
包括Imagination ARM Intel 高通 NVIDIA
等多家处理器和GPU厂商
还有谷歌这样的软件厂商
opengLES同样由ARb
和后来的Khronos工作组来维护
2002年发布了1.0也就是第一个开放标准
它拥有固定的功能管线
包含顶点数组
但删除了许多openGL操作和图元渲染功能
目的时创建一个轻量级的API库
同时保持和openGL的兼容
并且面向特殊的嵌入式应用
它的固定功能管线
虽然在某种程度上可定制
但对于开发人员来说还是不够灵活
不能创造出复杂的图形效果
而顶点数组是保存在主存储器中的数据结构
包含了发送给gpu的每一帧的几何图像信息
这些技术将在后面的课程中详细进行介绍
2003年
OpenGL ES1.1版本发布
它增加了1.0版本中缺少的部分功能
包括顶点缓冲区对象自动贴图和多重纹理
顶点缓冲区对象是对顶点数组的一种升级
他通常保存在gpu存储器中
仅包含一次发送到gpu的几何信息
可以发送一次而多次由GPU使用
这样就减少了由gpu不断访问
顶点数组造成的数据瓶颈
而自动贴图生成
是对一系列不同分辨率纹理图像的处理
提高了图像在不同缩放级别的显示效果
而多重纹理则允许将多个纹理图像组合在同一多边形上
这对于一些实现比较高级的图像光影效果是必不可少的
2003年出现的m3g
也就是移动3D图形库
在当时获得了非常广泛的支持
当时几乎全部的智能手机都支持这一标准
而它实际上是对openLBS的java封装
如果移动设备没有相应的硬件支持
m3g还可以在软件上对硬件进行模拟
右图是专为m3g而开发的都市赛车游戏
历史上
多年来人们一直不清楚是M3G还是OpenGL ES
会成为移动设备上的主要API
有人认为
是iPhone在2008年选择支持OpenGL ES而结束了这场纷争
2005年opengLES发布了2.0版本
这个版本开始支持可编程的图形管线
开发人员可以使用着色编程语言编写顶点和片段着色器
由于架构的改变
opengLES2点零不再支持固定功能管线
顶点着色器支持在gpu上直接执行代码
来实现顶点属性的变换
而片段着色器支持在gpu上执行代码来计算图元占用的各像素的颜色
关于着色器的相关的技术
在后续的讲座中将有详细的介绍WebGL
可以看成时openGL ES在互联网领域渗透的一个产品
2011年推出的WebGL
是基于openGLes2点零的3D图形API
它基于JavaScript实现
可以在html5的画布中使用
html5画布允许3D图形在兼容的web浏览器中运行
WebGL同样使用着色器编程进行图像处理
因此也不支持早期opengl的固定功能管线
这个游戏截图是一款充满未来风格的赛车游戏
叫做HexGL
玩家可以在使用webgl html5和JavaScript
构建的Web浏览器中直接操作游戏
这大大提高了网页游戏的用户体验
也扩展了openGLes的应用范围
2012年opengLes发布了3.0版本
它也支持可编程的3D图形管线
不支持openGLes1点零的固定功能管线
但完全兼容OpenGLes2点零
一些新增的技术包括多重渲染目标和几何体实例化
并且完全支持32位浮点和整数运算
这里面提到的渲染目标是一个可渲染的缓冲区
例如纹理
多重渲染目标支持的延迟着色技术
是一项在深度测试完成后
为可见图形窗口中的可见对象计算照明的技术
而几何体实例化允许gpu多次绘制相同的几何体
而只需将几何体提交到渲染管线一次
2014年 OpenGLES 推出了3.1版本
它增加了一些额外的功能
其中包括计算着色器
计算着色器支持在gpu上直接执行代码
从而可以将gpu当作通用处理器 而不是图形处理器来使用
因此
它允许软件将gpu的专用计算能力用于一般任务
这就可以利用gpu的计算能力
进一步减轻一些复杂计算对CPU的压力
Vulkan是2015年推出的一款新的3D图形API
他同样由 Khronos工作组开发
保持协议的开放和跨平台的特性
它主要对图形硬件的访问进行了优化
包括更底层的对设备的访问和控制
与Vulkan相比
OpenGLES具有单个的上下文
并且只有一个全局的状态机
这意味着它只能按顺序执行操作
是一种单核的设计
实现多线程编程比较困难
而Vulkan
允许将所有的状态发送到命令缓冲区
并且他以对象为基础 没有全局状态
非常有利于多线程编程的设计
由于 Vulkan 可对硬件底层进行访问
可以充分的利用现代的GPU架构优势
因此它比opengLES更高效
但同样的他在学习和使用上都比openLES要复杂
在这里我可以举个例子
我们后面要介绍的
最简单的opengoes的绘制图形代码只有60多行
而最简单的能绘制图形的Vulkan代码要接近1000行
因此Vulkan更适合熟悉OpenGL的用户学习使用
好 今天的课程就到这里
谢谢大家
-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 中的实用工具介绍
-综合测试