没有合适的资源?快使用搜索试试~ 我知道了~
首页OpenGL ES 2.0规范(中文版)——本人自己翻译总结的
本规范是本人根据《OpenGL ES Profile Specification 2.0.24 (Difference Specification) (April 1, 2009) (Annotated)》进行学习时翻译的,我今天把它提取出来,仅供大家学习使用,帮助想学习OpenGL ES 2.0这一国内中文资料尚少的OpenGL嵌入式API,本规范非常有用,希望能够帮助大家学习OPenGL ES 2.0,我们也知道OpenGL ES2.0与openGL ES1.x及OpenGL 最大的区别就是它的可编程特性! 本人现在还在学习和研究OpenGL ES 2.0,以及GLSL进行3D渲染,目前在做3D 渲染引擎! 希望它能帮上你,谢谢!
资源详情
资源评论
资源推荐

OpenGL ES 2.0 Common Profile 规范
规范规范
规范
作者
作者作者
作者:
::
:杨延
杨延杨延
杨延 EMAIL:
::
:yangyanhao12@yahoo.com.cn
申明
申明申明
申明
本规范是本人根据《OpenGL ES Profile Specification 2.0.24 (Difference Specification)
(April 1, 2009) (Annotated)》进行学习时翻译的,我今天把它提取出来,仅供大家学习使用,
帮助想学习 OpenGL ES 2.0 这一国内中文资料尚少的 OpenGL 嵌入式 API,我是从 2010 年 8
月 17 号左右正开始接触 OpenGL ES 2.0,当时根本都不懂什么叫 OpenGL ES 2.0,更别说用
它来做嵌入式设备上的三维图像开发了。我当时连 OpenGL 都不太懂,只知道有这个 3D 的
API。我先花了不到五天的时间,在不懂 OpenGL 和 OpenGL ES 的情况下,将这篇规范翻译
成中文,因此,文中会有很多翻译不对的,而且文中后面有些表格实在不想手画,直接是从
英文的规范中截图的,如有给大家理解上带来的不便,敬请原谅小女子的初生牛犊!本文档
只供学习使用,任何其它商业用途,将都属于不尊重作者的行为!
本人现在还在学习和研究 OpenGL ES 2.0,以及 GLSL 进行 3D 渲染,目前在做 3D 渲
染引擎,因为目前还有许多不懂之处,如果您是这方面的专家,请联系本人!
第一章
第一章第一章
第一章
概述
概述概述
概述
OpenGL ES 2.0 只定义了 common profile。定点数据类型(16.16 描述)只由
顶点属性数组支持。着色变量(shader uniform variables)和命令(函数)参数不
再支持定点数,目的是为了简化 API,还有一个原因是定点数据类型的变量没有
任何额外的性能优势。OpenGL ES 2.0 规范和 OpenGL 规范中管线描述一致。规
范中列出了支持的命令和状态,这些命令和状态是 OpenGL 规范中的一部分,但
在 OpenGL ES 2.0 规范中全部描述了这些命令和状态。这篇规范并不只是一篇描
述渲染管线子集和 API 的文档,它还提供了 OpenGL 渲染器(renderer)和 OpenGL
ES 渲染之间的差异。
从版本 2.0.22 开始,OpenGL ES 通用配置文件规范是以 OpenGL 2.0 规范为
基础,是一个快速参考手册,提供了与 Open GL 2.0 直接的比较。
1.1 规定
规定规定
规定
这篇文档描述命令的方式是完全和 OpenGL 2.0 规范中的顺序一致。每一节
对应于完整 OpenGL 规范的相应部分,描述了每个命令配置。在需要的地方,
OpenGL ES 2.0 规范对删除的命令给出了一定的说明。
规范中每节包含了保留的命令和参数表。表格中使用了几种符号来显示特殊
情况。符号+表示一个 enumerant 是可选的,或者可能不被 OpenGL 2.0 支持。上

标(
+
)表示支持该命令,并在表体中有额外的限制。
第二章
第二章第二章
第二章
OpenGL 操作
操作操作
操作
OpenGL ES 2.0 规范重大的改变就是不支持 OpenGL 定点函数转换和片段管
线。命令不能以列表形式累积起来留待后续处理,取消了管线第一步的曲线和表
面几何逼近。
OpenGL ES 2.0 是继承自广泛使用的 OpenGL 应用编程接口的一部分。因此,它享
有类似的管线处理、命令结构、相同的 OpenGL 名字空间。有必要时,引入了一
些扩展用于选择性地支持 OpenGL 2.0 功能或充实现有的 OpenGL 2.0 功能。
2.1 OpenGL 基本知识
基本知识基本知识
基本知识
gl 和 GL_仍是命令和语法的前缀。只要在能不需要用命令变量和能降低管
线处理复杂度的地方,就尽可能地减少对不同数据类型(8 位,16 位,32 位,
64 位;整数和浮点数)的支持。完全取消了双精度浮点参数及数据类型,而其
它的命令和数据类型变量根据命令在适当的时候也删除了。在适当的情况下,加
入了定点数据类型(fixed point)。
OpenGL ES 提 供 了 两 个 帧 缓 存 用 于 交 互 : 窗 口 系 统 提 供 的 帧 缓 存
( window-system-provided framebuffers ) 和 应 用 程 序 创 建 的 帧 缓 存
(application-created framebuffers)。窗口系统提供的帧缓存是一直存在的,而应
用程序创建的帧缓存可根据需要来创建。主要是通过配置接口和管理状态来区分
这两种类型的帧缓存。
OpenGL ES 命令对 window-system-provided framebuffers 所产生的影响,最
终都是由分配帧缓存资源的窗口系统(window-system)来控制。窗口系统决定
OpenGL ES 在任何特定时间内所能访问的部分缓存,以及构造缓存与 OpenGL ES
之间的通信。因此,没有 OpenGL ES 命令来配置窗口系统提供的帧缓存。同样,
CRT 监视器或 LCD 面板都不能被 OpenGL ES 访问。结合窗口系统的帧缓存配置
发生在 OpenGL ES 之外。
2.1.1 定点计算
OpenGL ES 2.0 规范支持定点顶点属性,使用 32 位的补码。32 比特位按照
16.16 划分,16 表示分数,16 表示整数位。如果一个顶点使用 16.16 表示,模型
视图和映射矩阵用 16.16 表示,视野空间和规格化设备坐标空间的点用 16.16 表
示(计算过程中的表达式可以使用充足的动态范围),然后变换管线必须计算视
野空间和规格化设备坐标空间的点是有理由的精确(例如:溢出是不被接受的)。
OpenGL ES 2.0 管线要求和在规范 2.1.1 节中指定相同范围和精度。

2.2 GL 状态
状态状态
状态
OpenGL ES 2.0 规范中保留了完整 OpenGL 规范中描述客户端和服务器状态
的一个子集。依然存在分离的客户端和和服务器状态。6.2 节中概述了规范中所
有状态变量的配置。
2.3 GL 命令语法
命令语法命令语法
命令语法
保留了 OpenGL 命令和和类型的命名约定。增加了定点类型。不支持使用
byte, ubyte, short, ushort 类型作为后缀的命令。删除了所有 double 类型和双精度
(double-precision)命令。OpenGL ES 2.0 规范只使用’f’和’i’作为后缀。
2.4 基本
基本基本
基本 GL 操作
操作操作
操作
保留的基本命令操作和 OpenGL 2.0 相同。和 OpenGL 2.0 管线的主要差别是:
命令不能放置在一个显示列表中;没有多项式求值函数;不支持定点函数转换和
片段管线;以及片段块不能直接发送至个人的片段操作中。
2.5 GL 错误
错误错误
错误
保留了完整的 OpenGL 错误检测行为,包括忽视违法命令和设置当前错误状
态 。 在 所 有 命 令 中 , 参 数 值 不 能 为 未 识 别 的 参 数 值 和 错 误 结 果 ( 如
INVALID_ENUM 或 INVALID_VALUE)。表 2.1 中列出了这些错误。
OpenGL 2.0 Common
NO_EEROR
√
INVALID_ENUM
√
INVALID_VALUE
√
IVALID_OPERATION
√
STACK_OVERFLOW
—
STACK_UNDERFLOW
—
OUT_OF_MEMORY
√
TABLE_TOO_LARGE
—
表 2.1 错误配置
OpenGL 2.0 Common
enum GetError(void)
√
保留了命令 GetError 用于返回当前错误状态。在 OpenGL 2.0 中,可能需要
多次调用 GetError 来获取管线中各部分的错误状态。
良好定义的错误行为允许编写可移植的应用程序。获取错误状态帮助开发人员调
试开发过程中无效的命令参数。这是初始部署的重要特征。

2.6 Begin/End 范式
范式范式
范式
OpenGL ES 2.0 使用顶点数组绘制几何对象。OpenGL ES 2.0 只支持用户定
义的顶点属性。不支持顶点坐标,标准化(normals),颜色,纹理坐标,因为这
些都可以在顶点属性数组中定义。
自定义顶点属性中的辅助值可使用 2.7 节中描述的属性规范命令进行设置。
因为不支持 Begin 和 End,所以也没有内部状态指示 begin/end 状态。
支持的模式:POINTS, LINES, LINE_STRIP, LINE_LOOP, TRIANGLES,
TRIANGLE_STIP, TRIANGLE_FAN;不支持的模式:QUADS, QUAD_STRIP,
POLYGON
不支持索引颜色渲染(color index rendering),不支持边界标志(Edge flags)。
OpenGL 2.0 Common
void Begin(enum mode)
—
void End(void)
—
void EdgeFlag[v](T flag)
—
Begin/End 范式提供方便的同时,也导致了大量命令的执行。正确的执行涉及到在
Begin 和 End 之间不能合法执行这些命令。跟踪这些状态产生了额外的负担。然而,
顶点数组能够更有效的执行,因为它们是在单个函数调用中呈现出所有原始数据。
ES 不支持边界标志,因为它们只是在绘制多边形时使用,而 ES 规范中没有
PolygonMode。
删除了 Quads 和 polygons,因为通过三角形可以很容易的模拟实现,这样就免去
了将四边形和多边形分解为三角形的困难,因为它是完全留给应用程序去实现。
删除四边形和多边形也移除了在 line mode 下绘制时需要的边界标志。
2.7 顶点规格
顶点规格顶点规格
顶点规格
OpenGL ES 2.0 没有 Begin 和 End 的概念,顶点是由专门由顶点数组来指定
的。
设置通用顶点属性 0 不再指一个顶点。设置任何通用顶点属性(包括属性 0)
都意味着更新属性的值。状态要求支持由 MAX_VERTEX_ATTRIBS 组成的四分
量浮点数组来存储通用顶点属性。
因为没有当前顶点的概念,所以没有描述顶点坐标的状态。所有通用顶点属
性的初值值,包括顶点属性 0,都是(0,0,0,1)。
OpenGL 2.0 Common
void Vertex{234}{sifd}[v](T coords)
—
void Normal3{bsifd}[v](T coords)
—
void TexCoord{1234}{sifd}[v](T coords)
—
void MultiTexCoord{1234}{sifd}[v](enum texture, T coords)
—

void Color{3,4}{bsifd ub us ui}[v](T components)
—
void FogCoord{fd}[v](T coord)
—
void SecondaryColor3{bsifd ub us ui}[v](T components)
—
void Index{sifd ub}[v](T components)
—
void VertexAttrib{1234}f[v](uint indx, T values)
√
void VertexAttrib{1234}{sd}[v](uint indx, T values)
—
void VertexAttrib4{bsid ubusui}v(uint indx, T values)
—
void VertexAttrib4N{bsi ubusui}[v](uint indx, T values)
—
通用顶点属性中每个原始属性可用 VertexAttrib*来设置入口点。保留了常用的浮点
版本的命令,方便以后的扩展或修改。因为这些命令并不经常使用,所以它们只
能用于设置(整体)每个原始属性。
OpenGL ES 2.0 只支持 RGBA 渲染模型。RGBA 的一个或更多元素深度可能是 0.
不支持颜色索引渲染。
2.8 顶点数组
顶点数组顶点数组
顶点数组
VertexAttribPointer 指定顶点数据。不支持先前定义的顶点数据数组,如顶
点坐标数组、颜色坐标数组、标准化坐标数组、纹理坐标数组。不支持颜色索引
和边界值。支持索引和非索引数组,但不支持 InterleaveArrays 和 ArrayElement
命令。
支持 ubyte 和 ushort 指数的索引。OpenGL ES 2.0 没有要求支持 uint 指数。
如果需要实现对 uint 指数,需要导入 OES_element_index_uint 扩展。
OpenGL 2.0 Common
void NormalPointer (enum type, sizei stride, const void *ptr)
—
void ColorPointer(int size, enum type, sizei stride, const void *ptr)
—
void TexCoordPointer(int size, enum type, sizei stride, const void *ptr)
—
void SecondaryColorPointer(int size, enum type, sizei stride, void *ptr)
—
void FogCoordPointer(enum type, sizei stride, void *ptr)
—
void EdgeFlagPointer(sizei stride, const void *ptr)
—
void IndexPointer(enum type, sizei stride, const void *ptr)
—
void ArrayElement(int i)
—
void VertexAttribPointer(uint index, int size, enum type, Boolean
normalized, sizei stride, const void *ptr)
size = 1, 2, 3, 4, type = BYTE
size = 1, 2, 3, 4, type = UNSIGNED_BYTE
size = 1, 2, 3, 4, type = SHORT
size = 1, 2, 3, 4, type = UNSIGNED_SHORT
√
√
√
√
剩余54页未读,继续阅读


















christina123y
- 粉丝: 11
- 资源: 6
上传资源 快速赚钱
我的内容管理 收起
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助

会员权益专享
安全验证
文档复制为VIP权益,开通VIP直接复制

评论30