OpenGL ES 基本知识——OpenGL ES Common/Common-Lite 规范(版本 1.1.12)

OpenGL ES 基本知识

OpenGL ES(以后简写为 “GL”)仅关心如何在帧缓存(framebuffer)中渲染(渲染后的值将保存到帧缓存中)。它不支持其他的外围设备与图形硬件关联,例如鼠标和键 盘。编程人员必须通过其他的途径获取用户操作,例如 Khronos Open KODE API。

GL在一定数量的可选模式下绘制原始对象。每个原始对象可以是一个点,线段或者一个三角形。每种模式可以独立的改变。每个设置之间不相互影响(虽然 一些模式可能最终影响帧缓存中的最后结果)。模式被设置,原始对象被定义,其他GL操作通过在函数或者程序中调用。

原始对象是一组被定义好的数据结构,包含一个或者多个顶点。一个顶点定义了一个点,或一个边的结束点,或者一个三角形的2条边相交的顶点。数据(包 括位置坐标,颜色,规格化,纹理坐标)保存在一个顶点中,每个顶点按照顺序,以相同方式,独立的被处理。唯一例外的是,如果一组顶点必须在一个指定的矩形 区域内被裁减,这个操作将导致,一些顶点可能被修改,一些新顶点可能被创建。裁减的类型依赖于这组顶点数据代表的描绘类型。

命令永远按照顺序执行,虽然可能命令的实现会有不确定的延时。比如,一个原始对象在必须在任何子序列影响帧缓存之前绘制。它也意味着查询和像素读取 操作返回的状态时,之前的所有的GL命令执行完毕。通常,GL 命令必须在其他子序列在造成任何影响之前完成。

在GL中,数据绑定发生在调用的时候。这意味着命令执行时,使用的数据会被解释。即使命令要求一个指向数据的指针,这些数据当调用的时候即被解释, 任何子序列的对数据的改变都不会产生影响(除非后继的操作中使用了同样的指针)。

GL提供对3D,2D图形的基本操作。包括特定的矩阵变换,光照方程系数,抗锯齿,像素更新操作。它不提供复杂几何元素的描述或者建模。另一种对这 种解决方案的描述是GL提供一些途径去描述如何渲染复杂的几何对象,而不直接描述此类复杂的对象。

GL命令是按照客户端-服务器 模式去解释的。也就是说,程序(客户端)运行命令,这些命令在服务器端解释并且执行。一个服务器可能保持一定数量的GL context对象。每个对象都是对当前GL 状态的封装。一个客户端可能选择连接任何这些context对象中的任何一个。当程序不连接任何一个context时,运行GL 命令会导致未定义的行为。

GL命令的通过窗口系统最大限度的控制帧缓存,窗口系统决定GL在给定的时间内可以访问帧缓存中的哪些点,它还负责与GL交流点的数据结构。因此, 没有任何GL命令去定义帧缓存或者初始化 GL。同样,在CRT或者LCD上帧缓存的显示内容(包括某些技术进行的 单独帧缓存值变换,例如gamma纠错)是不被定位到GL中。帧缓存构造发生在GL的外部,同窗口系统相关联。GL的初始化发生在窗口系统为GL分配一个 窗口时。EGL API定义了一个简便的途径创建GL contexts和窗口,该窗口可用于连接不同平台的窗口系统。

GL被设计成运行可以运行在一系列图形平台上,并提高图形显示的效果和性能。为了适应多样性,某些GL操作使用理想行为代替了实行行为,因为背叛这 种设想是允许的,也规定了一个实现必须遵守的规则使其接近理想的行为。在GL中,这个允许的变化指2个完全不同的GL的实现可以出现像素到像素的不一致, 即便相同的输入,或者相同帧缓存配置下。

最后,命令的名字,常数和类型都是用GL作前缀(可以为gl,GL_,GL),这样可以减少与其他包出现姓名冲突。在以后的文档中,前缀可能被省 略。

数值计算

GL操作中必须进行一些数值运算。

Common profile下,通常使用浮点数计算,浮点数的范围将在后面的“浮点计算”中有精确的定义。Common lite profile下,通常使用定点数计算,顶点数的范围将在后面的“定点运算”中做更精确的定义,但是也它也可以使用浮点数来计算。

浮点计算

我们不规定浮点数是如何表现的,它们的操作是如何执行的。我们简单的要求数字浮点部分包含足够的比特位和足够大的指数位,所有单独浮点操作结果都精 确到1/105。浮点数用来表示位置和规格化坐标时,最重要的是至少精确到232。表示颜色或者纹理坐标, 最少精确到210。其他浮点数至少精确到232

x .0=0.x=0

1.x=x.1=x

x+0=0+x

00=1

大部分单精度浮点格式需要满足这些要求。

任何浮点数作为GL命令的输入是合法的,如果提供一个浮点数是未定义的,但是必须保证不会导致GL中断或者结束。在IEEE计算中,例如,对GL命 令输入一个负零或者一个未规格化数会产生可预知的结果,而提供NaN或者无穷大会产生未定义的结果。如果x的值不是一个浮点数,以上一致性的规定不需要保 持。

定点数计算

内部计算可以即可以使用定点计算,也可以使用浮点计算。定点计算必须精确在±2-15。定点数表示位置或者规格化坐标必须精 确到215;表示颜色或者纹理坐标必须精确到210。其他定点值必须精确到215

x.0=0.x=0

1.x=x.1=x;

x+0=0+x=x

00=1

定点数可能导致上溢出或者下溢出,计算的结果是未被定义的,但是不能导致GL中断或者终止。

通常要求

以下的限制对所有的实现都必须被遵守,无论使用浮点数还是定点数计算。32比特位按照16.16划分,16表示分数,16表示整数位。如果一个顶点 使用16.16表示,模型视图和映射矩阵用16.16表示,视野空间 和规格化设备坐标空间的点用16.16表示(计算过程中的表达式可以使用充足的动态范围),然后变换管线必须计算视野空间和规格化设备坐标空间的点是有理 由的精确(例如:溢出是不被接受的)。

一些计算需要除法。因为某些原因(包括矢量规格化中隐含的除法),除零会导致一个未定义的结果,但是不能导致GL中断或者终止。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值