你的位置:首页 > 操作系统

[操作系统]Quartz和OpenGL绘图基本概念


  有时应用程序需要能够进行自定义绘图。我们可以依靠两个不同的库来满足我们的绘图需要。一个库是Quartz 2D,它是Core Graphics框架的一部分;另一个库是OpenGL ES,它是跨平台的图形库。OpenGL ES是跨平台图形库OpenGL的简化版。OpenGL ES是OpenGL的一个子集,OpenGL ES是专门为iPhone之类的嵌入式系统设计的。

  Quartz是一组函数、数据类型以及对象,专门设计用于直接在内存中对视图或图像进行绘制。Quartz将正在绘制的视图或图像视为一个虚拟的画布,并遵循所谓的绘画者模型。这只是一种奇特的方式,之所以这么说,是因为应用绘图命令的方式很大程度上与将颜料应用于画布的方式相同。如果绘画这将整个画布涂为红色,然后将画布的下半部分涂为蓝色,那么画布将变为一半红色、一半蓝色或紫色。如果颜料是不透明的,应该为蓝色,如果颜料是半透明的,应该为紫色。

  Quartz的虚拟画布采用相同的工作方式。如果将整个视图涂为红色然后将视图下半部分涂为蓝色,你将拥有一个一半红色、一半蓝色或紫色的视图,这取决于第二个绘图操作是完全不透明还是部分透明的。每个绘图操作都将被应用于画布,并且处于之前所有绘图操作之上。

  另一方面,OpenGL ES以状态机的形式实现。这个概念可能有点不好理解,因为不能将其归结为一个简单的比喻,如在虚拟画布上绘画。OpenGL ES不允许执行直接影响视图、窗口或图像的操作,它维护一个虚拟的三维世界。当向这个世界中添加对象时,OpenGL会跟踪所有对象的状态。虽然OpenGL ES没有提供虚拟画布,但是却提供了一个进入其世界的虚拟窗口。可以向该世界中添加对象并定义虚拟窗口相对于该世界的位置。然后,OpenGL根据配置方式以及各种对象彼此相对的位置绘制视图,并通过该窗口呈现给用户。

  Quartz相对比较容易使用。它提供了各种直线、形状以及图像绘制函数。尽管易于使用,但Quartz 2D仅限于二维绘画。尽管许多Quartz寒素会在绘图时利用硬件加速,但无法保证在Quartz中执行的任何操作都得到了加速。

  尽管OpenGL非常复杂,并且概念上也比较难理解,但是它的强大性是毫无疑问的。它同时提供了二维和三维绘画工具。它经过专门设计,目的是为了充分利用硬件加速。它还非常适合用于编写游戏和其他复杂的、图形密集的程序。