OpenGL ES 2.0游戏开发(下卷)
上QQ阅读APP看书,第一时间看更新

1.7 OpenGL ES 1.x与OpenGL ES 2.0实现方案的对比

本章最开始提到过,在OpenGL ES 1.x平台上想高效地实现本章案例中的特效是非常困难的。这是因为OpenGL ES 1.x采用的是固定渲染管线,顶点数据一旦送入渲染管线后就不可能对其进行自定义的处理了。因此,在OpenGL ES 1.x上想实现本章案例中的特效只能采用如下两种策略之一。

1.初始化时预先计算数据

此种策略的基本思想非常简单,就是在初始化时将动画中每一帧画面的顶点数据都计算出来,绘制每一帧画面时将与此帧画面对应的顶点数据送入渲染管线即可。因此,此策略就有两方面明显的局限性。

● 动画中的帧数不能过多,否则会占用大量的内存,导致程序不能正常执行。由于帧数不是很多,因此对于动态范围大的动画就会不太平滑,效果一般。

● 动画中的每一帧都是预先计算好的,不能够根据用户交互情况的变化而变化,灵活性差。

2.绘制每帧画面前由CPU临时计算顶点数据

此种策略其实就是将本章案例中由顶点着色器完成的工作改为绘制每帧画面前由CPU来完成,其可以解决第一种策略的两个局限,但其本身也有很大的局限性。因为在此情况下,CPU一方面需要处理顶点数据,同时还承载了很多处理其他业务逻辑的任务,如人机交互、物理碰撞等,这会导致CPU不堪重负,整个程序运行很慢。

从上述OpenGL ES 1.x平台上实现本章案例特效可能采用的两种策略中可以看出,基于OpenGL ES 1.x很难完全发挥出GPU强大的处理能力,因此,整个3D开发产业现在都在向OpenGL ES 2.0迈进。读者在以后的开发中也可以多思考、多总结,将能够由着色器完成的工作都让着色器去完成,尽量把CPU解放出来。

提示

笔者也是从OpenGL ES 1.x平台走过来的,那时开发出的一些高级的特效,一方面代码很长,开发成本高。另一方面,运行速度慢,不得不做出很多牺牲。现在有了OpenGL ES 2.0,原来的很多限制都不复存在了,相信随着硬件的进一步发展,可以开发出更多、更好的3D特效。