iPhone开发基础教程之二
图形世界的两个视图
使用 Quartz 和 OpenGL 绘图
到目前为止,本文中的所有应用程序都是通过 UIKit 框架中的视图和控件来构造
的。借助这些常备组件,我们可以执行许多操作,并且可以构造各式各样的应用程序
界面。但是,如果不能高瞻远瞩,某些应用程序会无法完全实现。例如,有时应用程
序需要能够进行自定义绘图。幸而,我们可以依靠两个不同的库来满足我们的绘图需
要。一个库是 Quartz 2D,它是 Core Graphics 框架的一部分;另一个库是 OpenGL ES,
它是跨平台的图形库。OpenGL ES 是跨平台图形库 OpenGL 的简化版。OpenGL ES 是
OpenGL 的一个子集,OpenGL ES 是专门为 iPhone 之类的嵌入式系统(因此缩写为字母
“ES”)设计的。本章将介绍这两个功能强大的图形环境。我们将在这两种环境中构建示
例应用程序,并尝试了解什么时候使用哪个环境。
图形世界的两个视图
尽管 Quartz 和 OpenGL 有许多共性,但它们之间存在明显差别。Quartz 是一组函
数、数据类型以及对象,专门设计用于直接在内存中对视图或图像进行绘制。
Quartz 将正在绘制的视图或图像视为一个虚拟的画布,并遵循所谓的绘画者模型。
这只是一种奇特的方式,之所以这么说,是因为应用绘图命令的方式很大程度上与将
颜料应用于画布的方式相同。如果绘画者将整个画布涂为红色,然后将画布的下半部
分涂为蓝色,那么画布将变为一半红色、一半蓝色或紫色。如果颜料是不透明的,应
该为蓝色,如果颜料是半透明的,应该为紫色。
Quartz 的虚拟画布采用相同的工作方式。如果将整个视图涂为红色,然后将视图
下半部分涂为蓝色,你将拥有一个一半红色、一半蓝色或紫色的视图,这取决于第二
个绘图操作是完全不透明的还是部分透明的。每个绘图操作都将被应用于画布,并且
处于之前所有绘图操作之上。
另一方面,OpenGL ES 以状态机的形式实现。这个概念可能有点不好理解,因为
不能将其归结为一个简单的比喻,如在虚拟画布上绘画。OpenGL ES 不允许执行直接
影响视图、窗口或图像的操作,它维护一个虚拟的三维世界。当向这个世界中添加对
象时,OpenGL 会跟踪所有对象的状态。虽然 OpenGL ES 没有提供虚拟画布,但是却
提供了一个进入其世界的虚拟窗口。可以向该世界中添加对象并定义虚拟窗口相对于
该世界的位置。然后,OpenGL 根据配置方式以及各种对象彼此相对的位置绘制视图,
并通过该窗口呈现给用户。这个概念有点儿抽象,因此如果你感到困惑,也不必担心。
本章稍后将通过示例详细说明这个概念。
Quartz 相对比较容易使用。它提供了各种直线、形状以及图像绘制函数。尽管易
于使用,但 Quartz 2D 仅限于二维绘图。尽管许多 Quartz 函数会在绘图时利用硬件加
速,但无法保证在 Quartz 中执行的任何操作都得到了加速。
尽管 OpenGL 非常复杂,并且概念上也比较难理解,但是它的强大性是毫无疑问
的。它同时提供了二维和三维绘图工具。它经过专门设计,目的是为了充分利用硬件
加速。由于它可以跟踪虚拟世界的状态,因此还非常适合用于编写游戏和其他复杂的、
评论0