《图形系统和模型.doc》由会员分享,可在线阅读,更多相关《图形系统和模型.doc(24页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第1章 图形系统和模型第1章 图形系统和模型计算机和通信技术已经越来越成为人们生活中的主导力量。电影制作、出版发行、银行和教育等活动已经并将继续对我们的日常生活带来革命性的变化。计算机、网络和复杂的人眼视觉系统三者相互结合并通过计算机图形学为我们提供了显示信息的一种全新方法,利用这种方法我们可以观看虚拟世界、与他人和机器进行交流。计算机图形学涉及计算机图形或图像生成过程的各个方面。该领域在四十多年前刚出现时显得非常微不足道,那时只能用阴级射线管(CRT)显示有限的几条直线。现在我们用计算机生成的图像与真实照片几乎没有区别。现在利用仿真飞机训练飞行员已不鲜见,这种仿真飞机就是在一个虚拟环境里实现
2、实时图形显示。完全由计算机生成的正片长度的动画电影已经受到好评并且在商业上获得成功。本章首先简要介绍计算机图形学的应用,然后概述图形系统和图像处理过程。本书自始至终强调利用计算机绘制图形与手工绘画和摄影等方法的图像形成过程之间存在相似性。我们将看到这种相似性有助于设计应用程序、图形库软件包和计算机图形体系。在本书中,我们介绍一个具体的图形软件系统OpenGL。OpenGL已经成为开发图形应用程序的一个普遍认可的标准。幸运的是,OpenGL容易掌握,它具有其他流行图形系统的绝大多数特性。我们采用自顶向下的方法,希望读者尽可能早地开始编写有图形输出的应用程序。当读者能编写一些简单的程序之后,我们将
3、讨论底层的图形库设计和硬件的实现过程。本章中我们将尽可能详尽地介绍图形学和OpenGL,目的是让读者就从这里开始编写图形程序。1.1 计算机图形学的应用来自图形用户的需求以及软件和硬件的升级进步,是计算机图形学发展的两大推力。计算机图形学的应用领域多样、范围广泛。尽管如此,我们仍可以将其大致划分为4个主要领域:(1)信息显示。(2)设计。(3)仿真与动画。(4)用户界面。尽管计算机图形学的许多应用横跨两个或多个领域,但该学科的发展还是基于上述4个领域各自独立的工作。1.1.1 信息显示传统的图形技术是作为在人们之间传递信息的媒介而出现的。虽然口语与书面语言也是服务于类似的目的,但人类视觉系统在
4、数据处理与模式识别方面的作用是无可替代的。早在四千多年前,巴比伦人就开始在石板上绘制建筑物的楼层规划图。二千多年前,古希腊人已经能够以图形来表达建筑构想,而相关的数学知识直到文艺复兴时期才被发展起来。今天,建筑师、机械设计师和绘图员则使用基于计算机的绘图系统来生成同类信息。几个世纪以来,地图制作者绘制了大量的反映天体与地理信息的地图,这些地图对航海者探索地球的各个角落发挥了异常重要的作用。今天,在诸如地理信息系统等领域中,地图仍然发挥着重要作用。现在,通过Internet可以实时地绘制与处理地图。一百多年来,统计人员已经探索出能帮助观察者决定数据所含信息的图表绘制技术。现在,计算机图表绘制软件
5、包为我们提供了各种图表绘制技术和色彩工具。利用这些技术和工具,我们可以处理多个大型数据集。尽管如此,要理解数据集所含的信息,还得依靠人眼识别可视化模式的能力。医学也向计算机图形学提出了一些有趣且重要的数据分析问题。诸如计算机断层成像技术(CT)、核磁共振(MRI)、超声波以及正电子发射型计算机断层成像(PET)等图像处理新技术,生成的三维数据只有经过图形学算法处理后才能得到有用的信息。彩图20是一幅人的头像,在该图像中皮肤是透明的而肌肉是不透明的。尽管医学成像系统能收集到大量数据,但只有经过计算机图形学处理后才能得到表明其构造的图像。超级计算机的出现让许多领域中的研究者解决了以往看起来似乎不能
6、解决的问题。可视化技术为研究人员理解各自领域里产生的大量数据提供了图形工具。诸如流体力学、分子生物学和数学等领域产生的大量数据经图形学处理后得到的几何实体可以让研究人员深入了解其复杂过程。彩图19显示出地幔的流体动力学特性,该系统利用数学模型获得数据并利用各种可视化技术进行图像显示,有关这些内容将在第8、9和12章进行讨论。1.1.2 设计诸如工程和建筑等领域的专业人员更关心设计问题。工程师和建筑师从一系列设计要求出发,寻求一种符合设计要求的既省钱又美观的设计方案。设计是一个迭代过程。在真实世界里很少有这样的问题,根据其设计说明只存在一个独一无二的最优解。一般情况下,设计问题要么是约束条件过多
7、,不可能存在最优解方案;要么是约束条件不足,存在多个可能方案。因而设计师以迭代的方式工作,首先提出最初的解决方案,然后进行测试,再根据测试结果寻找更好的设计方案。早在40年前,伊凡苏泽兰就认识到:人与CRT屏幕上显示的图像进行互动,这一模式具有强大作用。今天在建筑、机械和大规模集成电路设计(VLSI)等计算机辅助设计(CAD)领域里,应用交互式图形工具随处可见。图形学在这些不同的领域里有各自不同的应用方式,例如在VLSI设计中,图形学为设计者和设计软件之间提供了像菜单和图标等的交互图形界面。此外,有些工具能对初步的设计方案进行分析并以图形方式显示分析结果。彩图9、10是一个建筑设计图的两个不同
8、视图,是用同一个CAD设计软件得到的,该例说明了在设计过程中的不同阶段使用相应的工具产生同一个对象的不同图像的重 要性。1.1.3 仿真与动画计算机图形系统不断进步,能够实时地生成复杂的图像,工程师与研究人员开始把它应用在仿真器方面。训练飞行员是其中最重要的应用之一,图形化的飞机仿真器已被证实能够提高安全性和降低培训支出。通过使用一种特殊的VLSI芯片,可以开发出与飞行仿真器在复杂精细程度上相媲美的拱廊游戏。家用计算机上的游戏与教育类软件的效果也同样让人印象深刻。彩图16展示了一个物理机器人以及对应的图形仿真系统。该仿真器可以用于设计机器人、规划机器人的移动路径、在复杂环境中仿真机器人的行为等
9、。飞行仿真器的研制成功促使人们把计算机图形学应用到电视、电影和广告行业。现在可以用计算机制作一个完整的动画电影,而成本比传统手工制作要低。计算机图形学与手工动画技术相结合创造出既有技术性又有艺术性的动画效果,这种效果单凭其中任何一种技术都是不可能实现的。计算机生成的动画有其明显的外观特性,但我们也能够利用计算机创造出真实感图像。实际上我们经常在电视、电影或杂志上看到一些计算机生成或经过计算机处理的图像,它们可以达到以假乱真的程度。在本书第6、7章中将讨论在制作计算机动画中采用的各种光照效果技术。彩图1113是源于一个计算机生成的视频中的3个不同场景,艺术家和工程师在制作这些场景时所用的软件都是
10、目前市场上可得到的。彩图12中的工厂、彩 图13中的机器人以及火花特技效果都显示出计算机创造真实感场景的能力。彩图31是用计算机图形技术得到的特技效果,该效果看起来比较真实,用任何其他方法都不能得到这样的效果。彩图23和24的图像也是采用真实感图形技术绘制得到的。虚拟现实(Virtual Reality)为计算机图形学的应用开辟了新的领域。观察者戴着一个特制的显示头盔,该头盔可以让他的左右眼观看不同的图像,因而可以得到立体视图的效果。此外计算机可以跟踪他的身体位置和朝向,甚至头、手指等的位置。除上述设备外,他还可能有其他一些交互设备,如装有受力传感器的数字手套和声控设备。有了这一切,在计算机图
11、像生成的能力所允许范围内,他行动起来就好像是计算机动画场景中的一部分。一个外科实习医生可以采用这种方式接受手术操作训练,或者一个宇航员可以接受在失重环境下工作的训练。彩图22显示了VR场景中的一帧图像,该VR场景是一个虚拟病人供医护人员远程培训用的。1.1.4 用户界面类似窗口、图标、菜单和鼠标等可视化对象是我们在与计算机进行交互时最重要的部分。从用户角度来看,不同的窗口操作系统,如X Window系统、微软窗口操作系统以及麦金托什机操作系统只是在细节上有所差别。最近便有很多Internet的用户通过Netscape和Internet Explorer等图形界面的网络浏览器访问因特网。由于太熟
12、悉这种浏览器界面,以致我们根本没有想到自己正在与计算机图形学打交道。1.2 计算机图形系统一个计算机图形系统就是一个计算机系统,因为它具有一个通用计算机系统的所有部件。下面从 图1.1所示的框图开始讨论,该图有5个主要组成部分:(1)处理器。(2)存储器。(3)帧缓存器。(4)输出设备。(5)输入设备。图1.1 计算机图形系统该计算机系统模型高度通用,包括了工作站、个人计算机、附属于中央控制分时系统计算机的图形终端以及高级的图像处理系统。尽管一个通用计算机具备除帧缓存器以外其他所有部件,但是计算机图形系统与通用计算机的不同之处在于,图1.1中的各个部件都必须满足图形处理的特殊要求,该图反映了图
13、形系统的主要特征。1.2.1 像素与帧缓存目前,几乎所有的图形系统都基于光栅。一幅图像是由许多基本单元阵列组成,在图形系统中,图像的基本单元称为像素(pixel),而像素的阵列称为光栅(raster)。从图1.2可以看出,每个像素对应于图像中的某个位置或某个小区域。一幅图像的像素全部存放在一个称为帧缓存器的内存里。在高端系统,帧缓存器采用特殊类型的存储器芯片实现,一般是视频随机读写存储器(简称为VRAM)或者动态随机读写存储器(简称为DRAM),这些存储芯片会快速刷新帧缓存里的内容。帧缓存的深度,即每个像素的位数决定了某一个显示系统能显示的颜色数。例如,1位深度帧缓存只能显示两种颜色,而8位深
14、度帧缓存可以显示28(=256)种颜色。在全色彩(full-color)系统里,深度为24位的图形系统可以显示足够多的颜色数,能表示大多数真实感图像,所以称之为真彩色(true-color)系统,或称RGB颜色系统,因为每个像素的3个颜色位组分别赋予红、绿、蓝三基色,大多数显示系统使用三基色。在一些比较简单的图形系统里,帧缓存就是标准内存的一部分。帧缓存可以看作是图形系统的核心部分。分辨率帧缓存的像素数,决定了图像显示的细节程度。 (a)一幅雪人猫的图像 (b)眼睛周围像素的细节情况图1.2 像素在一些非常简单的系统里,帧缓存只存储屏幕上像素的颜色信息,但是在大多数系统里,帧缓存存储更多的信息
15、,如绘制三维图形所必需的空间深度信息。在这些系统里,帧缓存可以看作多重缓存器,其中一个或多个缓存器用来存储像素的颜色信息。目前在不会引起混淆的前提下,我们不加区分地使用帧缓存或颜色缓存这两个术语。在一些简单的图形系统里,可能只有一个处理器,它既要进行一般的运算处理又要进行图形处理。处理器的图形处理功能主要是根据应用程序生成的图元(如线、圆和多边形等)的操作要求,把颜色值赋给帧缓存中的像素,这些像素能最优地表示这些实体。像这种把几何实体转换为帧缓存中像素值的过程被称为光栅化(rasterization)或扫描转换(scan conversion)。一些高级的图形系统有多个处理器,每个处理器会根据
16、用户的定制要求实现某个特定的图形功能。1.2.2 输出设备显示器的主流产品是阴极射线管(简称为CRT),它是图形系统默认的显示设备。图1.3所示为CRT的简单示意图。当电子束发射到涂有磷光粉的屏幕时,屏幕就会发出亮光。电子束的方向由两个偏转电极控制。计算机输出的信号经数/模转换器变换成电压,分别加到x方向和y方向的两个偏转电极上。当有足够强度的电子束射到CRT涂有磷光粉的屏幕时,就会发出亮光。图1.3 阴极射线管(CRT)当控制电子束偏转的电压以恒定速率变化,电子束在屏幕上会扫描出一条直线轨迹。这种显示器称为随机扫描显示器或书法型CRT(calligraphic CRT)。因为电子束可以从屏幕
17、上任意一点移动到另一点。在电子束从一个位置移动到另一个位置的过程中,如果关掉电子束的强度,则不会对已显示屏幕上的图像产生任何影响,在现代光栅显示技术出现之前,这种结构的显示器是早期图形系统的基础。一个典型的CRT显示器,其屏幕上的磷光粉被电子束射中后发出的亮光只能维持非常短的时间通常在毫秒数量级。要得到稳定的图像,大多数显示器必须沿相同的路径每秒至少重复显示50次,这个过程称为刷新。对于光栅显示器,图形系统从帧缓存中逐个取出像素并在屏幕上相应的位置进行显示。整个帧缓存器中的内容必须以很快的速率进行重复显示,否则会产生闪铄,这个重复显示速度就是刷新频率。有两种不同的扫描方式。一种是逐行扫描,这种
18、方式是逐行或逐扫描线以刷新频率显示屏幕的像素,其刷新频率大约在每秒5085次,或5085Hz。一种是隔行扫描,它是指奇数行和偶数行轮流扫描显示。隔行扫描经常用在商用电视机上。隔行扫描显示器工作频率是60Hz,整个屏幕每秒重画30次。很多用户误认为隔行扫描的刷新频率是60Hz,而实际上只有30Hz。靠近屏幕,仔细观察,会发现二者的差别。逐行扫描显示器比起隔行扫描显示器,其显示的图像比较分散,尽管前者的每个像素的重画频率是后者的两倍。彩色CRT其屏幕上涂有3种不同颜色的磷光粉(红、绿、蓝3种颜色),排成一个小组。一种常用的方式是把3个荧光点排成一个三角形,称为颜色三角形。每一个颜色三角形有3个荧光
19、点,每个荧光点对应一个基色。大多数彩色CRT有3支电子枪,对应于3类荧光粉。在荫罩式CRT显示器里(如图1.4所示),为了保证每个电子枪能击中对应颜色的荧光点,在电子枪与荧光屏之间放置一个带孔的金属网格,称为荫罩。图1.4 荫罩式CRT尽管CRT显示器仍是最常用的显示设备,但并不是惟一一类显示设备。其他类型的显示技术也采用光栅形式。用在手提电脑里的液晶显示器(LCD)就是光栅显示器,根据不同的技术要求有的需要刷新,有的不需要刷新。还有等离子显示器和数字化投影仪,它们也是光栅类型的显示器。许多硬拷贝设备如打印机、绘制仪也是光栅类型设备,但它们不需要刷新。1.2.3 输入设备大多数图形系统提供了键
20、盘和至少一个其他类型的输入设备。最常用的输入设备是鼠标、游戏杆和数据输入板。其中任意一个都为系统提供了位置信息,都配备有一个或多个按钮,向处理器发送信号。由于这些输入设备允许用户指定屏幕上的某点位置,所以它们常被称为指向设备(pointing device)。我们将在第3章对它进行讨论。1.3 图像:物理方法和人工合成方法教授图形学常用的教学方法是先从如何在帧缓存里生成简单二维几何实体(如点、线段和多边形等)的光栅图像等问题开始,接着讨论如何根据二维几何实体集定义计算机里的数学对象。这种方法很适合于简单对象的简单图像的成像过程。但是在现代图形系统里,我们希望充分利用硬件和软件的性能获得计算机生
21、成的三维对象真实感图像。这个任务要涉及图像形成过程的许多方面,如光照、明暗处理和材质等。由于现在大多数的图形系统都支持这些功能,所以我们宁愿一开始就为生成这种真实感的图像建立好基础,而不是将来在一个有局限的模型上进行其功能扩充。由于成像的物体在物理上并不存在,所以从某种意义上说,计算机生成的图像是人工合成或人造的图像。在本章,我们认为计算机生成图像采用的成像方法与传统的成像方法有相似之处。因此在讨论图像生成的编程机制之前,先讨论照相机和人眼视觉等光学系统成像的原理。我们建立了一个图像成像过程的模型,该模型可以帮助读者理解并开发计算机图像成像系统。在本章,我们最小限度地使用数学知识。我们只想建立
22、一个图像生成过程的模型以及为实现该模型所采用的计算机体系结构。后面几章将详细讨论其实现过程,在那里我们推导出相关的方程。1.3.1 对象与观察者我们生活在一个充满三维物体的世界里,在讨论某个物体上的某点位置时,总是相对于某个简单的参照系统而言。我们可以测量出空间两个点之间的距离,据此确定两个对象的位置关系。包括几何和三角学在内的许多数学分支的发展都来源于这样一个愿望,即把点和距离测量的简单思想在概念上进行系统化。我们经常寻求把对这种空间关系的认识用诸如地图、画图和照片等图形或图像表示。同样地,照相机、显微镜和望远镜等物理设备的发明都是与可视化观察对象之间空间关系的强烈愿望密不可分的。因此图像成
23、像的物理方法与数学方法之间存在本质的联系,这正是计算机图像成像过程要探讨的问题。任何图像的形成过程,不管是采用物理方法还是数学方法,都有两个必不可少的实体,即观察者和被观察的对象。对象独立于任何图像形成过程和观察者所在的空间。在以人工合成对象为处理对象的计算机图形学里,我们通过确定诸如点、线和多边形等三维几何图元在空间的位置构造几何对象。在许多图形系统中,一组空间点位置(即为顶点)就足以定义或近似表示大多数对象。一条直线可以用两个顶点定义;一个多边形可以用一个顶点序列定义;一个球可以由两个顶点来定义,一个顶点定义其球心,另一个顶点为球面上的任意一点。CAD系统的一个重要功能就是为用户提供一个界
24、面,用户利用它可以方便地建立这个世界的人造模型。在第2章,我们要讨论OpenGL建立简单对象的方法。在第9章,我们要学习可以反映对象之间相互关系的对象定义方法。图像处理系统必须提供一种从对象到图像的变换方法。为了得到一个图像,我们必须有某个人或某个物体在观察对象。这个观察者可以是人,或者是照相机,或者是数字化仪器,正是这个观察者生成对象的图像。如果观察者是人,则形成在人眼的视网膜上;如果是照相机,则形成在底片上。我们经常把对象与对象所成的图像搞混。我们通常只从自己的透视角度观察对象,而忽略了这样的事实,即在其他位置上还存在其他观察者,他们从不同位置观察同一个对象。图1.5(a)是一幅由观察者A
25、得到的图像,就在这个场景里,还有另外两个观察者B和C,观察者B和C在观察者A看来也是场景中的两个对象。图1.5(b)和(c)分别是由观察者B和C得到的图像。 (a)观察者A的视图 (b)观察者B的视图 (c)观察者C的视图图1.5 3个不同观察者看到的图像图1.6 照相机系统图1.6显示了一个照相机系统,它正在观察一个建筑物。我们发现对象和观察者处在同一个三维空间里。但是按这种方式定义的图像我们在底片上看到的图像只是二维的。为了得到二维图像,我们必须说明对象的空间位置与观察者的空间位置,这是图像形成过程的本质,将在后面章节详细讨论。1.3.2 光照与图像在前面有关图像成像过程的讨论中,我们忽略
26、了许多问题。到目前为止,还没有谈到光照。如果没有光源,所有的对象都是黑的,我们在图像上看不到任何东西。我们还没讨论图像里的颜色是如何形成的,物体不同表面会对对象有哪些不同的影响。下面采取比较符合物理原理的方法讨论这个问题。我们从图1.7的布置开始讨论成像过程,该图是一个简单的物理成像系统。在这里,我们再次注意到两个对象:被观察的物理对象和观察者(照相机)。现在场景里多了一个光源,从光源发出的光线照射到物体表面上,从表面反射的一部分光线穿过透镜进入到照相机里面。光与对象表面的相互作用决定了有多少光进入到照相 机里。图1.7 一个带光源的照相机系统光是电磁波辐射的一种形式。电磁能量以波的形式传播,
27、波可以用波长或频率特性描述 频率f与波长的关系是,其中是光速。电磁波谱(如图1.8所示)包括了无线电波、红外光(热效应)和刺激我们视觉神经的可见光谱。可见光谱就称为光,其波长处于350780nm之间。对于一个给定的光源,其颜色由各种不同波长发射的能量决定。在可见光谱的中间,大约在520nm附近是绿光;在450nm附近是蓝光;在650nm附近是红光。与彩虹一样,处于红与绿之间的是黄色光,波长比蓝光短的是紫外线。图1.8 电磁波谱光源可以发出一组离散波长的光,或一组连续波长的光。例如激光发出单一波长的光,而白炽灯发出的光,其波长处于某个波长范围内。幸运的是,在计算机图形学中,除了承认这样的事实外不
28、同频率的光表现出不同颜色,我们很少需要讨论光的波动特性。我们采用另一种比较经典的方法讨论问题,正确使用这种方法的前提是光的强度足够大和光的波动性不再是一个重要因素。几何光学把光源看成是能量的发射器,该发射器以一定的速率发射能量即为光强。光是直线传播,光线从光源射出,直到遇到对象为止。一个理想的点光源是从一点位置向各个方向均匀发射单一频率或多个频率的能量。更加复杂的光源,如电灯泡,可以看成是从一个一定大小的区域发射能量,而且各个方向发射的能量并不均匀,某个方向的光比较强,而另一个方向的光比较弱。针对某个特定的光源,可以用两个特性参数来描述它,即每一个频率发射的光强和光的方向性。目前我们只考虑点光
29、源情况,对于更加复杂的光源,可以看成是由一系列的点光源组成。在本书的第6章将讨论光源模型。另外我们暂且只考虑纯单色光源,即只发射单一频率的光源。因为我们可以把多个不同频率的单色光的贡献进行叠加,所以这个假设并没有限制我们的论述,反而使以后的讨论更加直观易懂。这个简单的模型等效于只考虑光的亮度,不考虑光的颜色或色调。这种方法类似于在讨论彩色电视之前只讨论黑白电视。1.3.3 光线跟踪如果我们跟踪从光源发出的光线,可以建立一个成像模型。仔细观察图1.9所示的场景,该场景由单个点光源照明。之所以把观察者包括在内,是由于我们对到达观察者眼睛里的光线感兴趣。观察者也可以是照相机,如图1.10所示。光线是
30、一条射线,它从某点出发沿着某个方向到达无穷远处。由于光是直线传播的,所以我们认为光线是从点光源射出,向各个方向散射,其中一部分光线对照相机成像有贡献。例如,如果照相机看得见光源,则从光源发出的光线可以直接通过照相机的镜头到达照相机的底片。但大多数的光线既没有进入照相机,也没有照射到场景中的任何物体,直接发射到无穷远处。这些光线对成像没有任何作用, 但是这些光线可能对其他观察者有作用。剩下的光线照射到场景中的物体上并照亮它们。这些光线通过不同方式与物体表面相互作用。如果物体的表面是镜面,根据这个镜面朝向,经过该表面的反射光可能到达照相机的镜头并对成像有贡献。另外一些表面会把入射的光线散射到各个方
31、向,这种表面称为漫反射表面。如果表面是透明的,则从光源发出的光线经折射后穿过表面,再与其他表面相互作用后,部分折射光线到达照相机的镜头,部分折射光线如果没有遇到任何物体表面则发射到无穷远处。图1.10显示了各种可能的情形。 图1.9 带有一个点光源的场景 图1.10 光线跟踪过程注:光线A直接到达镜头;光线B没有遇到任何物体而射到无穷远;光线C从镜面反射后到达镜头;光线D射到一个漫反射表面并生成无数条新的反射光线,这些新光线最终对图像有贡献;光线E遇到半透明表面后生成一条折射光和一条反射光;光线F经表面反射后射到另一个表面并被该表面吸收掉。光线跟踪是一种基于上述思想的图像成像技术,它可以作为计
32、算机图像成像技术的基础。只要我们愿意进行大量的计算 在第13章中,将光线跟踪作为计算机生成图像的一种方法,我们将详细讨论它的形成过程。,就可以利用光线跟踪方法模拟任意复杂的物理效果。虽然光线跟踪模型是一种比较接近物理世界的近似方法,但它并不很适合于快速计算。然而我们可以对光线跟踪模型进行简化处理,提出一种更加切实可行的计算方法。从物理角度来说,一个物体发光,我们不能确定这些光是物体对入射光的反射光还是物体自身发射的光。例如,一个镜面把来自光源的光反射到观察者,对于观察者来说,这个镜面就像是一个光源。如果我们看到某一个物体,可能是这个物体被某一个光源照射,也可能是这个物体自身是发光体,也可能二者
33、都是。仅凭观察对象本身并不能确定是属于哪种情况。我们假设所有物体都是均匀亮度,当然这种情形实际上比较难得到。但是当在某个场景里放置灯光时,我们认为这样的假设是合理的。从观察者角度来看,一个红色三角形上任何点都具有相同的颜色,它与一个纯红色光发射器没有区别。根据这样的假设,我们不需用光源,只需利用简单的三角函数运算就可以得到图像。在第6章,我们放宽这个假设的条件,把光源和复杂的材质属性包括在内,但仍没有对光线跟踪的复杂过程进行深入讨论。下面将要介绍两种成像系统:人眼视觉系统和针孔照相机。人眼视觉系统非常复杂,但它遵从所有成像系统的物理原理。我们之所以介绍它,是因为它不仅是一个成像系统的好例子,而
34、且深入了解它的性质将有助于我们充分利用计算机成像系统的性能。针孔照相机是成像系统中一个非常简单的例子,有助于我们深入理解照相机和其他光学成像设备的工作原理。下面模仿它建立一个图像成像过程的模型。1.4 人眼的视觉系统人眼的视觉系统非常复杂,它具有照相机或显微镜等物理成像系统的所有组成部件。人眼视觉系统的主要组成如图1.11所示。光通过晶体和角膜进入眼睛,角膜是一层透明的薄膜,起着保护眼睛的作用;虹膜可以调节进入到眼睛的光量;晶体把图像投影到视网膜上,视网膜位于眼睛的后部,呈平面状。视网膜上的杆状细胞与锥状细胞(取这样的名字是因为它们的外表形状)是光敏细胞,它们受350780nm范围的电磁波激发
35、。杆状细胞对低强度光敏感,它可以解释人眼的暗视觉;而锥状细胞负责白天的视觉活动。杆状细胞与锥状细胞的大小与晶体和角膜的光学性质一起决定人眼视觉的分辨率(resolution)或人眼的视敏度(visual cuity)。分辨率就是人眼所能看到物体的大小,更科学的定义是,分辨率是指两个点之间的最近距离,当小于这个距离时,人眼就不能分辨出这两个点。人眼内部的各种光传感器对不同波长光的反应并不一致。人眼有3种类型的锥状细胞和一种杆状细胞。光强是光辐射能量的物理表示,而亮度是人眼对一个物体辐射光的感觉强度。人眼视觉系统对单色红光和对单色绿光的反应并不一样,即使这两种单色光的光强相同,人眼感觉到的亮度也不
36、一样,这是因为锥状细胞对红光和绿光的反应不一样。人眼对不同频率光的相对亮度曲线如图1.12所示。这些曲线反映了人眼对不同频率可见光的相对敏感程度,国际照明委员会(简称为CIE)称它为可见光效率曲线(standard observer curve)。该曲线说明了我们对绿光最敏感,而对红光和蓝光最不敏感。这条曲线与在黑白电影和黑白电视摄像机中使用的单色光传感器的敏感曲线非常接近。 图1.11 人眼的视觉系统 图1.12 CIE光照效率曲线亮度是我们对光强反应的笼统描述。人眼的色觉能力是由于人眼里面3类锥状细胞的不同敏感程度所致。每类锥状细胞都有各自的敏感曲线,如图1.13所示。在这3条曲线里,一条
37、是以蓝光为中心,另一条是以绿光为中心,第三条是以黄光为中心 以黄光为中心的曲线常被称为红光曲线,目的是为了与电影和电视系统中采用的三色系统相匹配。问题的关键是存在3类传感器,而不是以某个频率为中心的单独响应曲线。人眼视觉系统具有3类锥状细胞的一个重要结果是电影、视频等大多数图像生成系统支持三基色系统。利用标准的三基色可以近似表示我们感觉到的任何颜色。在第2章中将进一步讨论颜色系统。(a) (b) (c)图1.13 锥状细胞敏感曲线人眼视觉系统对光的前端处理过程采用了与大多数光学设备一样的物理原理,但是人眼视觉系统的后端处理过程比照相机或望远镜的处理过程复杂许多。视觉神经通过一种非常复杂的方式与
38、杆状细胞和锥状细胞相连接,这种连接方式具有高级信号处理器的许多特性。人眼视觉系统对光的最后处理过程是在大脑皮层里完成,大脑皮层是整个大脑的一部分,它具有高级处理功能,如对象识别。我们不讨论高级处理过程,而只是简单地认为是杆状细胞和锥状细胞把图像传送到大脑里。1.5 针孔照相机图1.14是针孔照相机示意图。该图用一个简单的几何模型为我们理解成像原理提供了一个例子。针孔照相机(a pinhole camera)就是这样一个方形盒:盒的一个侧面中心有一个小孔,胶片就放置在盒子里与小孔对应的内表面上。假设把盒沿着z轴放置,把小孔放在坐标原点。假设小孔很小,所以从点光源发出的光只有一条光线能进入小孔。胶
39、片离小孔的距离为d。图1.15是它的侧视图,根据该图可计算出点(x, y, z)成像后在平面z = - d上的位置。根据图1.15中两个三角形的相似关系,可以求得成像点在y轴上的坐标yp:同样方法,利用顶视图,有图1.14 针孔照相机图1.15 针孔照相机的侧视图称点(xp, yp ,- d)为点(x, y, z)的投影点。在理想模型中,胶片上该投影点颜色就是点(x, y, z)的颜色。照相机的视域或视角是允许成像在底片平面上的最大物体所张的角度。可以利用图1.16 如果在三维空间而不是二维平面分析这个问题,则底面的对角长度为h,参见习题1.1。计算出视角,设h为照相机的高度,设为视角,则图1
40、.16 视角理想针孔照相机的景深是无穷远,在视域范围内任何点都在聚焦范围之内。针孔照相机存在两个不足之处:一个是小孔太小,只允许点光源的一条光线进入,这意味几乎没有光进入到照相机;另一个是照相机的视角不能调节。下面转到比较复杂的照相机和其他光学系统,它们使用的透镜都很小。用透镜去替换针孔照相机里的小孔,上述两个问题就迎刃而解了。第一,镜头集聚了比穿过小孔更多的光线。第二,选择合适焦距的透镜相当于选择照相机d的值,可以得到任何角度的视域(最大可以到180),然而透镜的景深不再是无穷远,并不是离镜头任意远的位置都在聚焦范围内。在本章,我们的目的是讨论针孔照相机,它的焦距d就是照相机的正前面到胶片的
41、距离。与针孔照相机一样,计算机图形学把视域内的所有物体成像在图像上。1.6 虚拟照相机模型前面讨论的光学成像系统为我们建立现代三维计算机图形系统模型提供了理论基础。计算机图形系统成像过程与光学系统成像过程相似,我们把这一成像模式称为虚拟照相机模型。考虑图1.17所示的成像系统,我们再次看到被观察的物体和观察者。在本例里,观察者是风箱式照相机 所谓风箱式照相机是指透镜位于照相机的前平面,胶片位于背平面,二者用可伸缩的侧平面相连。因而可以自由地移动照相机的背平面,而不影响前平面。这为照相机成像过程提供了灵活性。我们将在第5章利用这种灵活性。,图像形成在背部平面的胶片上。为了模拟该成像系统的成像过程
42、,需要认识以下几个基本原则。第一,被观察对象独立于观察者。因此可以预料到,在图形库中有各自不同的函数用于定义对象和观察者。图1.17 成像系统第二,利用简单的三角函数公式就可以计算得到成像图像。我们可以非常直观、简洁地推导出这些计算公式。考察图1.18,它是一个照相机和一个对象的侧视图。左图与针孔照相机的侧视图相似。我们把成像的底片移动到透镜的前面就得到右边的图,在三维中这相当于图1.19所示的情形。根据两个三角形的相似关系就可以得到成像图像。从物体上某一点到透镜中心画出一条直线,在该直线上可以找到这一点成像的位置。我们称透镜中心为投影中心,称该直线为投影线。注意到这样的事实,即所有的投影线都
43、通过投影中心。在虚拟照相机系统里,称透镜前面的底片平面为投影平面,成像点就是投影线与投影平面相交的点。在第5章里将详细讨论这个成像过程并推导出相关的计算公式。 (a)成像平面在照相机的背部 (b)成像平面移到照相机的前面图1.18 成像过程的两种等价视图图1.19 用虚拟照相机成像过程我们必须考虑到成像受底片的大小限制。正如前面所看到的,并不是所有的对象都能成像到针孔照相机里的底片平面上,照相机的视角反映了这种受限制程度。在虚拟照相机里,在透镜前面的投影平面上放置一个裁剪矩形(或称裁剪窗口),就可以把这种限制作用移到透镜的前面(如图1.20所示)。给定投影中心、投影平面的位置和朝向以及裁剪窗口
44、的大小,就可以确定哪些物体会出现在图像上。(a)裁剪窗口初始位置 (b)移动裁剪窗口图1.20 裁剪窗口1.7 程序员接口用户与图形系统的交互方式多种多样。对于一个完备的自含的软件包,如在CAD用户群中经常使用的那些软件,用户通过鼠标和键盘等输入设备与显示系统进行交互,得到图像。在一个典型的图形应用程序里,如图1.21所示的“画笔”程序,用户可以看到许多代表一定功能的菜单和图标。用鼠标选择这些菜单和图标,可以控制软件运行并生成图像,而不必编写任何程序。图1.21 “画笔”程序的界面当然必须有人开发这些应用程序的代码。尽管有功能非常强大的商业软件,但是我们之中许多人还是不得不自己编写一些个人的图
45、形应用程序(也许他们乐意这么做)。1.7.1 应用程序开发人员的接口应用程序与图形系统的界面可以用一组函数描述,这组函数存在于某个图形库里。函数的详细使用说明称为应用程序开发人员接口(application programmers interface,简称API)。应用程序开发人员的系统模型如图1.22所示,开发人员看到的只是这些API,因而他们不必了解图形库的硬件和软件的实现细节。从应用程序开发人员的角度来看,API提供的函数在概念上必须与用户希望用来定义图像的模型相一致。图1.22 应用程序开发人员的软件模型1.7.2 笔式绘图仪模型历史上,大多数早期的图形系统都是二维的。现在我们从概念上
46、把这类模型称为笔式绘图仪模型,取这个名字主要与这些系统所用的输出设备有关。一个笔式绘图仪(如图1.23所示)有一个滑动导板,绘图笔安装在这个滑动导板上,这种结构保证绘图笔可以在绘图纸上沿二维正交方向移动。根据要绘制的图像要求,把绘图笔移动到某个位置,并且可以对绘图笔进行提笔和落笔操作。这种笔式绘图仪现在还在使用,它们非常适合于绘制大型设计图。LOGO、GKS和PostScript等API软件包都起源于这种模型。尽管它们特性各异,但其生成图像的过程都相似,即面对一定大小的图纸,用户在二维图纸表面上移动画笔,以在图纸上绘制出所需的图像。图1.23 笔式绘图仪我们可以用两个函数描述这一类的图形系统:
47、moveto(x, y);lineto(x, y);函数moveto()把绘图笔移动到绘图纸上的(x, y)位置,但并不留下任何痕迹;函数lineto()从当前位置到(x, y)画出一条直线,并把绘图笔移动到(x, y)。如果再增加初始化程序和终止程序,以及设置绘图笔颜色和线条粗细等功能,就得到了一个虽然简单但完整的图形系统。下面是这种系统的一个简单的程序片段:moveto(0,0);lineto(1,0);lineto(1,1);lineto(0,1);lineto(0,0);这段程序可以生成图1.24(a)所示的图形。如果在上面程序段的后面增加以下程序代码:moveto(0,1);lineto(0.5,1.866);lineto(1.5,1.866);lineto(1.5,0.866);lineto(1,0);moveto(1,1);lineto(1.5,1.866);就得到如图1.24(b)所示的一个斜投影立方体图像。 (a)一个正方形 (b)一个立方体的投影图1.24 笔式绘图仪的输出根据这种模型建立的图形系统可以很好地解决实际应用中的一些问题,如印刷行业里的页面设置等。页面描述性语言PostScript就是这些思想的进一步推广,它是控制打印机和排字机的标准程序语言。然而我们对三维世界更感兴趣。但是我