OpenGL ES 1.0与OpengGL的区别

OpenGL ES 1.0是专门针对嵌入式系统设计的3D图形库,它是从OpenGL 1.3发展而来的。它是OpenGL的一个子集,但也不仅仅是子集,还添加了OpenGL没有的一些内容。两者的主要区别如下:

    ★ 去掉了多余的API

    考虑到灵活性,OpenGL设计了大量不同的函数来完成同一件事情。比如 glColr(),就有30多种不同的形式,而区别仅在于参数的数量和类型不同。ES去掉了大部分这种API,仅留下了一些常用的和一般形式的。比如ES只支持glNormal3f, glColor4f, glMultiTexCoord4f。

    ★ 去掉了多余的功能

    有时,OpenGL会有不同的方法来做同一件简单的事情。比如 glBegin()/glEnd()与顶点数组都可以用来设置顶点。ES只保留了最有效的顶点数组的方法。再比如,ES中对多边形只支持三角形;多边性mode也只有填充方式;不支持index color;只支持RGBA模式等

    ★ 对代价大的功能做了限制

    OpenGL的很多功能实现起来要花费较大的代价,但是又很重要,比如纹理贴图。ES中要么去掉它(去掉了对1D,3D纹理的支持),要么让它是可选的。

    ★ 去掉了一些数据类型

    大部分的嵌入式设备都不会使用浮点计算,因此ES去掉了对double类型的支持。因为OpenGL 1.3中有一些函数只接受double类型,这些函数就被改为接受float类型。例如:glTranslatef, glRotatef, glScalef, glFrustumf, glOrthof, glDepthRangef, glClearDepthf.

    ★ 精简了一些API所支持的数据类型

    OpenGL有的函数可以支持多种数据类型,考虑到嵌入式系统的限制,ES定义了新的API,这些新的API只支持常用的几种数据类型。比如,OpenGL 1.3中的一些函数可以接收整数或short型,在ES中就改成只接收byte类型。

    ★ 去掉了对动态状态查询的功能

    OpenGL的状态可以随时查询,但是实现起来比较复杂。考虑到它不是那么重要,ES中就只支持对静态状态的查询。

    ★ 没有GLU

    留给厂商去自由设计以前GLU中支持的功能。

    ★ 设计了新的API来支持定点数

    glNormal3x, glMultiTexCoord4x, glColor4x, glDepthRangex, glLoadMatrixx, glMultMatrixx, glRotatex, glScalex, glTranslatex, glFrunstumx, glOrthox, glMaterialx, glLightx, glLightModelx, glPointSizex, glLineWidthx, glPolygonOffsetx, glTexParameterx, glTexEnvx, glFogx, glSampleCoverage, glAlphaFuncx, glClearColorx, glClearDepthx.

posted @ 2010-05-18 17:15  jacktu  阅读(2727)  评论(0编辑  收藏  举报