有时应用程序需要能够进行自定义绘图。我们可以依靠两个不同的库来满足我们的绘图需要。一个库是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非常复杂,并且概念上也比较难理解,但是它的强大性是毫无疑问的。它同时提供了二维和三维绘画工具。它经过专门设计,目的是为了充分利用硬件加速。它还非常适合用于编写游戏和其他复杂的、图形密集的程序。

转载于:https://www.cnblogs.com/changyulong/p/5866655.html

Quartz和OpenGL绘图基本概念相关推荐

  1. iPhone开发基础教程笔记(十二)--第十二章 使用Quartz和OpenGL绘图

    第十二章 使用Quartz和OpenGL绘图 有时应用程序需要能够自定义绘图.一个库是Quartz 2D,她是Core Graphics框架的一部分:另一个库是OpenGL ES,她是跨平台的图形库. ...

  2. OpenGL绘图过程简述

    OpenGL绘图的基本过程是:清除缓冲区,设置当前颜色,绘制几何图元,输出图形. 一.清除缓冲区 缓冲区是用来保存绘图过程中产生的图像数据的内存区域,OpenGL有颜色.深度.累积和模板等四种常用的缓 ...

  3. Android官方开发文档Training系列课程中文版:OpenGL绘图之图形绘制

    原文地址:http://android.xsoftlab.net/training/graphics/opengl/draw.html 如果你还不清楚如何定义图形及坐标系统,请移步:Android官方 ...

  4. opengl png图片 qt_QT中使用OpenGL绘图

    在之前说道过VS2010中配合OpenGL绘图的问题,这回是想要说说在QT中使用OpenGL,其实两者并无太大区别,因为都是基于C++语言的. 主要是想简要介绍下OpenGL在QT中的使用方法跟一些错 ...

  5. win32下的OpenGL绘图环境框架

    Win32下OpenGL入门 主要的步骤包括:添加opengl头文件,库文件,键盘鼠标响应,像素格式设置,opengl环境初始化,绘图变量设置,创建窗口,窗口大小改变时响应,绘制场景,源文件 1, 新 ...

  6. Speedy Painter(OpenGL绘图工具) v3.6.2

    点击下载来源:Speedy Painter(OpenGL绘图工具) v3.6.2 Speedy Painter是一款基于OpenGL的非常轻量级的绘图软件,该软件界面看上去非常细腻,而让人感觉非常友好 ...

  7. 计算机图形学——实验一 VS+OpenGL绘图环境及基本图形绘制

    实验一 VS+OpenGL绘图环境及基本图形绘制 一.实验目的 熟悉OpenGL的主要功能: 掌握OpenGL的绘图流程和原理: 掌握OpenGL核心函数的使用: 熟悉OpenGL基本图形元素的绘制函 ...

  8. OpenGL ES: (5) OpenGL的基本概念、OpenGL ES 在屏幕产生图片的过程、OpenGL管线(pipeline)...

    一. OpenGL的基本概念 OpenGL 的结构可以从逻辑上划分为下面 3 个部分: 图元(Primitives) 缓冲区(Buffers) 光栅化(Rasterize) 图元(Primitives ...

  9. Quartz-2D绘图之路径(Paths)详解

    在上篇文章中,我们简单的理解了绘图上下文,今天我们来认识一下Quartz-2D中另一个重要的概念,路径(Paths). 一.理解路径 路径定义了一个或多个形状,或是子路径.一个子路径可由直线,曲线,或 ...

最新文章

  1. 一文读懂 RoIPooling、RoIAlign 和 RoIWarp
  2. PHP数组用处_PHP 数组函数妙用
  3. 3 行 Python 代码实现假聊天机器人(慎入:这是假机器人!!!)
  4. oracle--pl/sql变量定义----
  5. apache日志信息详解
  6. 用java正则表达式验证字符串(邮箱与网址)
  7. java如何实现多继承
  8. E - Olympic Medal CodeForces - 215B(数学 思维)
  9. 程序自删除方法大总结
  10. matplotlib调整子图尺寸,消除大图白边框
  11. 基于JAVA+SpringBoot+Mybatis+MYSQL的电影院管理系统
  12. 华为发布首款5G折叠机,价格一万七;ofo被冻结145万;苹果最早明年放弃英特尔 | 极客头条...
  13. 001.从零到1之Linux高性能服务器开发
  14. vector 插入_Java学习五分钟系列:对比Vector、ArrayList、LinkedList
  15. 丰田要建专属自动驾驶测试场,再也不用共享了
  16. Java:Spring @Transactional工作原理
  17. YOLO学习笔记4——YOLOV2详解+论文解读
  18. Android手机车牌识别OCR
  19. 小米手机linux驱动下载,小米手机驱动下载
  20. 修改程序的图标与详细描述

热门文章

  1. html简单网页代码 案例_HTML+CSS静态网页练习案例(转动的八卦图)
  2. oracle 手动执行作业,ORACLE 作业操作
  3. java mysql 分页计算公式_关于Java的分页算法,急!
  4. 菁英班OJ赛2022-2-24(第一周)
  5. [postgresql]postgresql的聚合函数sql实例
  6. [转]老生常谈session,cookie的区别,安全性
  7. QT之QPainter用法
  8. Android与物联网设备通信-自定义报文与字节序
  9. OpenStack云第三天
  10. 这家金融巨头,要让AI人脸识别大规模应用在银行领域