矢量图形
矢量图形是计算机图形学中用点、直线或者多边形等基于数学方程的几何图元表示图像。矢量图形与位图使用像素表示图像的方法有所不同。
综述
所有的现代计算机显示器都要将矢量图形转换成栅格图像的格式,包含屏幕上每个像素数值的栅格图像保存在内存中。
从计算机发展的最初1950年代一直到1980年代,曾经使用过一种不同类型的矢量图形系统显示器。在这些系统中CRT显示器的电子束直接逐段生成所需图形,屏幕其它部分保持为黑的状态。为了达到没有闪烁或者接近没有闪烁的效果,这个过程每秒要重复很多次。这种显示系统可以生成分辨率非常高的艺术线条,并且不需要栅格系统生成同样分辨率所需要的对于当时来说非常巨大的内存空间。这种基于矢量的显示器称为X-Y显示器。
矢量图形显示器的最初应用之一是US SAGE防空系统。矢量图形系统只有在1999年美国的空管中出现过故障,现在依然在军队以及一些特殊系统中使用。另外,1963年,计算机图形学先驱Ivan Sutherland在MIT Lincoln Laboratory的TX-2上使用矢量系统运行他的Sketchpad程序。
后来的矢量图形系统包括Digital的GT40 [1]。有一个名为Vectrex的家庭游戏系统使用了矢量图形,另外还有「Asteroids」以及「Space wars」这样的游乐中心游戏也使用了矢量图形。另外值得一提的是Tektronix 4014,尽管它的显示是静态的。
如今矢量图形这个术语主要用于二维计算机图形学领域。它是艺术家能够在栅格显示器上生成图像的几种方式之一。另外几种方式包括文本、多媒体以及三维渲染。實質上而言,所有当今的三维渲染都是二维矢量图形技术的扩展。工程制图领域的绘图仪仍然直接在图纸上绘制矢量图形。
目的
这种绘制图比位图的优越之处有:
- 保存最少的信息,文件大小比位图要小,并且文件大小与物体的大小无关
- 可以无限地放大这个圆,它仍然保持平滑;用多边形表示的曲线将会显现出不是真正的曲线
- 在放大的时候,直线与曲线都不会成比例地变粗,它只会保持不变或者要小于缩放比例;为了看起来比较平滑,使用简单几何形状表示的不规则曲线将会成比例地变粗,并且看起来不再像这些几何形状
- 保存的物体参数可以在后面修改。这也就是说物体的运动、缩放、旋转、填充等都不会降低绘制的精度。另外,可以用与设备无关的单位表示,这样更好地栅格设备上进行栅格化。
- 从三维的视角来看,由于阴影可以抽象为形成它们的光线,所以矢量图形的阴影渲染更加真实。这样就可以得到真实感的图像及渲染效果。
典型的图元对象
这只是其中的一部分,另外还有各种各样用于不同应用程序的曲线,如「Catmull-Rom样条」、非均匀有理B样条等。
通常位图图像也是一个元对象,从概念上来看它同矩形的表现类似。
矢量运算
矢量图形编辑器通常可以旋转、平移、镜像、拉伸、扭曲矢量图形,通常可以进行仿射变换,改变深度位置并且将图元与复杂物体合并。 更加复杂的变换包括封闭形状的集合运算(并集、补集、交集等)。
矢量图形非常适合于与设备无关的简单或者合成的制图或者不需要实现真实感的场合。例如,「PostScript」以及PDF的页面描述语言就使用了矢量图形模型。
打印
矢量艺术线条是打印领域中的一项关键技术。因为艺术线条是从一系列数学点得到的,所以无论如何缩放艺术线条打印结果質量都非常高。例如,将同一个矢量标识图打印到名片上或者放大到广告牌上,都可以得到同样的图像質量。与此不同的是,如果位图从名片大小放大到广告版的尺寸,那么图像質量将会变得非常模糊。
三维造型
在三维计算机图形学中,矢量表面表示非常常见,而位图可以用作表面纹理、高度场数据以及凸凹纹理映射等特殊目的。在低端系统中,在应用程序中用简单的多边形网格表示几何细节,在这些场合交互帧率或者简单性都是非常重要的。在高端系统中,如果希望通过牺牲渲染时间的方法换取更好的图像質量及精度,那么就可以使用贝塞尔曲面、NURBS或者细分曲面等平滑表示方法。但是,我们也可以用「Phong shading」这样的算法从多边形网格实现一个平滑曲面。