OpenVG简介

原文链接:http://www.tuicool.com/articles/rAFR7b

参考文献1:http://www.doc88.com/p-008309425812.html

参考文献2:http://wenku.baidu.com/link?url=fKmRtafeRtB685fOCld3S85K3CKaDfwoGUL7dMxb3FGKHMLiHdU4WCu2EpasZ_W7iWcvX6EJkC80XJyx-59K4uqwRcKr6jWHM2y-rMgePk_

参考文献3;http://baike.baidu.com/link?url=YtsghvKgqaSseT47XlKJ3q9O5tnZawuJGVtiDYR0IdNj_ba9bKJcii7R-_XuD10E_YZA_-_G2ThqMdClfbkF8_

参考文献4:https://www.khronos.org/openvg/

嵌入式系统显示效能可望大幅提升。OpenVG应用程式介面(API),由于系以硬体方式处理向量及点阵图形,可加快绘图运算速度,并让2D动画影像更加流畅,呈现更吸睛的视觉效果,因而已逐渐受到嵌入式系统开发商青睐。

OpenVG是一种应用程式介面(API),系由Khronos Group所研制,用来显示向量化格式及点阵影像,并以硬体加速方式操作。

OpenVG处理两种主要的上层物件。首先是点阵图,这是一种记忆体架构,用来储存/绘制影像。每个x和y座标都对应到一个画素;而每个画素都拥有一个Alpha、红、绿与蓝(ARGB)数值,因此一个解析度200×200的影像就需要200×200(色阶深度)个位元组来储存。点阵图对于照片画质的绘图尤其有用。在后面运用范例(Use
Case)里所介绍的Coverflow应用,就有影像处理程式码及功能可供参阅。

另一种则是向量格式。向量是一种以起点和终点来描述的数学算式,根据各点互连方式,可能还须要加上其他如曲线控制点、弧线半径、弧度之类的参数。这种特性让向量非常适于延展,因为它并不须要靠每一个画素的资料来呈现影像。

图1所描绘的是两个原本在一般大小时看似无异的圆圈,随着画面放大,点阵图逐渐失真,但向量影像却仍能保持滑顺而清晰的轮廓。

图1 向量与点阵图比较

向量并不一定在所有场合都胜过点阵图。点阵图在固定大小时比较清晰,但是在放大后就会变得失真。点阵图处理起来较快,但是较耗费记忆体。向量则可以在任何缩放尺寸下保有影像画质,耗费记忆体也较少。向量影像只能以向量设计工具绘制,点阵图则可以来自相片、任何影像源,或制图工具。

OpenVG绘图效能更出色

理想的OpenVG管线(Pipeline)包括一套八段式的程序。虽然不是所有的实作手段都确实按照这套理想的管线,然而实作的成果却都应根据Khronos所定义测试程序,以确保一定的容错程度。其程序分别为:路径定义与API参数的设定;笔划;转换;画素转换;修剪与遮蔽;着色;影像内插;色彩转换;混合及防止失真。

以全球卫星导航(GPS)地图来说,要呈现可任意缩放的地图,标准方式就是透过向量。线上有很多种免费的地图软体工具,大多数都允许使用者将地图汇出为SVG档案,这个档案须再解译,并转换为OpenVG一般的架构,才能继续使用。

此外,以OpenVG加速过的使用介面,可以产生出流畅、易于延伸的人机介面(HMI),并提供一套完整的动态字型绘制引擎,具备各种混合及绘制功能。

OpenGL可以完成多项绘图作业,例如字型、2D GUI及HMI等等;而其最大的优点为处理多边形及纹路。OpenGL是点阵图导向,因此即使是以强大的OpenGL核心做简易的绘图,也须耗费宝贵的时间。

OpenVG补足了绘图的需求。它本身就是绝佳的应用,如果配合OpenGL,就能同时管理字型、向量及大部分的2D和虚拟3D组件,让OpenGL核心把时间用在它最擅长的项目上。

即使单独使用OpenVG时,也仅需少量电流及耗用记忆体,便可完成多项作业。若配合OpenGL使用,OpenVG便可转而管理OpenGL核心并不擅长的作业。

点阵影像绘制范例

以OpenVG处理影像相当简易,按照以下步骤即可在所需的表面上绘制影像:

.1.宣告一个VGImage物件。

.2.产生一个VGImage,并为VGImage物件指定处理程式。

.3.以点阵图资料填满影像。

.4.为VG_MATRIX_IMAGE_USER_TO_SURFACE设定矩阵模式,以便转换影像(3×3仿射转换)。

.5.绘制影像。

对虚拟程式码亦采取相同步骤:

.1.VGImage ovgarticle_image

.2.ovgarticle_image=vgCreateImage (VGImageFormat format, VGint width, VGint height, VGbitfield allowedQuality)

.3.vgImageSubData(VGImage image, const void data, VGint dataStride, VGImageFormat dataFormat, VGint x, VGint y, VGint width, VGint height)

.4.vgSeti(VG_MATRIX_MODE, VG_MATRIX_IMAGE_USER_TO_SURFACE);

.5.vgDrawImage(ovgarticle_image)

要进行这种操作,必须了解若干点阵图特性,例如Stride、位元深度及设置混色之类的API属性。

[@B]向量路径加速图形绘制[@C] 向量路径加速图形绘制

路径构成了向量加速绘图的核心(图2)。要完全掌握这个概念,必须了解以下观点:

图2 向量路径示意图

.1.路径:是一连串以段落串连起来的点。

.2.点:座标值。

.3.段落:两点之间的运算型态,有时需要很多个点才能形成段落的控制值。

在此用一个简单的三角路径来说明。首先,须定义构成整个路径的段落。构成路径的段落则须以一连串的指令来描述,并以位元组阵列的方式储存。每个指令都会消耗一个或多个点。

复杂的路径甚至须要动用到弧线和Bezier曲线的概念,在OpenVG里产生并绘制一个路径的步骤包括:

.1.宣告一个VGPath物件。

.2.宣告一个区段和点阵列。

.3.产生一个空的路径,以便接收段落资料(vgCreatePath)。

.4.将图像段落及点的资料填入路径(vgAppendPathData)。

.5.绘出路径(vgDrawPath)。

Cover Flow动画范例说明

最常见但也最为人所注目的动画,就是2D视角转换,经常用来呈现音响播放装置的唱片封面。这种动画会让人觉得影像在3D空间中沿着x、y及z轴移动或旋转。

这种转换并非真正透过3D绘图处理器(GPU)或3D处理引擎来实现动画效果,而是先在2D空间中定义,再由OpenVG提供必要的API来达到动画效果。

在数学观念里,这种效果称为「3D投射」,事实上是将一连串的3D点集合对应到一个2D平面上。观念本身很简单。试想一下,有一个平坦、方形的物体,譬如一片纸或是一张图,你可以将这张图放在面前,让它看起来是矩形。如果你把纸张挪近些,纸张看起来就会变大,如果移远些,又会变小。接着尝试顺着垂直轴转动一下,结果当然看起来就不再是矩形。它会出现一些锐角,因此外观上会像是菱形,甚至会是一直线。这就是3D物体将自身的每个点投影在你眼中的结果。

在绘图技术里,空间影像处理终究不脱阵列型态的演算。要展开阵列,你必须以阵列与影像相乘。如果要简化影像转换,也要仰赖阵列乘法。要产生一个Cover Flow动画,也必须要用到阵列。在OpenVG里,所有的空间处理都要以阵列变换为之。

设计关键就在于如何得出所需的「透视阵列(Perspective Matrix)」,以便得到3D的效果。这须要用到一些数学演算。在OpenVG API里也有提供其他设备,可计算出产生透视转换所需的阵列。

这些OpenVG API的工具函数可协助你计算出透视转换的阵列,不论是四边形转换为四边形,还是把矩形影像转换为给定的四边形,甚至反向而行。如此一来你就可以将影像中任意一点移动到任何想要的位置。在执行Cover Flow动画时,只须透过这些函数,就可以简化演算。

此外,OpenVG里一共有两种字型:点阵和向量(表1)。这两种字型OpenVG API都有办法处理,也有函数可以定义和登录字型(vgCreateFont)。一旦完成,就可以透过vgDrawGlyphs函数轻松使用字型。

一旦考量到这些资讯,程式设计师就必须决定要在应用中采用何种字型。通常视不同的绘图需求,可以混用两种字型。举例来说,可缩放的文字就要用向量字型,而大小固定不变的字型,例如按键标示,就可以改用点阵字型。

OpenVG加速动画效果制作

OpenVG的主要优势,就是可以用既有API轻松做出动画效果。一旦你有了可以绘制的EGL表面,只需要几行指令就可以让影像带到幕前,再加几行就可以令它动起来。

以汽车应用为例,最常见的需求之一就是要做出生动逼真的指针或仪表。直觉化的OpenVG运算可以用最高的画面刷新速率(如60fps)做到这一点。

此外,也可以透过常见的转换来达成延展之类的转换效果。延展不仅可以放大或缩小整体外型,也可以沿着个别的x轴和y轴进行。再以指针动画为例,通常指针并不会越过仪表板的蓝色边框,只会淡入或淡出。

反射则是另一种惊人的效果,同样可以用OpenVG轻松做到。只要对水平影像做一点通透的光滑表面效果,就可以达到反射的效果。既定函数可以反转出一个原本不存在的影像。

目前已有厂商研制出完全采用向量导向的车用仪表板。在图3两个展示版本当中,车速表是以大字型展示速度资讯,亦即在将现有字型画在表面之前,还要先做放大处理。OpenGL都不见得有这种功力。

图3 以OpenVG开发之向量车用仪表板示意图

此外,业者还研制了简易的动画引擎,以便处理延展、旋转及转换。透过这种绘图引擎,仪表板上的每种路径及点阵影像都可以轻易动画化。 至于像是GPS逐步转向导航之类的复杂动画,也可以透过vgInterpolatePath函数轻易完成。

此种函数可以接收起始及结束路径(具备类似段落)、终点路径及你想要加入的内插量。终点路径资料会根据选定的数量,以内插方式植入至起点和终点之间。如此一来,仅须定义两个路径状态,便可产生出复杂的路径转换。

矢量图,[1]也称为面向对象图像或绘图图像,在数学上定义为一系列由线连接的点。矢量文件[2]中的图形元素称为对象。每个对象都是一个自成一体的实体,它具有颜色、形状、轮廓、大小和屏幕位置等属性。

矢量图是根据几何特性来绘制图形,矢量可以是一个点或一条线,矢量图只能靠软件生成,文件占用内在空间较小,因为这种类型的图像文件包含独立的分离图像,可以自由无限制的重新组合。它的特点是放大后图像不会失真,和分辨率无关,适用于图形设计、文字设计和一些标志设计、版式设计等。

矢量图使用直线曲线来描述图形,这些图形的元素是一些点、线、矩形、多边形、圆和弧线等等,它们都是通过数学公式计算获得的。例如一幅花的矢量图形实际上是由线段形成外框轮廓,由外框的颜色以及外框所封闭的颜色决定花显示出的颜色。

矢量图也称为面向对象的图像或绘图图像,繁体版本上称之为向量图,是计算机图形学中用点、直线或者多边形等基于数学方程的几何图元表示图像。矢量图形最大的优点是无论放大、缩小或旋转等不会失真;最大的缺点是难以表现色彩层次丰富的逼真图像效果。

既然每个对象都是一个自成一体的实体,就可以在维持它原有清晰度和弯曲度的同时。这意味着它们可以按最高分辨率显示到输出设备上。

矢量图以几何图形居多,图形可以无限放大,不变色、不模糊。常用于图案、标志、VI、文字等设计。常用软件有:CorelDraw[3-4]、Illustrator[5-6]、Freehand、XARA、CAD[7]等。

1.文件小,图像中保存的是线条和图块的信息,所以矢量图形文件与分辨率和图像大小无关,只与图像的复杂程度有关,图像文件所占的存储空间较小。

2.图像可以无级缩放,对图形进行缩放,旋转或变形操作时,图形不会产生锯齿效果。

3.可采取高分辨率印刷,矢量图形文件可以在任何输出设备打印机上以打印或印刷的最高分辨率进行打印输出。

4.最大的缺点是难以表现色彩层次丰富的逼真图像效果。

5.矢量图位图的效果是天壤之别,矢量图无限放大不模糊,大部分位图都是由矢量导出来的,也可以说矢量图就是位图[8]的源码,源码是可以编辑的。

时间: 2024-08-10 21:05:43

OpenVG简介的相关文章

手机科普(软硬件简介——android)看了会懂很多东西的!

主要销售组成部分 手机和电脑一样,都需要不同的零部件拼装而成,只不过手机零部件相比于电脑零部件来说更精密,手机必备的零部件包括:CPU.RAM.ROM.GPU.屏幕.摄像头.电池容量.手机网络制式.天线芯片 等,下面我们分开解析不同部件的不同功能.CPU相当手机的大脑及心脏,核心的运算能力.强劲的CPU可以为手机带来更高的运算能力. RAM相当手机的搬运工,也叫做运行内存简称运存同电脑上所使用的内存条.RAM越大,手机运行速度更快,多任务机制更流畅. ROM相当于手机的原则储存仓库.用于安装系统

Android网络通讯简介

网络通信应该包含三部分的内容:发送方.接收方.协议栈.发送方和接收方是参与通信的主体,协议栈是发送方和接收方进行通信的契约.按照服务类型,网络通信可分为面向连接和无连接的方式.面向连接是在通信前建立通信链路,而通信结束后释放该链路.无连接的方式则不需要在通信前建立通信连接,这种方式不保证传输的质量. Android提供了多种网络通信的方式,如Java中提供的网络编程,在Android中都提供了支持.Android中常用的网络编程方式如下: 针对TCP/IP协议的Socket和ServerSock

微信红包的架构设计简介

@来源于QCon某高可用架构群整理,整理朱玉华. 背景:有某个朋友在朋友圈咨询微信红包的架构,于是乎有了下面的文字(有误请提出,谢谢) 概况:2014年微信红包使用数据库硬抗整个流量,2015年使用cache抗流量. 微信的金额什么时候算? 答:微信金额是拆的时候实时算出来,不是预先分配的,采用的是纯内存计算,不需要预算空间存储.. 采取实时计算金额的考虑:预算需要占存储,实时效率很高,预算才效率低. 实时性:为什么明明抢到红包,点开后发现没有? 答:2014年的红包一点开就知道金额,分两次操作

JSON 简介

ylbtech-JSON: JSON 简介 JSON:JavaScript Object Notation(JavaScript 对象表示法) JSON是存储和交换文本信息的语法,类似 XML. JSON 比 XML 更小.更快.更易解析. JSON 实例 { "employee":[ {"firstName":"John","lastName":"Doe"}, {"firstName"

Docker简介

Docker简介 什么是Docker: 正所谓Docker的英文本意为"搬运工",所以在我们的世界里,可以理解为Docker搬运的是装满任意类型的APP的集装箱,开发者可以通过Docker将APP变成一种标准化的.可移动植的.自动管理的组件.它用一种新的方式实现了轻量级的虚拟机,专业术语成为应用容器(Application Container) Docker的优势: 1.利用率高 ·Docker对系统资源的利用率很高,一台主机可以同时运行数千个Docker容器 2.可以快速的交付应用程

kafka入门:简介、使用场景、设计原理、主要配置及集群搭建(转)

问题导读: 1.zookeeper在kafka的作用是什么? 2.kafka中几乎不允许对消息进行"随机读写"的原因是什么? 3.kafka集群consumer和producer状态信息是如何保存的? 4.partitions设计的目的的根本原因是什么? 一.入门 1.简介 Kafka is a distributed,partitioned,replicated commit logservice.它提供了类似于JMS的特性,但是在设计实现上完全不同,此外它并不是JMS规范的实现.k

Quartz.NET简介及入门指南

Quartz.NET简介 Quartz.NET是一个功能完备的开源调度系统,从最小的应用到大规模的企业系统皆可适用. Quartz.NET是一个纯净的用C#语言编写的.NET类库,是对非常流行的JAVA开源调度框架 Quartz 的移植. 入门指南 本入门指南包括以下内容: 下载 Quartz.NET 安装 Quartz.NET 根据你的特定项目配置 Quartz 启动一个样例程序 下载和安装 你可以下载 zip 文件或使用 Nuget 程序包.Nuget 程序包只包含 Quartz.NET 运

ASP.Net简介、IIS服务器和Repeater重复器

简介:ASP.NET - 制作网站应用程序的技术 WebForm -出来时间比较早,敏捷.便捷开发,封装一些控件,慢慢发现一些控件做的挺好,真正使用没有那么敏捷 MVC -出来时间比较晚 什么东西? winform 界面 - 后台 - 数据库 共同组合出来的程序:ASP.NET 界面(HTML+CSS+JS) - 后台 - 数据库 运行机制:winform - 程序是安装在用户的电脑上,程序是运行在用户电脑上的.net Framework框架上的 ASP.NET - 通过浏览器向服务器发送请求,

CloudFoundry in 1 Box简介:PCF-Dev篇

在<CloudFoundry in 1 Box简介:Bosh-lite篇>我们介绍了Bosh-lite的架构和部署.在本篇中,我们将详细描述另一个CloudFoundry in 1 Box解决方案PCF-Dev. 1PCF-dev简介 PCF是Pivotal发行的Cloud Foundry商业版,PCF-Dev原名MicroPCF,是Pivotal为PCF的应用开发人员准备的一款App单虚拟机版的CloudFoundry.但是,麻雀虽小,五脏俱全.PCF-Dev虽然可以在仅仅一台虚拟式上即可运