1.OpenGL ES 简介
OpenGL ES (OpenGL for Embedded Systems) 是以⼿持和嵌⼊式为⽬标的⾼级3D图形应
⽤程序编程接⼝(API). OpenGL ES 是⽬前智能⼿机中占据统治地位的图形API.⽀持的平
台: iOS, Andriod , BlackBerry ,bada ,Linux ,Windows。
OpenGL ES苹果文档
The Open Graphics Library (OpenGL) is used for visualizing 2D and 3D data. It is a multipurpose open� standard graphics library that supports applications for 2D and 3D digital content creation, mechanical and architectural design, virtual prototyping, flflight simulation, video games, and more. You use OpenGL to confifigure a 3D graphics pipeline and submit data to it. Vertices are transformed and lit, assembled into primitives, and rasterized to create a 2D image. OpenGL is designed to translate function calls into
graphics commands that can be sent to underlying graphics hardware. Because this underlying hardware is dedicated to processing graphics commands, OpenGL drawing is typically very fast.
OpenGL for Embedded Systems (OpenGL ES) is a simplifified version of OpenGL that eliminates redundant functionality to provide a library that is both easier to learn and easier to implement in mobile graphics hardware.
OpenGL ES 开放式图形库(OpenGL的)⽤于可视化的⼆维和三维数据。它是⼀个多功能开放标准图形库,⽀持2D和3D数字内容创建,机械和建筑设计,虚拟原型设计,⻜⾏模拟,视频游戏等应⽤程序。您可以使⽤OpenGL配置3D图形管道并向其提交数据。顶点被变换和点亮,组合成图元,并光栅化以创建2D图像。OpenGL旨在将函数调⽤转换为可以发送到底层图形硬件的图形命令。由于此底层硬件专⽤于处理图形命令,因此OpenGL绘图通常⾮常快。
OpenGL for Embedded Systems(OpenGL ES)是OpenGL的简化版本,它消除了冗余功能,提供了⼀个既易于学习⼜更易于在移动图形硬件中实现的库。
2.OpenGL ES 3.0图形管线
3.OpenGL ES 图形管道

4.顶点着色器
(1)描述顶点上执⾏操作的顶点着⾊器程序源代码/可执⾏⽂件
(2)顶点着⾊器输⼊(属性) — ⽤顶点数组提供每个顶点的数据
(3)统⼀变量(uniform)—顶点/⽚元着⾊器使⽤的不变数据
(4)采样器—代表顶点着⾊器使⽤纹理的特殊统⼀变量类型.
顶点着色器业务
顶点着⾊器 业务:
1. 矩阵变换位置
2.计算光照公式⽣成逐顶点颜⾊
3.⽣成/变换纹理坐标
总结: 它可以⽤于执⾏⾃定义计算,实施新的变换,照明或者传统的固定功能所不允许
的基于顶点的效果.
5.图元装配
顶点着⾊器之后,下⼀个阶段就是图元装配.
图元(Primitive): 点,线,三⻆形等.
图元装配: 将顶点数据计算成⼀个个图元.在这个阶段会执⾏裁剪、透视分割和
Viewport变换操作。
图元类型和顶点索确定将被渲染的单独图元。对于每个单独图元及其对应的顶点,图
元装配阶段执⾏的操作包括:将顶点着⾊器的输出值执⾏裁剪、透视分割、视⼝变换
后进⼊光栅化阶段。
6.光栅化
在这个阶段绘制对应的图元(点/线/三⻆形). 光栅化就是将图元转化成⼀组⼆维⽚段
的过程.⽽这些转化的⽚段将由⽚元着⾊器处理.这些⼆维⽚段就是屏幕上可绘制的像
素.
7.片段着色器/片元着色器
⽚元着⾊器/⽚段着⾊器:
1. 着⾊器程序—描述⽚段上执⾏操作的⽚元着⾊器程序源代码/可执⾏⽂件
2.输⼊变量— 光栅化单元⽤插值为每个⽚段⽣成的顶点着⾊器输出
3.统⼀变量(uniform)—顶点/⽚元着⾊器使⽤的不变数据
4. 采样器—代表⽚元着⾊器使⽤纹理的特殊统⼀变量类型.
片元着色器业务:
⽚元着⾊器 业务:
1. 计算颜⾊
2. 获取纹理值
3. 往像素点中填充颜⾊值(纹理值/颜⾊值);
总结: 它可以⽤于图⽚/视频/图形中每个像素的颜⾊填充(⽐如给视频添加滤镜,实际
上就是将视频中每个图⽚的像素点颜⾊填充进⾏修改.)
8.逐片段操作
• 像素归属测试: 确定帧缓存区中位置(Xw,Yw)的像素⽬前是不是归属于OpenGL ES所
有. 例如,如果⼀个显示OpenGL ES帧缓存区View被另外⼀个View 所遮蔽.则窗⼝系统
可以确定被遮蔽的像素不属于OpenGL ES 上下⽂.从⽽不全显示这些像素. ⽽像素归
属测试是OpenGL ES 的⼀部分,它不由开发者开⼈为控制,⽽是由OpenGL ES 内部进⾏.
• 裁剪测试: 裁剪测试确定(Xw,Yw)是否位于作为OpenGL ES状态的⼀部分裁剪矩形范围
内.如果该⽚段位于裁剪区域之外,则被抛弃.
• 深度测试: 输⼊⽚段的深度值进步⽐较,确定⽚段是否拒绝测试
• 混合: 混合将新⽣成的⽚段颜⾊与保存在帧缓存的位置的颜⾊值组合起来.
• 抖动: 抖动可⽤于最⼩化因为使⽤有限精度在帧缓存区中保存颜⾊值⽽产⽣的伪像.
9.EGL(Embedded Graphics Library)
• OpenGL ES 命令需要渲染上下⽂和绘制表⾯才能完成图形图像的绘制.
• 渲染上下⽂: 存储相关OpenGL ES 状态.
• 绘制表⾯: 是⽤于绘制图元的表⾯,它指定渲染所需要的缓存区类型,例如颜⾊缓存
区,深度缓冲区和模板缓存区.
• OpenGL ES API 并没有提供如何创建渲染上下⽂或者上下⽂如何连接到原⽣窗⼝系
统. EGL 是Khronos 渲染API(如OpenGL ES) 和原⽣窗⼝系统之间的接⼝. 唯⼀⽀持
OpenGL ES 却不⽀持EGL 的平台是iOS. Apple 提供⾃⼰的EGL API的iOS实现,称为EAGL.
• 因为每个窗⼝系统都有不同的定义,所以EGL提供基本的不透明类型—EGLDisplay, 这
个类型封装了所有系统相关性,⽤于和原⽣窗⼝系统接⼝.
由于OpenGL ES是基于C的API,因此它⾮常便携且受到⼴泛⽀持。作为C API,它与
Objective-C Cocoa Touch应⽤程序⽆缝集成。OpenGL ES规范没有定义窗⼝层; 相
反,托管操作系统必须提供函数来创建⼀个接受命令的OpenGL ES 渲染上下⽂和⼀个帧
缓冲区,其中写⼊任何绘图命令的结果。在iOS上使⽤OpenGL ES需要使⽤iOS类来设置
和呈现绘图表⾯,并使⽤平台中⽴的API来呈现其内容。
EGL (Embedded Graphics Library )
来⾃图元装配
网友评论