有時應用程式需要能夠進行自定義繪圖。我們可以依靠兩個不同的庫來滿足我們的繪圖需要。一個庫是Quartz 2D,它是Core Graphics框架的一部分;另一個庫是OpenGL ES,它是跨平臺的圖形庫。OpenGL ES是跨平臺圖形庫OpenGL的簡化版。OpenGL ES是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非常複雜,並且概念上也比較難理解,但是它的強大性是毫無疑問的。它同時提供了二維和三維繪畫工具。它經過專門設計,目的是為了充分利用硬體加速。它還非常適合用於編寫游戲和其他複雜的、圖形密集的程式。