OpenVG简介

2024-09-08 08:18
文章标签 简介 openvg

本文主要是介绍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] 的源码,源码是可以编辑的。


这篇关于OpenVG简介的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1147597

相关文章

ASIO网络调试助手之一:简介

多年前,写过几篇《Boost.Asio C++网络编程》的学习文章,一直没机会实践。最近项目中用到了Asio,于是抽空写了个网络调试助手。 开发环境: Win10 Qt5.12.6 + Asio(standalone) + spdlog 支持协议: UDP + TCP Client + TCP Server 独立的Asio(http://www.think-async.com)只包含了头文件,不依

业务协同平台--简介

一、使用场景         1.多个系统统一在业务协同平台定义协同策略,由业务协同平台代替人工完成一系列的单据录入         2.同时业务协同平台将执行任务推送给pda、pad等执行终端,通知各人员、设备进行作业执行         3.作业过程中,可设置完成时间预警、作业节点通知,时刻了解作业进程         4.做完再给你做过程分析,给出优化建议         就问你这一套下

容器编排平台Kubernetes简介

目录 什么是K8s 为什么需要K8s 什么是容器(Contianer) K8s能做什么? K8s的架构原理  控制平面(Control plane)         kube-apiserver         etcd         kube-scheduler         kube-controller-manager         cloud-controlle

【Tools】AutoML简介

摇来摇去摇碎点点的金黄 伸手牵来一片梦的霞光 南方的小巷推开多情的门窗 年轻和我们歌唱 摇来摇去摇着温柔的阳光 轻轻托起一件梦的衣裳 古老的都市每天都改变模样                      🎵 方芳《摇太阳》 AutoML(自动机器学习)是一种使用机器学习技术来自动化机器学习任务的方法。在大模型中的AutoML是指在大型数据集上使用自动化机器学习技术进行模型训练和优化。

SaaS、PaaS、IaaS简介

云计算、云服务、云平台……现在“云”已成了一个家喻户晓的概念,但PaaS, IaaS 和SaaS的区别估计还没有那么多的人分得清,下面就分别向大家普及一下它们的基本概念: SaaS 软件即服务 SaaS是Software-as-a-Service的简称,意思是软件即服务。随着互联网技术的发展和应用软件的成熟, 在21世纪开始兴起的一种完全创新的软件应用模式。 它是一种通过Internet提供

LIBSVM简介

LIBSVM简介 支持向量机所涉及到的数学知识对一般的化学研究者来说是比较难的,自己编程实现该算法难度就更大了。但是现在的网络资源非常发达,而且国际上的科学研究者把他们的研究成果已经放在网络上,免费提供给用于研究目的,这样方便大多数的研究者,不必要花费大量的时间理解SVM算法的深奥数学原理和计算机程序设计。目前有关SVM计算的相关软件有很多,如LIBSVM、mySVM、SVMLight等,这些

urllib与requests爬虫简介

urllib与requests爬虫简介 – 潘登同学的爬虫笔记 文章目录 urllib与requests爬虫简介 -- 潘登同学的爬虫笔记第一个爬虫程序 urllib的基本使用Request对象的使用urllib发送get请求实战-喜马拉雅网站 urllib发送post请求 动态页面获取数据请求 SSL证书验证伪装自己的爬虫-请求头 urllib的底层原理伪装自己的爬虫-设置代理爬虫coo

新一代车载(E/E)架构下的中央计算载体---HPC软件架构简介

老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节能减排。 无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事.而不是让内心的烦躁、焦虑、毁掉你本就不多的热情和定力。 时间不知不觉中,快要来到夏末秋初。一年又过去了一大半,成

AI学习指南深度学习篇-带动量的随机梯度下降法简介

AI学习指南深度学习篇 - 带动量的随机梯度下降法简介 引言 在深度学习的广阔领域中,优化算法扮演着至关重要的角色。它们不仅决定了模型训练的效率,还直接影响到模型的最终表现之一。随着神经网络模型的不断深化和复杂化,传统的优化算法在许多领域逐渐暴露出其不足之处。带动量的随机梯度下降法(Momentum SGD)应运而生,并被广泛应用于各类深度学习模型中。 在本篇文章中,我们将深入探讨带动量的随

OpenGL ES学习总结:基础知识简介

什么是OpenGL ES? OpenGL ES (为OpenGL for Embedded System的缩写) 为适用于嵌入式系统的一个免费二维和三维图形库。 为桌面版本OpenGL 的一个子集。 OpenGL ES管道(Pipeline) OpenGL ES 1.x 的工序是固定的,称为Fix-Function Pipeline,可以想象一个带有很多控制开关的机器,尽管加工