[计算机毕设]基于java的画图形学技术系统设计与实现(项目报告+源代码)

项目报告

真实感图形学研究

真实感图形学是计算机图形的核心内容之一,是最能直接反映图形学魅力的分支。

寻求能准确地描述客观世界中各种现象与景观的数学模型,并逼真地再现这些现象与景观,是图形学的一个重要研究课题。很多自然景物难以用几何模型描述,如烟雾、植物、水波、火焰等。本文所讨论的几种建模及绘制技术都超越了几何模型的限制,能够用简单的模型描述复杂的自然景物。

(一)自然景物模拟  

  在计算机的图形设备上实现真实感图形必须完成的四个基本任务。

  1. 三维场景的描述。三维造型。

  2. 将三维几何描述转换成为二维透视图。透视变换。

  3. 确定场景中的所有可见面。消隐算法,可见面探测算法。

  4. 计算场景中可见面的颜色。根据基于光学物理的光照模型计算可见面投射到观察者眼中的光亮度大小和色彩组成。

  其中三维造型技术根据造型对象分成三类:

  ·曲面造型:研究在计算机内如何描述一张曲面,如何对它的形状进行交互式的显示和控制。曲面造型又分成规则曲面造型(如平面、圆柱面等)和不规则曲面两种。不规则曲面造型方法主要有Bezier曲线曲面、B样条曲线曲面和孔斯曲面等。

  ·立体造型。研究如何在计算机内定义、表示一个三维物体。这些方法主要有体素构造法、边界表示法、八叉树法等等。曲面造型和立体造型合称为几何模型造型。

  ·自然景物模拟。研究如何在计算机内模拟自然景物,如云、水流、树等等。本文将主要集中介绍有

关自然景物模拟的有关方法。

  寻求能准确地描述客观世界中各种现象与景观的数学模型,并逼真地再现这些现象与景观,是图形学的一个重要研究课题。很多自然景物难以用几何模型描述,如烟雾、植物、水波、火焰等。本文所讨论的几种建模及绘制技术都超越了几何模型的限制,能够用简单的模型描述复杂的自然景物。

1.1 分形与IFS

  1.1.1 分形几何

  分形(fractal)指的是数学上的一类几何形体,在任意尺度上都具有复杂并且精细的结构。一般来说分形几何体都是自相似的,即图形的每一个局部都可以被看作是整体图形的一个缩小的复本。例如,雪花曲线是一种典型的分形图形,生成方法如下:取一等边三角形,在每一边中间的三分之一处分别生长出一个小的等边三角形,重复上述过程就可以形成图2.1所示的曲线。理论上来说,无限递归的结果是形成了一个有限的区域,而该区域的周长却是无限的,并且具有无限数量的顶点。这样的曲线在数学上是不可微的。

  早在19世纪就已经出现了一些据有自相似特性的分形图形,但最初只是被看作一种奇异现象。本世纪70年代,Benoit B. Mandelbrot最早对分形进行系统研究,并创立了分形几何这一新的数学分支。Mandelbrot扩展了经典欧几里得几何中的维数,提出了分数维的概念。

分形几何并不只是抽象的数学理论。例如海岸线的轮廓,如果考虑其不规则性,同样具有无限的长度。Mandelbrot认为海岸、山脉、云彩和其他很多自然现象都具有分形的特性。因此,分形几何已经成为一个发展十分迅速的科学分支,尤其是在计算机图形学中,成为描述自然景物及计算机艺术创作的一种重要手段。此外,分形在图象压缩方面也有广阔的应用前景。

  1.1.2 仿射变换与迭代函数

  迭代函数系统IFS (Iteration Function System)最早是由Hutchinson于1981年提出的,现已成为分形几何中的重要研究内容之一。IFS是以仿射变换为框架,根据几何对象的整体与局部具有自相似结构,经过迭代而产生的。

  

  1.1.3 基于分形的景物生成

  由IFS码绘出的分形图形具有无穷细微的自相似结构,能对很多客观事物作出准确的反映,这种结构是难于用经典数学模型来描述的。只要变换选取适当,利用IFS就可以迭代地生成任意精度的图形效果,这也是其他绘制方法难以做到的。

1.2 基于文法的模型

  美国科学家Aristid Lindenmayer于1969年提出了一种研究植物形态与生长的描述方法,以他的名字命名为L系统(L-grammars)。1984年,A. R. Smith将L系统应用于计算机图形学中。L系统实际上是一组形式语言,由特定的语法加以描述,这些语法由一系列产生式组成,所有产生式都是直接匹配的。例如,一种典型的L系统语法包括四个字母{A,B,[,]}和两条产生式规则:

  1. A→AA

  2. B→A[B]AA[B]

  从字母A出发,可以迭代地生成A、AA、AAAA等字母序列;从字母B出发,前几步迭代结果如下:

  B

  A[B]AA[B]

  AA[A[B]AA[B]]AAAA[A[B]AA[B]]

  ……

  如果我们把由这种语法规则中的产生式迭代形成的词汇看作是某种图结构的一部分,把方括号中的内容视为前一个符号的分支,则上述文法的三次迭代结果如图2.2所示。在此基础上,适当改变分支的方向,加入随机动因素及在分支的终点绘制出叶子、花、果实等细节,就可以逼地真模拟出现实世界中各种形态的植物。

  当然,上述L系统本身并没有记录任何几何信息,因此基于L系统的建模语言必须能够同时支持文法描述和几何描述;如何对L系统的生长(迭代)过程加以控制也是一个需要进行研究的问题。对此,Reffye、Prusinkiewicz等人分别提出了各自的方法。

  总之,基于文法的L系统用于植物生长过程的模拟是非常成功的,为计算机真实感图形的绘制提供了又一个有力的工具。此外,这种思想也被成功地应用到了电子线路设计和建筑设计等很多方面。

1.3 粒子系统

  Reeves于1983年提出的粒子系统方法是一种很有影响的模拟不规则物体的方法,能够成功地模拟由不规则模糊物体组成的景物。与其他传统图形学方法完全不同,这种方法充分体现了不规则模糊物体的动态性和随机性,从而能够很好地模拟火、云、水、森林和原野等许多自然景象。

  粒子系统的基本思想是采用许多形状简单的微小粒子作为基本元素来表示不规则模糊物体。这些粒子都有各自的生命周期,在系统中都要经历"产生"、"运动和生长"及"消亡"三个阶段。粒子系统是一个有"生命"的系统,因此不象传统方法那样只能生成瞬时静态的景物画面,而可产生一系列运动进化的画面,这使得模拟动态的自然景物成为可能。生成系统某瞬间画面的基本步骤是:

  1. 产生新的粒子;

  2. 赋予每一新粒子一定的属性;

  3. 删去那些已经超过生存期的粒子;

  4. 根据粒子的动态属性对粒子进行移动和变换;

  5. 显示由有生命的粒子组成的图象。

  粒子系统采用随机过程来控制粒子的产生数量,确定新产生粒子的一些初始随机属性,如初始运动方向、初始大小、初始颜色、初始透明度、初始形状以及生存期等,并在粒子的运动和生长过程中随机地改变这些属性。粒子系统的随机性使模拟不规则模糊物体变得十分简便。

(二)消隐及真实感图形生成  

1 消隐

  在计算机图形学中,有三种方式表示三维物体:线框图、消隐图和真实感图。其中真实感图形的生成也要在消隐基础上进行光照处理。所谓消隐就是给定一组三维对象及投影方式(视见约束),判定线、面或体的可见性的过程。根据消隐在间的不同,消隐算法可分为两类:

  · 物体空间的消隐算法,消隐在规范化投影空间中进行,将物体表面的k个多边形中的每一个面与其余的k-1个面进行比较,精确地求出物体上每条棱边或每个面的遮挡关系。这类算法的计算量正比于k2。

  · 图象空间的消隐算法,消隐在屏幕坐标系中进行,对屏幕上的每一个象素进行判断,确定在该象素点上可见的面。若屏幕分辨率为m×n,物体空间中共有k个多边形,则此类算法的的计算量正比于mnk。

  大多数消隐算法都涉及排序和相关性的概念。排序是为了确定消隐对象之间的遮挡关系,通常在X、Y、Z三个方向分别进行。消隐算法的效率在很大程度上取决于排序的效率。相关性是指物体对象或其变换后的图象局部保持不变的性质,在消隐算法中利用相关性是提高排序率的重要手段。

  常用的物体空间消隐算法有多边形区域排序算法和列表优先算法等。

  Z-Buffer (深度缓存)是最简单的图象空间面消隐算法,深度缓存数组的使用避免了复杂的排序过程在分辨率一定的情况下,算法计算量只与多边形个数成正比。该算法也便于硬件实现和并行处理。在此基础上,Z-Buffer扫描线算法利用了多边形边和象素点的相关性,使得算法效率进一步提高。扫描线算法也为简单光照模型提供了良好的消隐基础。

2 简单光照模型及明暗处理

  光照模型(Illumination Model)是根据有关光学定律,计算真实感图形中各点投射到观察者眼中的光线强度和色彩的数学模型。简单的局部光照模型假定光源是点光源,物体是非透明体,不考虑折射,反射

光由环境光、漫反射光和镜面反射光组成。

  基于局部光照模型及明暗处理的阴影生成算法也有很多。阴影是指景物中哪些没有被光源直接照射到的按区。在计算机生成的真实感图形中,阴影可以反映画面中景物的相对位置,增加图形的立体感和场景的层次感,丰富画面的真实感效果。阴影可分为本影和半影两种。本影加上它周围的半影组成软影区。单个点光源照明只能形成本影,多个点光源和线光源才能形成半影。

  对多边形表示的物体,一种计算本影的方法是影域多边形方法,环境中物体的影域定义为视域多面体和光源在景物空间中被物体轮廓多边形遮挡的区域的交集。这种方法的实现可以利用现有的扫描线消隐算法。Athherton等人提出了曲面细节多边形方法,以多边形区域分类的隐藏面消去算法为基础,通过从光源和视点两次消隐生成阴影。

  以上两种阴影生成方法只适用于用多边形表示的景物,无法解决光滑曲面片上的阴影生成问题。为此Williams提出了Z-Buffer方法,首先利用Z-Buffer算法按光源方向对景物进行消隐,然后再用Z-Buffer算法按视线方向进行会制。这种方法可以方便地在理包括光滑曲面的任意复杂的景物,但存储量大,阴影区域附近易产生走样。

3 整体光照模型与光线跟踪

  照射到物体上的光线,不仅有从光源直接射来的,也有经过其它物体反射或折射来的。局部光照模型只能处理直接光照,为了对环境中物体之间的各种反射、折射光进行精确模拟,需要使用整体光照模型。

  相对于局部光照模型,整体光照模型可以表示为Iglobal=KRIR+ KTIT。其中Iglobal为非直接光照对物体上一点光强的贡献;IR为其他物体从视线的反射方向R反射或折射来的光强,KR为反射系数;KT为其

他物体从视线的折射方向T折射或反射来的光强,IT为折射系数。将Iglobal与局部光照模型的计算结果相叠加,就可以得到物体上点的光强。

  光线跟踪算法是典型的整体光照模型,最早由Goldste、Nagel和Appel等人提出,Appel用光线跟踪的方法计算阴影;Whited和Kay扩展了这一算法,用于解决镜面反射和折射问题。算法的基本思想如下:

  对于屏幕上的每个象素,跟踪一条从视点出发经过该象素的光线,求出与环境中物体的交点。在交点处光线分为两支,分别沿镜面反射方向和透明体的折射方向进行跟踪,形成一个递归的跟踪过程。光线每经过一次反射或折射,由物体材质决定的反射、折射系数都会使其强度衰减,当该光线对原象素光亮度的。贡献小于给定的阈值时,跟踪过程即停止。光线跟踪的阴影处理也很简单,只需从光线与物体的交点处向

光源发出一条测试光线,就可以确定是否有其他物体遮挡了该光源(对于透明的遮挡物体需进一步处理光强的衰减),从而模拟出软影和透明体阴影的效果。

  光线跟踪很自然地解决了环境中所有物体之间的消隐、阴影、镜面反射和折射等问题,能够生成十分逼真的图形,而且算法的实现也相对简单。但是,作为一种递归算法其计算量十分巨大。尽量减小求交计

算量是提高光线跟踪效率的关键,常用的方法有:包围盒(entents)、层次结构(hierarchies)及区域分割

(spatial partitioning)等技术。

  光线跟踪是一个典型的采样过程,各个屏幕象素的亮度都是分别计算的,因而会产生走样,而算法本身的计算量使得传统的加大采样频率的反走样技术难以实用。

  象素细分是一种适用于光线跟踪的反走样技术,具体方法是: 首先对每一象素的角点用光线跟踪计算亮度;然后比较各角点的亮度,若差异较大,则将象素细分为4个子区域,并对新增的5个角点用光线跟踪计算亮度;重复比较与细分,直到子区域各角点亮度差异小于给定的阀值为止;最后加权平均求出象素点的显示亮度。

  与象素细分不同,Cook、Porter和Carpenter 提出的分布式光线跟踪是一种随机采样的方法,在交点处镜面反射方向和折射方向所夹的立体角内,按照一定的分布函数同时跟踪若干根光线,然后进行加权平均。Cook等人还提出了利用分布式随机采样技术模拟半影、景深和运动模糊等效果的方法。

  光线跟踪的另一个问题是,光线都是从视点发出的,阴影测试光线则需另外处理,因而无法处理间接的反射或折射光源,例如镜子或透镜对光源所产生的作用就难以模拟。为解决这一问题,可以从光源和视点出发对光线进行双向跟踪。但是,大量从光源出发的光线根本不可能到达屏幕,这使得双向光线跟踪的计算量显著增大,难以实用。Heckbert和Hanrahanr提出的解决方法是只将从光源出发的光线跟踪作为常归光线跟踪的补充;Arvo方法则是对从光源发出进入环境的光线进行预处理;邵敏之和彭群生等人也提出

了基于空间线性八叉树结构的对光源所发出光线进行优化的双向光线跟踪算法。

4 漫反射和辐射度方法

常规光照模型假设物体间的漫反射是一个恒定的环境光,即使双向光线跟踪也只能处理物体间的反射与折射,而不能处理物体间的漫反射。最初由Goral等人于1984年及Nishita等人于1985年提出的辐射度方法是一种基于热能工程的方法,用光辐射的产生和反射代替环境光,从而能够精确处理对象之间的光反射问题。

  辐射度方法将景物和光源视为一个封闭的系统,在系统中光能量是守衡的;并假定构成景物的曲面都是理想的漫反射面。所谓辐射度,是指单位时间内从曲面上单位面积反射出去的光能量,记为B。在理想情况下,可以近似认为逼近曲面的面片上的光强是均匀的,即漫反射各向均匀。根据能量守衡定律

  辐射度方法的主要计算量在于计算形状因子。Cohen和Greenberg提出的半立方体方法是一种近似计算

封闭面形状因子的高效方法。首先以面片i的中心为原点,法向量为Z轴建立一个半立方体,将其五个表面划分成均匀的网格,每个网格单元的微形状因子可以预先求得;然后将场景中所有其他面片都投影到半立方体上,对于多个面片投影到同一个网格单元的情况需在投影方向上进行深度比较,网格单元只保留最近的面片,这一过程相当于Z-Buffer算法;最后将半立方体中所有与面片j相关的网格单元的微形状因子累加,即可得到面片i相对于面片j的形状因子Fij。

   辐射度方法的优点在于算法与视点无关、计算和绘制可以分别独立进行、能够模拟颜色渗透效果等,但无法处理镜面反射与折射。

  在辐射度方法中,面片向特定方向辐射出的光能量仅总辐射度有关,而与所接受能量的方向无关。Immel、Cohen和Greenberg推广了这一方法,每个面片不只计算唯一的辐射度,而是将面片半球空间分割成有限个空间立体角的区域,在每个区域内分别计算输入输出的光能量,通过双向辐射函数计算向某一方向辐射能量的概率,每个顶点的光强可以通过对与视点方向最为接近的若干方向上的辐射度进行插值得到,并最终完成图形生成。这种改进方法可以处理包含镜面和透明物体的复杂场景,但要付出巨大的时间开销和空间开销。

  另一种方案是将辐射度与光线跟踪相结合,仅仅将两种方法的计算结果相加是不够的,必须同时处理漫反射面和镜面之间的光照关系。Wallace、Cohen和Greenberg提出了一种两步方法:第一步执行与视点无关的辐射度方法,辐射度的计算必须考虑镜面,这可以通过镜象法(mirror-world approach)予以模拟;第二步执行基于视点的光线跟踪算法,处理整体镜面反射和折射,并生成图形。算法效率的关键在于第一步,其中镜象法只需处理理想镜面的反射作用,并据此对形状因子加以修正,形状因子的计算量将随镜面数量的增加而显著增加。Sillon和Puech进一步扩展了上述两步法,在第一步时不采用镜象法,而是用递归的光线跟踪来计算形状因子,可以处理具有任意数量镜面及透明体的场景。

5 纹理映射

  纹理映射(Texture Mapping)是通过将数字化的纹理图象覆盖或投射到物体表面,从而为物体表面增加表面细节的过程。纹理图象可以通过采样得到,也可以通过数学函数生成。物体的很多表面细节多边形逼近或其他几何建模的方法是难以表现的,因此纹理映射技术能够使得计算机生成的物体看起来更加逼真自然。

  纹理映射技术最早由Catmull提出,经Blinn和Newell改进后得到广泛应用,成为计算机图形学中的一种重要方法。将纹理映射到物体表面,可以看作是将一个屏幕象素投影到纹理空间的对应区域并计算该区域的平均颜色,以求得真正象素颜色的最佳近似值。具体地说,纹理图象存在于独立的纹理空间中,映射分为两步进行,先将屏幕象素通过四个角点坐标映射到三维物体表面,再进一步映射到纹理空间,形成一个四边形区域,即对屏幕象素映射到三维物体表面上所形成的复杂曲面片的近似。屏幕象素的纹理映射结果可以通过对纹理空间中四边形区域进行累加得到。也可以采用相反的映射方式,即从纹理空间到三维物

体再到屏幕象素进行映射,但这种映射方式需要占用更大的存储空间,更易产生走样,并且无法应用于扫描线算法。

  物体表面的纹理可分为两类:颜色纹理和几何纹理。颜色纹理主要是指同一表面各处呈现出不现的花纹和颜色;几何纹理主要指物体表面在微观上呈现出的起伏不平。上述纹理映射方法只能处理颜色纹理,所生成的物体表面仍然是光滑的。Blinn在纹理映射基础上提出的Bump Mapping方法是一种模拟物体表面粗糙纹理的技术,可以不用对物体的粗糙表面在几何上进行建模就可以改善物体表面的微观结构,如大理石纹理表面雕刻的文字、混凝土墙面等效果。此外,更高级的真实感图形效果如人脸上流淌的汗水也可以通过随时间变化的Bump mapping来模拟。Bump Map是一个二维数组,数组中每个元素是物体表面上一点比

其实际位置略高或略低的偏移向量。这些微小偏移被映射到物体表面一点后修正该点处的法向量,通过修正后的法向量进行光照计算。

  纹理图象和屏幕象素都是离散的采样系统,很容易产生走样,即丢失纹理细节,使表面边界产生锯齿。纹理映射中常用的反走样方法是卷积滤波法。屏幕象素是一个矩形区域,映射到纹理空间上为一任意四

边形,卷积滤波法就是取四边形所覆盖区域的纹理函数的卷积作为屏幕象素的光亮度,可以采用盒形、三角形、高斯分布及样条函数等作为滤波函数。在实际应用中为简化计算,常用正方形、矩形或椭圆等形状近似表示屏幕象素所覆盖的任意四边形区域。卷积滤波法是非线性的,计算量较大,并且不适用于Bump Mapping,因为Bump Mapping的纹理函数与象素的光亮度之间不是线性关系,此时可以使用前置滤波法。前置滤波是在纹理空间中按照不同的分辨率将一定区域内的纹理平均值预先算好,执行映射时只需按照屏幕象素所覆盖的区域大小选取一定的分辨率查表,并作适当线性插值即可。

  以上二维映射在很多情况下都能得到很好的效果,但有时会产生失真,如在三维曲面上仍会呈现出二维效果,以及产生纹理接缝问题等。Peachey和Perlin提出了一种基于实体纹理的方法,用物体上点在三维空间的位置的函数作为纹理,从而更精确地表现木材或大理石等的雕刻效果。

  其他一些材质的表面也可以用适当的方法模拟,如Gardner的透明映射方法可以用简单的形状模拟云彩。此外,很多基于物理模型、随机过程和分形几何等的方法也被用来生成自然纹理。

参考文献

  [1] Donald Hearn, M. Pauline Baker. Computer Graphics C Version, 2nd Edition, 清华大学出版社,  1998

  [2] Alan Watt. 3D Computer Graphics, 2nd Edition. Addison-Wesley, 1993

  [3] 唐荣锡, 汪嘉业, 彭群生等. 计算机图形学教程. 科学出版社, 1994

  [4] 唐泽圣, 周嘉玉, 李新友. 计算机图形学基础. 清华大学出版社, 1995

  [5] 石教英, 蔡文立. 科学计算可视化算法与系统. 科学出版社, 1996

  [6] Donald Hearn, M. Pauline Baker. Computer Graphics C Version, 2nd Edition, 清华大学出版社, 1998

  [7] Alan Watt. 3D Computer Graphics, 2nd Edition. Addison-Wesley, 1993

[8] 计算机图形学基础教程,清华大学出版社,2005

  

               

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

毕业课程设计

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值