OpenGL ES 2.0 编程向导
Aaftab Munshi
Dan Ginsburg
Dave Shrener
插图列表……………xiii
例子列表……………xv
表格列表……………xix
前言……………xxi
序……………xxiii
读者建议
书发行机构
代码及着色器例子
1. OpenGL ES 2.0 目录
OpenGL ES 是什么?
OpenGL ES 2.0
定点着色器
预先
片段着色器
片段预处理
OpenGL ES 2.0 和 OpenGL ES 1.0 向后兼容
EGL
OpenGL ES 2.0 编程
库和包含文件
EGL 命令规则
OpenGL ES 命令规则
错误处理
Flush 和 Finish
基本状态管理
扩展阅读
2. hello 三角形:一个 OpenGL ES 2.0 例子
代码框架
怎么下载例子
Hello 例子
编译和运行例子
使用 OpenGL ES 2.0 框架
创造一个简单的矩阵和片段着色器
翻译: 江湖游侠 QQ;86864472 email:mazhaoyang2005@gmail.com
本翻译花费作者 3 个月有余,能力有限,错误在所难免,欢迎交流、指出错误,转载请注明出处,
装载着色器
创造一个项目目标并连接着色器
设置视口并清楚颜色缓冲区
装载几何图形并画一个
在后缓冲区显示物体
3. 一个 EGL 指导例子
如何窗口系统联系
检查错误
EGL 初始化
EGL 配置属性
EGL 选择属性
可用的配置属性
创建一个 On-Screen 区域:EGL 窗口
创建一个 Off-Screen 区域:EGL 缓冲
创建一个贴图
做一个 EGL 贴图
连接我们的 EGL 在一起
同步
4. 着色器和编程
着色器和编程
创建着色器
创建链接一个项目
表格和属性
得到和设置
得到和设置属性
5. OpenGL ES 着色器语言
OpenGL ES 着色器语言基础
变量和变量类型
构造变量
矢量和矩阵成员
常量
结构
数组
操作器
函数
内置函数
控制语句
表格
属性
变量
预处理程序和指令
表格和变量 pack
精度和限定
恒定
翻译: 江湖游侠 QQ;86864472 email:mazhaoyang2005@gmail.com
本翻译花费作者 3 个月有余,能力有限,错误在所难免,欢迎交流、指出错误,转载请注明出处,
6. 顶点属性、顶点矩阵和缓冲区目标
指定顶点属性数据
顶点属性常量
顶点矩阵
在顶点着色器里声明顶点属性
绑定顶点属性
在顶点着色器了改变
顶点缓冲区目标
缓冲区目标匹配
Tip 性能
7. 基本图元装配和光栅化
基本图元
三角形
直线
点类型
基本 draw
执行 tips
集合
坐标系统
边
透视分割
视口转换
旋转
选择
多边形设置
8. 顶点着色器
顶点着色器预览
顶点着色器变量
向前兼容
ES 2.0 顶点着色器限制
顶点着色器例子
一个顶点着色器例子
顶点着色器光照
普通贴图坐标系
顶点皮肤
OpenGL ES 1.1 固定顶点管道与 ES 2.0 顶点着色器
9. 贴图
2D 贴图
贴图基础
立方体贴图
贴图对象和装载贴图
贴图过滤和 Mip 贴图
自动 Mip 贴图产生
贴图坐标系封装
翻译: 江湖游侠 QQ;86864472 email:mazhaoyang2005@gmail.com
本翻译花费作者 3 个月有余,能力有限,错误在所难免,欢迎交流、指出错误,转载请注明出处,
在片段着色器上使用贴图
使用立体贴图的例子
压缩贴图
贴图 subimage 详述
从颜色缓冲区拷贝贴图数据
可选的扩展
3D 贴图
压缩 ericsson 贴图
浮点数贴图
Non_Power_of_two 贴图
10 片段着色器
固定行为片段着色器
片段着色器概述
创建特殊变量
创建恒量
精度质量
ES2.0 片段着色器限制
使用固定行为技术的着色器
多重贴图
雾
透明测试
使用平滑着色
11 片段着色器行为
缓冲器
请求额外的缓冲区
清除缓冲区
对帧缓冲区使用遮挡只读
Stencil 测试
使用剪裁测试
深度缓冲区测试
片段着色器测试和运行
混合
抖动
多重采样和抗锯齿
帧缓冲区读写像素数据
选择一个 render 缓冲区贴图作为帧缓冲区属性
帧缓冲区 EGL 窗口
12 帧缓冲区
什么是帧缓冲区
帧缓冲区和 render 缓冲区
创造一个帧缓冲区和 render 缓冲区目标
使用 render 缓冲区
使用帧缓冲区
使用 render 缓冲区作为帧缓冲区属性
翻译: 江湖游侠 QQ;86864472 email:mazhaoyang2005@gmail.com
本翻译花费作者 3 个月有余,能力有限,错误在所难免,欢迎交流、指出错误,转载请注明出处,
删除 render 缓冲区目标仍然使用帧缓冲区属性
读像素和帧缓冲区目标
Projective 贴图基础
Projective 贴图矩阵
Projective 聚光灯阴影
一个贴图程序例子
贴图抗模糊处理
对 procedural 更好的 render 贴图
OpenGL ES 2.0 创建一个 queries 字符串
微粒系统设置
微粒系统顶点阴影
微粒系统片段着色器
Render 对贴图设置
Tips 和 Tricks 性能
Per 片段光照
正常地图的光照
光照阴影
光照方程
使用 2D 贴图作为帧缓冲区属性
使用 3D 贴图作为帧缓冲区属性
检查帧缓冲区 completeness
删除帧缓冲区和 render 缓冲区
例子
13 OpenGL ES 2.0 先进编程
环境地图
微粒系统和点 sprites
图像 post 过程
贴图程序
14 state queries
执行 querying 的限制
阴影和
矩阵属性
贴图属性
据帧缓冲区
片段着色器模糊
光照 bloom
Projective 贴图
3D 贴图噪声
噪声产生
使用噪声
Querying OpenGL ES 状态
Hints
Queries 名字实体
NON 编程运行控制和 queries
翻译: 江湖游侠 QQ;86864472 email:mazhaoyang2005@gmail.com
本翻译花费作者 3 个月有余,能力有限,错误在所难免,欢迎交流、指出错误,转载请注明出处,
Render 缓冲区和平的缓冲区
15 在不同平台使用 OpenGL ES 和 EGL
不同平台概述
在线资源
C++ 便携性
OpenKODE
与平台有关的二进制码
扩展
A GL_HALF_FLOAT_OES
16 位浮点数
转换浮点数为半浮点数
B 编译行为
角和三角法行为
Exponential 行为
Common 行为
几何图形行为
矩阵行为
矢量关系行为
贴图表
派生行为
C 着色器编程语言语法
D ES 框架 API
框架源码
转变行为
翻译: 江湖游侠 QQ;86864472 email:mazhaoyang2005@gmail.com
本翻译花费作者 3 个月有余,能力有限,错误在所难免,欢迎交流、指出错误,转载请注明出处,
1 什么是 OpenGL ES?
OpenGL ES 是一个为便携或嵌入式设备例如:移动电话、PDAs、监视器、等,发展的
3D 绘图 APIs(应用编程接口)。OpenGL ES 是一个被叫做 Khronos 联盟的组织创造的一系
列 APIs 中的一个。Khronos 联盟成立于 2000 年一月,是一个专注为手持和嵌入式设备建立
开放标准和自由版权的 APIs 的工业联盟。
在桌面设备中有两个 3D API 接口,DirectX 和 OpenGL。DirectX 是运行 Window 系统
平台事实上的 3D 标准,在 3D 游戏平台中主要的标准。OpenGl 是一个跨平台的 3D API 标
准,能够运行在 linux 系统,各种 UNIX 系统,Mac OS X 和 Wicrosoft 系统等等。它是广泛
接受的 3D API,这个 API 被 Doom 和 Quake 系列游戏使用。用于 Mac OS X 的接口,在 CAD
应用像 CATIA、数字建模应用像 Maya 和 SoftImage|XSI。
因为 OpenGL 作为 3D API 的广泛使用,这是很自然的从桌面的 OpenGL 开始发展为手
持设备和便携式开放标准的 3D API;又因为使用 OpenGL ES 的设备地址空间和内存的限制、
低的内存带宽、敏感的电源功耗、缺乏浮点运算硬件,所以修改它以适用与手持和便携设备
领域。工作组对 OpenGL ES 做了下面的一些定义限制。
OpenGL ES API 是巨大的和复杂的,工作组的目标是建立一个适合设备驱动程序。为此
工作组删除了一些 OpenGL API 的冗余设计,对同一种操作有多种实现方法,只留下主要的,
多余的技术被删除,例如:一个几何体,OpenGL 中可以使用立即模式、显示列表、顶点矩
阵,在 OpenGL ES 中只能使用顶点矩阵,显示列表和立即模式被移除。
移除冗余是重要的,但保持兼容性也是重要的。尽可能的 OpenGL ES 被设计成 OpenGL
的嵌入式子集,OpenGL 将也能运行 OpenGL ES 的程序。原因是作为一个子集能更好的应
用桌面程序的代码和工具。虽然如此,也有偏离,特别是 OpenGL ES 2.0,细节将在后面的
章节讨论。
手持和便携设备的限制被引入,例如减少电力消耗、减少着色器性能,渲染质量被引入
着色器语言。
屏幕,在屏幕上做图尽可能的保持好的质量,将是重要的一项工作。
性的测试,这些设备必须通过完整的测试。
一共有三个 OpenGL ES 白皮书被释放,OpenGL ES 1.0、OpenGL ES 1.1 和 OpenGL ES 2.0
OpenGL ES 1.0 和 OpenGL ES 1.1 描述固定功能管线从 OpenGL1.3 和 OpenGL1.5 发展而来,
OpenGL ES 2.0 描述可编程绘图管线,发展自 OpenGL 2.0,因为发展自 OpenGL,意味着
OpenGL 是 OpenGL ES 的基础,决定着未来 OenGL ES 的版本,
OpenGL ES 2.0 来自 OpenGL 2.0 API,确保了对游戏的支持,例如在颜色调色板 1 用的图
片来自 demo 球游戏,OpenGL ES 2.0 的目标和他使用的着色器优良的效果例如环境绘制和
per-fragment 光照。这个游戏的例子在 OpenGL ES 2.0 是很普遍的。有了 OpenGL ES 2.0 在
桌面的应用将可以用于便携设备。
OpenGL ES 的设计者目标是确保最小的图像质量,大多数的手持设备只用一个有限的
QpenGL ES 工作组提供确保各种 OpenGL ES 设备正常工作、提供好的图像质量、健壮
在本章里,我们给 OpenGL ES2.0 的管线一个介绍。
OpenGL ES 2.0
OpenGL ES 2.0 是本书中要讲的 API,目标是讲述完整的细节(核心和扩展),给出怎么
使用的例子,讨论各种优化技术,读完本书希望能你能懂的 OpenGL ES 2.0 的核心 API,能够
开发 OpenGL ES 2.0 的应用程序,不要担心技术细节,懂得怎么去工作。
OpenGL ES 2.0 包含两部分:OpenGL ES 2.0 API 说明和 OpenGL ES 着色器语言说明,
图 1_1 显示 OpenGL ES 2.0 图像管线,图 1 _1 中的的着色器盒子描述了 OpenGL ES 2.0 的管
道可编程阶段,OpenGL ES 2.0 可编程管线的每个阶段预览在下面介绍。
翻译: 江湖游侠 QQ;86864472 email:mazhaoyang2005@gmail.com
本翻译花费作者 3 个月有余,能力有限,错误在所难免,欢迎交流、指出错误,转载请注明出处,
顶点着色器
本节给出概述,后面章节深入介绍。
顶点着色器一般的编程方法;
属性—顶点矩阵支持的 Per_vertex 数据
Uniforms—顶点着色器使用的常量数据
Samplers—被 Uniforms 使用的特殊类型,在顶点着色器的贴图中使用,是可选项
着色器编程—顶点着色器编程源码或可执行的部分
顶点着色器的输出叫做 varying 变量,在最初的光栅化阶段,这些变量被计算,作为片
段着色器的输入,从顶点着色器的矩阵使用插补的方法产生片段着色器的变量,输入和输出
在图 1_2 描述:
翻译: 江湖游侠 QQ;86864472 email:mazhaoyang2005@gmail.com
本翻译花费作者 3 个月有余,能力有限,错误在所难免,欢迎交流、指出错误,转载请注明出处,