第一章 图形系统和应用 计算机图形学的发展和应用 计算机图形学是随着计算机及其外围设备而产生和发展起来的。它是近代计算机科学与雷达,电视及图象处理技术的发展汇合而产生的硕果。在造船,航空航天,汽车,电子,机械,土建工程,影视广告,地理信息,轻纺化工等领域广泛应用,推动了这门学科的不断发展,而不断解决应用中提住的各类新课题,又进一步充实和丰富了这门学科的内容。现在已经发展为对物体的模型和图象进行生成,存取和管理的新学科。 计算机图形学算法的发展 计算机图形学所涉及的算法是非常丰富的,围绕着生成,表示物体的图形图象的准确性,真实性和实时性,其算法大致可分为以下几类。 (1)基于图形设备的基本图形元素的生成算法,如用光栅图形显示器生成直线,圆弧,二次曲线,封闭边界内的填色,填图案,反走样等。 (2)基本图形元素的几何变换,投影变换,窗口裁剪等。 (3)自由曲线和曲面的插值,拟合,拼接,分解,过渡,光顺,整体修改,局部修改等。 (4)图形元素(点,线,环,面,体)的求交与分类以及集合运算。 (5)隐藏线,面消除以及具有光照颜色效果的真实感图形显示。 (6)不同字体的点阵表示,矢量中,西文字符的生成及变换。 (7)山,水,花,草,烟云等模糊景物的生成。 (8)三维或高维数据场的可视化。 (9)三维图形体的实时显示和图形的并行处理。 (10)虚拟现实环境的生成及其控制算法等 多年来,围绕这些算法发表了许多论文和报告,进行了十分热烈的讨论和探索,其中某些算法一日趋完善和成熟,并实现了固化。但很多算法还没有真正解决,还有待我们的努力和奋斗。 1.1.2 计算机图形学的应用 由于计算机图形设备的不断更新和图形软件功能的不断扩充,也由于计算机硬件功能的不断增强和系统软件的不断完善,计算机图形学在近20年内得到了广泛的应用。目前,主要的应用领域有: (1)用户接口。 用户接口是人们使用计算机的第一观感。过去传统的软件中约有60%以上的程序是用来处理与用户接口有关的问题和功能,因为用户接口的好坏直接影响着软件的质量和效率。 (2)计算机辅助设计与制造(CAD/CAM)。 这是一个最广泛,最活跃的应用领域。计算机图形学被用来进行土建工程,结构和产品的设计,包括设计飞机,汽车 ,船舶的外形和发电厂,化工厂等的布局以及电子线路,电子器件等。 (3)科学,技术,及事物管理中的交互绘图。 可用来绘制数学的,物理的,或表示经济信息的各类二,三维图表。 (4)绘制勘探,测量图形。 计算机图形学被广泛地用来绘制地理的,地质的以及其他自然现象的高精度勘探,测量图形。 (5)过程控制及系统环境模拟。 用户利用计算机图形学实现与其控制或管理对象间的相互作用。 (6)电子印刷及办公室自动化。 图文并茂的电子排版制系统代替了传统的铅字排版,这是印刷史上的一次革命。随着图,声,文结合的多媒体技术的发展,可视电话,电视会议以及文字,图表等的编辑和硬拷贝正在家庭,办公室普及。 (7)艺术模拟。 计算机图形学在艺术领域中的应用成效越来越显著,除了广泛用与艺术品的制作,还成功的用来制作广告,动画片,甚至电视电影。 (8)科学计算的可视化。 传统的科学计算的结果是数据流,这种数据流不易理解也不易于检查其中的错误。科学计算的可视化通过对空间数据场构造中间几何图素或用体绘制技术在屏幕上产生二维图象。 (9)工业模拟。 这是一个十分大的应用领域,包含对各种机构的运动模拟和静,动态装配模拟,在产品和工程的设计,数控加工等领域迫切需要。 (10)计算机辅助教学。 计算机图形学已广泛应用于计算机辅助教学系统中,它可以使教学过程形象,直观,生动,极大地提高了学生的学习兴趣和教学效果,本计算机图形学网上演示系统就属于这一领域。 还有许多其他的领域也应用到了计算机图形学,总之,交互式计算机图形学的应用极大地提高了人们理解数据,分析趋势,观察显示或想象形体的能力。随着个人计算机和工作站的发展,随着各种图形软件的不断推出,计算机图形学的应用前景将是更加引人入胜。 系统开发工具-----Java语言简介 Java的诞生 Java是1995年6月由Sun公司引进到我们这个世界的革命性编程语言,它被美国的著名杂志《PC Magazine》评为1995年十大优秀科技产品。之所以称Java为革命性编程语言,是因为传统的软件往往与具体的实现环境有关,一旦环境有所变化就需要对软件做一番改动,耗时耗力,而Java编写的软件能在执行码上兼容。这样,只要计算机提供了Java解释器,Java编写的软件就能在其上运行。 记得采纳啊
汉字图形窗口界面设计方法及函数编程技巧摘要 该文讨论了汉字图形窗口界面设计的一般方法,给出了窗口生成,窗口管理,菜单生成与管理,鼠标与键盘管理等实现的子函数,并给出了部分C语言源程序。这些函数的组合可以设计出丰富的汉字图形窗口界面。一、图形窗口设计函数主要包括窗口生成与管理函数,如窗口生成,窗口打开,窗口关闭,窗口删除等。1.窗口结构定义方法typedef struct gwin {int x0,y0,; /*窗口位置及大小*/int Border; /*窗口边框类型*/int Wcolor; /*窗口背景颜色*/char Wstate; /*窗口状态标志*/char far *Buffer; /*指向窗口缓冲区指针*/}GWIN;在GWIN中,Border为窗口的边框属性,可以根据不同要求设计出多种边框类型业,以美化窗口界面。2.窗口子函数窗口生成子函数:Gwin * GwinCreate(x0,y0,x1,y1,border,color)int x0,y0,x1,y1; /*窗口位置及大小*/BorderMode border; /*窗口边框类型*/int color; /*窗口背景颜色*/窗口显示子函数:GwinDisplay(GWIN *w)w为用GwinCreate生成的窗口指针,即此函数画出窗口。窗口打开子函数:GwinOpen(GWIN * w)此函数调用GwinDisplay来显示窗口,并存储屏幕。窗口关闭子函数:GwinClose(GWIN * w)此函数关闭已打开的窗口,恢复屏幕,但此窗口数据还保存,可再次打开。窗口删除子函数:GwinKill(GWIN * w)此窗口彻底清除窗口,不可重新打开。3.部分程序下面给出实现上述功能的C语言程序/*Windows Create*/#include <>#include <>#include <>#include <>#include <>#include <>#define CR 0x0d#define Esc 0x1b#define Left 0x4b#define Right 0x4d#define Up 0x4d#define Down 0x50#define OPEN 1 /*窗口为打开状态*/#define CLOSE 0 /*窗口为关闭状态*/#define MOUSE 0 /*是否有鼠标移动*//*定义窗口边框类型*/typedef enum {NoBorder,/*普通窗口,系统默认值*/TBorder,/*窗口有凸边框类型*/WBorder,/*窗口有凹边框类型*/TWBorder,/*窗口有凸凹边框类型*/WTBorder,/*窗口有凹凸边框类型*/CBorder,/*窗口有汉字边框类型*/... /*其它窗口类型*/}BorderMode;GWIN * GwinCreate(x0,y0,x1,y1,border,color)int x0,y0,x1,y1;BorderMode border;int color;{GWIN *w;w=malloc(sizeof(GWIN));w->x0=x0;w->y0=y0;w->x1=x1;w->y1=y1;if(border==NoBorder)w->Border=NoBorder;if(border==WBorder)w->Border=WBorder;if(border==TBorder)w->Border=TBorder;if(border==TWBorder)w->Border=TWBorder;if(border==WTBorder)w->Border=WTBorder;if(border==CBorder)w->Border=CBorder;w->Wcoloe=color;w->Buffer=NULL;return(w);}void GwinDisplay(GWIN * w){if(w->Border==NoBorder)DrawGwin(w,NoBorder);if(w->Border==WBorder)DrawGwin(w,WBorder);if(w->Border==TBorder)DrawGwin(w,TBorder);if(w->Border==WTBorder)DrawGwin(w,TWBorder);if(w->Border==TWBorder)DrawGwin(w,TWBorder);if(w->Border==CBorder)DrawGwin(w,CBorder);}void GwinOpen(GWIN * w){if(w->Wstate==OPEN)return 0;w->Buffer=(char far *)malloc((unsigned int))-imagesize(w->x0,w->y0,w->x1,w->y1)-getimage(w->x0,w->y0,w->x1,w->y1,w->Buffer);w->Wstate=OPEN;GwinDisplay(w);}void GwinClose(GWIN * w){if(w->Wstate==CLOSE)return 0;-putimage(w->x0,w->y0,w->Buffer,-GPSET);free((char far *) w->Buffer);w->Wstate=COLSE;}void GwinKill(GWIN * w){if(w->Wstate==OPEN)GwinClose(w);free(w);}二、菜单窗口界面生成与管理子函数1.菜单结构定义说明typedef struct gmenu{GWIN * w; /*含有菜单的窗口*/char * * chstring;/*菜单中汉字串指针*/int xnum;/*水平方向菜单分布项*/int ynum;/*垂直方向菜单分布项*/int hzcolor/*汉字颜色*/int mnow /*光标位置*/int mtotal/*菜单总个数*/}GMENU;2.菜单生成与管理子函数菜单生成子函数:GMENU * MenuCreate(x,y,xnum,ynum,border,hzcolor,bcolor,chstring)int x,y;/*菜单左上角位置*/int xnum,ynum;/*菜单在X,Y方向个数*/BorderMode border;/*菜单边框类型*/int hzcolor; /*汉字颜色*/int bcolor; /*菜单背景颜色*/char * * chstring; /*汉字串*/菜单打开子函数:MenuOpen(GMENU * m)m为用MenuGreate生成的菜单直针。菜单驱动子函数:MenuDrive(GMENU * m)此函数提供用鼠标或键盘选择菜单项的方法。菜单关闭子函数:MenuClose(GMENU *m)此函数关闭已打开的菜单,恢复屏幕,但此菜单数据还保存,可再次打开。菜单删除子函数:MenuKill(GMENU * m)此菜单被彻底清除,不可重新打开。3.实现上述功能子函数的源程序代码GMENU * MenuCreate(x,y,xnum,ynum,border,hzcolor,bcolor,chstring)int x,y,xnum,ynum;BorderMode border;int hzcolor,bcolor;char * * chstring;{GWIN *w,GMENU *m;m=malloc(sizeof(GMENU));m->=chstring=chstring;m->=xnum=xnum;m->=ynum=ynum;m->=hzcolor=hzcolor;m->=mnow=1m->=mtotal=Number_of_Menu(m->=chstring);w=(GWIN *)GwinCreate(x,y,x+xnum * Longest(chstring),y+(ynum-1)+C0,border,bcolor);m->=w=wreturn m;}其中,Number_of_Menu(string)为求串中菜单项个数的函数,Longest(string)为求串中最长项长度的函数。其它子函数可参照窗口函数设计出,此处限于篇幅,不再给出。三、下拉式菜单设计方法有了第一,第二节的窗口设计及菜单设计函数,可以很方便的定义出下拉式及弹出式菜单,菜单可以层层嵌套,主子关系及热键可以自由定义,有了窗口及菜单函数,可以组合设计出风格迥异的应用程序界面。本节的子函数包括:根菜单生成(主菜单)、下拉式菜单生成、菜单连接、菜单初始化、菜单驱动、菜单关闭、菜单删除。1.下拉式菜单结构定义方法typedef struct pmenu{GMENU * m;/*定义菜单*/int pstate; /*下拉式菜单状态*/int pid; /*菜单标识码*/struct pmenu *Father; /*定义父菜单*/struct pmenu *Son /*定义子菜单*/char hotkey[MaxSon+1];/*定义热键*/}PMENU;2.下拉式菜单生成与管理子函数根菜单生成子函数:PMENU *Proot(pid,x,y,border,hzcolor,bcolor,chstring)int pid;/*根菜单标识码,一般为000*/int x,y;/*菜单在X,Y方向个数*/BorderMode border;/*菜单边框类型*/int hzcolor;/*汉字颜色*/int bcolor;/*菜单背景颜色*/char * * chstring;/*汉字串*/下拉式菜单生成子函数:PMENU *Pcreate(pid,x,y,border,hzcolor bcolor,chstring参数含义同上,pid值一般取为100,200,300等,利用此函数可生成普通弹出式菜单。菜单连接子函数:void Plink(PMENU * p1,int n,PMENU * p2)此函数建立两个菜单p1,p2之间的主次关系,p1为父菜单,p2为子菜单,执行此菜单,则把p2挂在了p1的第n个菜单项上。下拉式菜单初始化子函数:Pint();菜单关闭子函数:Pclose();菜单删除子函数:Pkill();菜单中定义热键子函数:HotKey(PMENU *p1,int n,int Vascii);PMENU *p1;/*下拉式菜单p1*/int n;/*菜单p1中菜单个数*/int Vascii;/*定义热键的ASCII码值*/利用此函数可定义弹出式菜单p1中任意项n的键盘热键,该键的ASCII码值为Vascii。3.实现上述功能子函数的源程序代码PMENU *RP,*CP;pmenu * Proot(pid,x,y,border,hzcolor,bcolor,chstring)int pid,x,y;BorderMode border;int hzcolor,bcolor;char * * chstring;{PMENU *p;int i;RP=CP=malloc(sizeof(PMENU));p->pstate=CLOSE;p->pid=pid;p->m=MenuCreate(x,y,Num_of_Menu(chstring),1,border,hzcolor,bcolor,chstring);p->father=NULL;for(i=1;i
计算机图形学(Computer Graphics,简称CG)是一种使用数学算法将二维或三维图形转化为计算机显示器的栅格形式的科学。 简单地说,计算机图形学的主要研究内容就是研究如何在计算机中表示图形、以及利用计算机进行图形的计算、处理和显示的相关原理与算法。图形通常由点、线、面、体等几何元素和灰度、色彩、线型、线宽等非几何属性组成。从处理技术上来看,图形主要分为两类,一类是基于线条信息表示的,如工程图、等高线地图、曲面的线框图等,另一类是明暗图,也就是通常所说的真实感图形。 计算机图形学一个主要的目的就是要利用计算机产生令人赏心悦目的真实感图形。为此,必须建立图形所描述的场景的几何表示,再用某种光照模型,计算在假想的光源、纹理、材质属性下的光照明效果。所以计算机图形学与另一门学科计算机辅助几何设计有着密切的关系。事实上,图形学也把可以表示几何场景的曲线曲面造型技术和实体造型技术作为其主要的研究内容。同时,真实感图形计算的结果是以数字图象的方式提供的,计算机图形学也就和图象处理有着密切的关系。 图形与图象两个概念间的区别越来越模糊,但还是有区别的:图象纯指计算机内以位图形式存在的灰度信息,而图形含有几何属性,或者说更强调场景的几何表示,是由场景的几何模型和景物的物理属性共同组成的。 计算机图形学的研究内容非常广泛,如图形硬件、图形标准、图形交互技术、光栅图形生成算法、曲线曲面造型、实体造型、真实感图形计算与显示算法,以及科学计算可视化、计算机动画、自然景物仿真、虚拟现实等
GPU光线跟踪算法加速结构研究摘要:基于GPU的光线跟踪算法是当前图形学研究的一个热点,也是将来用于广告、电影、游戏等娱乐产业的关键技术。本文论述了如何对基于GPU的光线跟踪算法进行实现,以及利用各种加速结构,加速算法实现,提高算法执行效率,并对各种加速结构的效果进行了比较研究。关键词:GPGPU 光线跟踪 BVH KD-Tree1.引言近年来,CPU无论在运算能力,还是在可编程性上都得到了大幅的提高,GPU已经在需要大量运算的密集运算领域发挥了举足轻重的作用。各种基于CPU的密集运算被移植到GPU上,以利用GPU巨大的运算能力,加速整个算法的运算过程。光线跟踪算法是生成真实感图形的一种非常重要的方法,在电影、游戏、广告等产业,获得广泛的应用,而光线跟踪算法也是典型的密集运算算法,利用原始的基于CPU的光线跟踪渲染一幅图片是非常耗时的操作。因此,如果能够将CPU上的光线跟踪算法,映射到CPU上,加速光线跟踪算法的执行时间,将会带来巨大的经济效益。因此,基于CPU的光线跟踪算法已成为国内外科研人员的研究热点。2.基于GPU的光线跟踪 相关工作当前,主要由两种方法利用CPU来加速光线跟踪算法。第一种是Carr等人提出来的,将CPU转换为一个蛮力的执行光线一三角形求交的计算器,而将任何的光线生成以及着色过程在CPU上完成。这就需要CPU依然执行绝大部分的渲染工作。C arr等人指出,在ATI Radeon 8500上,每秒最快能够执行1亿2千万次的光线一三角形求交。同时,作者也指出,由于GPU的单精度浮点的限制,图片上依然存在一些不太真实的地方。第二种方法由Purcell等人提出的,改种方法将整个光线跟踪器都移植到CPU上进行实现。从光线的产生,加速结构的遍历,到最后的着色过程都在GPU上执行。此后,有很多相同的项目都是基于Purcell的模型上进行的。 GPU上的光线跟踪算法的映射方式将传统的CPU上执行的光线跟踪算法,映射成为一个GPU协助的,或者基于GPU的光线跟踪器有众多方法。下面重点介绍Purcell提出的映射模型,以及在本文的实现中提出的一个基于CPU的Whitted模型的光线跟踪器。该光线跟踪器的布局如图所示:在Purcell的论文中,它将光线一三角形求交,以及遍历过程分离成两个独立的遍历内核和求交内核。本文的实现中,也按照上述模型图,将光线跟踪算法分解成光线生成,光线一三角形求交,着色这三个步骤。在对光线进行跟踪之前,需要生成从视点指向屏幕的原始光线( primary ray)。在一个GPU上,能够使用光栅器的插值的能力,在一个单一的内核调用中,产生所有的原始光线。给定观察矩形(被采样用于产生图片的投影平面的一部分)的四个角,以及视点,首先计算出这个视锥体的四条边线。如果让光栅器在这4条光线之间,按照512×512规格,在这四条光线之间按照方向进行插值,最终就可以获得能够产生一幅512×512图片(一个像素一个采样点)的所有原始光线的方向。同时能够将这些方向存储在一个纹理里,并把它作为求交内核的输入。所有的原始光线具有相同的起始点,但是仍然把它存储在一个同方向纹理具有相同维度的纹理内。因为当生成阴影光线或者反射光线的时候,光线的原点会发生改变。求交内核把光线的原点,方向,以及场景的描述作为输入数据。在内核被调用数次之后,我们对于每一个像素输出一个击中记录。如果一条光线击中了场景中的某个三角形,返回击中点的3个重心坐标,以及相关的被击中的三角形。此外,还将输出被发现的交点沿光线的距离,以及被击中三角形的材质。这就需要使用5个浮点数值组成一个击中记录。纹理只能够支持4个颜色通道( RCBA),所以,如果能把击中记录裁减到4个值,那么将是非常有益的。观察发现,只需要3个重心坐标的两个,因为在三角形内部,它们相加的和总是1。这就使得在一个单独的RGBA纹理中存储交点记录是可行的,并且它的维度同其它两个光线纹理的维度相同。Moller和Trumbore提出了一个高效的光线一三角形求交算法,使用这个算法,并利用CPU在向量计算上的优势来进行求交计算。下面列出了求交的代码,这个代码也展示了如何利用向量指令来提高效率。当所有的原始光线都已经计算出了相交的状态的时候,就能够查询着色过程所需要的表面法线和材质的信息。每一个击中记录都存储了一个指向材质纹理的索引,这个材质纹理包含了三角形的法线,材质颜色以及类型。三个顶点的法线根据击中记录的中心坐标进行了插值。最终的颜色能够按(N-L)C进行计算,此处Ⅳ是法线,L是光源的方向,G是三角形的颜色。现在根据击中的三角形所具有的材质的类型(漫反射材质,或者镜面反射材质),需要产生二次光线,以此来计算阴影和反射。1)如果一条光线射出场景之外,像素就被赋予全局的背景颜色。2)如果一条光线击中了一个漫反射材质表面,就发射一条阴影射线( shdow ray)。这些光线的起始点在击中点,方向为从击中点指向光源。3)如果一条光线击中了一个镜面反射材质表面。就发射一条镜面反射光线。镜面发射光线的起始点也在击中点,但是它的方向是在击中点处关于入射光线和插值后的法线对称的方向。一个真正的Whitted类型的光线跟踪器也支持透明材质,从而能够产生折射光线。但由于主要是研究加速结构,所以在本文的实现中,没有考虑折射光线。4)如果阴影光线击中了某个几何体,这就说明在光源和击中点之间,存在某个几何体,所以这个像素就应该是黑色(处于阴影中)。当跟踪阴影光线的时候,不关心最近的那个击中点,更加关心的是是否存在这样的击中点。因此,当有一个交点被发现,就可以停止整个求交过程,从而加速算法的处理过程。在本文的实现中,以相同的方式跟踪阴影光线和反射光线,因此,就没有使用到这个优化策略。已经对每一个像素产生了正确二次光线,如果需要,就能够执行另外一趟遍历/求交过程,对上述的二次光线进行跟踪。每一次调用着色程序就能够对每一个像素返回一个颜色值和一条新的光线。着色内核也可以将前一次着色程序的输出当作本次着色程序的输入。这就使得能够在跟踪连续的光线的时候合并这些连续的镜面反射的颜色。同Carr等人的程序不同,本文所采用的程序不存在浮点精度太低的问题,因为Ceforce 7300在整个管线中支持真正的32位浮点操作。3.加速结构的实现和比较均匀栅格均匀栅格是第一个在GPU上实现的加速结构。Purcell给出了很多选择均匀栅格作为加速结构的理由,但是Purcell没有详细的说明为什么均匀网格对于硬件实现而言比其它的加速结构要更加的简单。当在探讨了均匀栅格的一些主要特性的时候,更加清晰的知道了均匀栅格为什么会成为一个好的GPU机速结构。首先,只用使用简单的算术运算,就能够对于每个体素的遍历在常量时间能被定位和存取。这就消除了对树的遍历的需要,以及重复的纹理查找工作,而纹理查找是相当耗时的。其次,体素的遍历是通过递增算术运算来完成的。这就消除了对堆栈的需要,使得我们能够从光线的起始点开始,以距离递增的顺序访问体素成为可能。再其次,由于对于体素的访问是沿着光线,以距离递增的方式遍历的,所以,一旦在一个被访问的体素中报道发现有一个交点,就可以停止这条光线对体素的遍历过程,从而提高整个遍历过程的速度。最后,用于遍历的代码非常适合用向量编写,而向量形式的编码风格又非常适合GPU的指令集。然而,均匀栅格的缺点就是由于它是空间细分结构的一种特殊情况,多个体素可能包含相同三角形的多个引用。由于无法使用mailbox技术,这就意味着需要对于相同的光线和三角形之间进行不止一次的相交测试。 KD-tree最近,Havran等人对基于CPU的光线跟踪算法的加速结构进行了比较,得出的结论是对于众多不同类型的测试场景,平均而言,KD-tree是最快的。所以,有必要考察一下对于基于KD-tree的GPU光线跟踪算法,是否也会有相似的结论。就像均匀栅格一样,KD-tree也是一种空间细分结构。同均匀网格不同的是,KD-tree利用一个二叉树将场景表示成一个层次结构。在二叉树中,我们将内部节点和叶子节点区分开。叶子节点用来表示体素和与之相关的保存在该体素内的三角形的引用。一个内部节点用来表示空间区域的某个部分。所以,内部节点包含一个分裂面的两个子树的引用,而叶子节点只包含一个三角形列表。KD-tree的创建过程从上而下,根据一个评价函数,通过放置一个分离平面,递归的将场景分离成两个体素。我们能够以递归的方式遍历KD-tree,但是由于GPU没有堆栈结构,所以无法应用递归的策略。取而代之的是,我们能够通过记住我们沿着光线前进了多远来向上或者向下遍历树。这种策略消除了需要堆栈的限制,使得用CPU来完成对KD-tree结构的遍历成为可能。当使用GPU对KD-tree进行遍历的时候,KD-tree像均匀栅格那样被表示成一个纹理的集合。这就意味着有一个保存树数据的纹理,一个保存三角形列表的纹理,和一个保存实际的三角形数据的纹理。GPU的遍历首先调用一个初始化内核,然后按照需要,多次调用合并后的遍历和求交内核。 包围体层次(BVH)给定一些随机的光线,通过计算遍历包围体层次的平均花费,就可以测量出该包围体层次的质量。迄今为止,还没有构建最优的包围体层次的算法,也就是说,如何准确的测量一个包围体层次的平均遍历时间还不是很明显。Goldsmith和Salmon提出了一个评价函数,通常被称为表面积启发式函数。他们通过父节点和孩子节点的表面积之比来形式化的表述这个关系,此评价函数如下所示:此处,hit(n)是光线击中节点n的情况,Sn是节点n的表面积,c和p分别表示父节点和孩子节点。这个评价函数给出了,当用一条随机的光线同层次结构求交的时候,成本上的估计。由于没有最优的方法去有效的构造一个最优的BVH,提出了不同的构造技巧。下面,将列出比较通用的方法。在实践中,对于包围体应用的最广泛的就是轴对齐包围盒(AABB)。AABB易于实现,并且同光线的求交测试非常快。大多数有关BVH的论文在描述BVH的创建的时候,通常分别以Kay和Kajiya,或者Goldsmith和Salmon这两种基本的想法为基础。Kay和Kajiaya建议以自上而下递归的方式进行BVH的创建。Goldsmith和Salmon提出了一个更加复杂的自底向上的构造方式。Goldsmith和Salmon指出,BVH的质量同作为输入传人的三角形的顺序有关。因此,他们建议在构造BVH之前,随机打乱三角形的顺序。下述算法就是利用Kay/Kajiya的思想创建某个场景的包围体层次的方法:4.结束语本文成功的在GPU上实现了用于光线跟踪算法中的各种加速结构,并对这些加速结构在GPU上的加速效果进行了比较。均匀栅格作为第一个在CPU上实现的光线跟踪器的加速结构,也被证明是最慢的,除非是只包含一个单独的物体的场景的情况。均匀栅格不适合几何体的密度非常高的场景。另外,对于均匀栅格的CPU上的遍历表示,也需要大量的数据。Foley和Sugerman认为,对于大多数场景,KD-tree的效率要比均匀栅格高。但是,在KD-tree的遍历过程中,无论是重置阶段还是回退阶段,片元程序都非常的复杂,但这种复杂性也使得其能够在场景的几何体的密度改变的时候做出适当的调整。本文实现的BVH被证明在加速效果上要超过均匀栅格和KD-tree,在现阶段,BVH是在GPU上实现的最快的加速结构。并且在GPU上实现BVH加速结构要比实现其他加速结构更加的简单。参考文献:[1]Randima Femado编,姚勇,王小琴译.GPU精粹一实时图形编程的技术,技巧和技艺[M].北京:人民邮电出版社,2006.[2] Matt Pharr编著,龚敏敏译.GPU精粹2-高性能图形芯片和通用计算编程技巧[M].北京:清华大学出版社.[3]昊恩华,柳有权.基于图形处理器(GPU)的通用计算叨.计算机辅助设计与图形学学报,2004,16(5): 601-[4] Philip ,David 著,周长发译,计算机图形学几何工具算法详解[M].北京:电子工业出版社,2005.[5] Martin Christen. Implementing ray tracing on GPU. Master´sthesis, University of Applied Sciences Basel,
基于VxWorks的bootrom代码改进摘要:在WindRivet公司开发的VxWorks嵌入式操作系统平台上,改进交换机产品bootrotn软件的实现方式;给出实现方法和改进目的,为BSP开发人员提供一套全新的bootrom实现方案。关键词:VxWorks嵌入式操作系统BSPbootrotn软件分类号:文献标识码:文章编号:栏目信息:技术纵横
同志你好: 一下是我给你总结的资料,请核对后使用。 最后祝你工作愉快!计算机图形学 计算机图形学(Computer Graphics,简称CG)是一种使用数学算法将二维或三维图形转化为计算机显示器的栅格形式的科学。 简单地说,计算机图形学的主要研究内容就是研究如何在计算机中表示图形、以及利用计算机进行图形的计算、处理和显示的相关原理与算法。图形通常由点、线、面、体等几何元素和灰度、色彩、线型、线宽等非几何属性组成。从处理技术上来看,图形主要分为两类,一类是基于线条信息表示的,如工程图、等高线地图、曲面的线框图等,另一类是明暗图,也就是通常所说的真实感图形。 计算机图形学一个主要的目的就是要利用计算机产生令人赏心悦目的真实感图形。为此,必须建立图形所描述的场景的几何表示,再用某种光照模型,计算在假想的光源、纹理、材质属性下的光照明效果。所以计算机图形学与另一门学科计算机辅助几何设计有着密切的关系。事实上,图形学也把可以表示几何场景的曲线曲面造型技术和实体造型技术作为其主要的研究内容。同时,真实感图形计算的结果是以数字图像的方式提供的,计算机图形学也就和图像处理有着密切的关系。 图形与图像两个概念间的区别越来越模糊,但还是有区别的:图像纯指计算机内以位图形式存在的灰度信息,而图形含有几何属性,或者说更强调场景的几何表示,是由场景的几何模型和景物的物理属性共同组成的。 计算机图形学的研究内容非常广泛,如图形硬件、图形标准、图形交互技术、光栅图形生成算法、曲线曲面造型、实体造型、真实感图形计算与显示算法、非真实感绘制,以及科学计算可视化、计算机动画、自然景物仿真、虚拟现实等。 计算机图形学的发展 1963年,伊凡•苏泽兰(Ivan Sutherland)在麻省理工学院发表了名为《画板》的博士论文, 它标志着计算机图形学的正式诞生。至今已有三十多年的历史。此前的计算机主要是符号处理系统,自从有了计算机图形学,计算机可以部分地表现人的右脑功能了,所以计算机图形学的建立具有重要的意义。近年来, 计算机图形学在如下几方面有了长足的进展: 1、智能CAD CAD 的发展也显现出智能化的趋势,就目前流行的大多数CAD 软件来看,主要功能是支持产品的后续阶段一一工程图的绘制和输出,产品设计功能相对薄弱, 利用AutoCAD 最常用的功能还是交互式绘图,如果要想进行产品设计, 最基本的是要其中的AutoLisp语言编写程序,有时还要用其他高级语言协助编写,很不方便。而新一代的智能CAD 系统可以实现从概念设计到结构设计的全过程。例如,德国西门子公司开发的Sigraph Design软件可以实现如下功能:① 从一开始就可以用计算机设计草图,不必耗时费力的输入精确的坐标点,能随心所欲的修改,一旦结构确定,给出正确的尺寸即得到满意的图纸;② 这个软件中具有关系数据结构, 当你改变图纸的局部,相关部分自动变化,在一个视图上的修改,其他视图自动修改,甚至改变一个零件图,相关的其它零件图以及装配图的相关部分自动修改:③ 在各个专业领域中,有一些常用件和标准件, 因此,希望有一个参数化图库。而Sigraph不用编程只需画一遍图就能建成自己的图库;④Sigraph还可以实现产品设计的动态模拟用于观察设计的装置在实际运行中是否合理等等。智能CAD的另一个领域是工程图纸的自动输入与智能识别,随着CAD技术的迅速推广应用,各个工厂、设计院都需将成千上万张长期积累下来的设计图纸快速而准确输入计算机,作为新产品开发的技术资料。多年来,CAD 中普遍采用的图形输入方法是图形数字化仪交互输入和鼠标加键盘的交互输入方法.很难适应工程界大量图纸输入的迫切需要。因此, 基于光电扫描仪的图纸自动输入方法已成为国内外CAD工作者的努力探索的新课题。但由于工程图的智能识别涉及到计算机的硬件、计算机图形学、模式识别及人工智能等高新技术内容,使得研究工作的难点较大。工程图的自动输入与智能识别是两个密不可分的过程,用扫描仪将手绘图纸输入到计算机后,形成的是点阵图象. CAD 中只能对矢量图形进行编辑, 这就要求将点阵图象转化成矢量图形.而这些工作都让计算机自动完成.这就带来了许多的问题.如① 图象的智能识别;② 字符的提取与识别;③ 图形拓扑结构的建立与图形的理解;④实用化的后处理方法等等。国家自然科学基金会和863计划基金都在支持这方面的研究, 国内外已有一些这方面的软件付诸实用,如美国的RVmaster,德国的VPmax, 以及清华大学,东北大学的产品等。但效果都不很理想.还未能达到人们企盼的效果。 2 计算机美术与设计 2.1 计算机美术的发展 1952年.美国的Ben .Laposke用模拟计算机做的波型图《电子抽象画》预示着电脑美术的开始(比计算机图形学的正式确立还要早)。计算机美术的发展可分为三个阶段: (1)早期探索阶段(1952 1968年)主创人员大部分为科学家和工程师,作品以平面几何图形为主。1963年美国《计算机与自动化》杂志开始举办年度“计算机美术比赛”。 代表作品:1960年Wiuiam Ferrter为波音公司制作的人体工程学实验动态模拟.模拟飞行员在飞机中各种情况;1963年Kenneth Know Iton的打印机作品《裸体》。1967年日本GTG小组的《回到方块》。 (2)中期应用阶段(1968年~1983年)以1968年伦敦第一次世界计算机美术大展一“控制论珍宝 (Cybernehic Serendipity1为标志,进入世界性研究与应用阶段;计算机与计算机图形技术逐步成熟, 一些大学开始设置相关课题, 出现了一些CAD应用系统和成果, 三维造型系统产生并逐渐完善。代表作品:1983年美国IBM 研究所Richerd Voss设计出分形山(可到网站“分形频道hrtp:ttfracta1.126.tom 中查找有关“分形”的知识) (3)应用与普及阶段(1984年~现在)以微机和工作站为平台的个人计算机图形系统逐渐走向成熟, 大批商业性美术(设计)软件面市; 以苹果公司的MAC 机和图形化系统软件为代表的桌面创意系统被广泛接受,CAD成为美术设计领域的重要组成部分。代表作品:1990年Jefrey Shaw的交互图形作品“易读的城市f The legible city) 。 2.2 计算机设计学(Computer Des i gn i cs) 包括三个方面:环境设计(建筑、汽车)、视觉传达设计(包装)、产品设计。 CAD对艺术的介入,分三个应用层次: (1)计算机图形作为系统设计手段的一种强化和替代; 效果是这个层次的核心(高精度、高速度、高存储)。 (2)计算机图形作为新的表现形式和新的形象资源。 (3)计算机图形作为一种设计方法和观念。 3 计算机动画艺术 3.1 历史的回顾 计算机动画技术的发展是和许多其它学科的发展密切相关的。计算机图形学、计算机绘画、计算机音乐、计算机辅助设计、电影技术、电视技术、计算机软件和硬件技术等众多学科的最新成果都对计算机动画技术的研究和发展起着十分重要的推动作用50年代到60年代之间,大部分的计算机绘画艺术作品都是在打印机和绘图仪上产生的。一直到60年代后期,才出现利用计算机显示点阵的特性,通过精心地设计图案来进行计算机艺术创造的活动。 70年代开始.计算机艺术走向繁荣和成熟 1973 年,在东京索尼公司举办了“首 届国际计算机艺术展览会”80年代至今,计算机艺术的发展速度远远超出了人们的想象 在代表计算机图形研究最高水平的历届SIGGRAPH年会上,精彩的计算机艺术作品层出不穷。另外,在此期间的奥斯卡奖的获奖名单中,采用计算机特技制作电影频频上榜,大有舍我其谁的感觉。在中国,首届计算机艺术研讨会和作品展示活动于1995年在北京举行 它总结了近年来计算机艺术在中国的发展,对未来的工作起到了重要的推动作用 3.2 计算机动画在电影特技中的应用 计算机动画的一个重要应用就是制作电影特技 可以说电影特技的发展和计算机动画的发展是相互促进的。1987年由著名的计算机动画专家塔尔曼夫妇领导的MIRA 实验室制作了一部七分钟的计算机动画片《相会在蒙特利尔》 再现了国际影星玛丽莲•梦露的风采。1988年,美国电影《谁陷害了兔子罗杰》 (Who Framed Roger Rabbit?)中二维动画人物和真实演员的完美结合,令人膛目结舌、叹为观止 其中用了不少计算机动画处理。1991年美国电影《终结者II:世界末日》展现了奇妙的计算机技术。此外,还有《侏罗纪公园》(Jurassic Park)、《狮子王》、《玩具总动员》(Toy Story)等。 3.3 国内情况 我国的计算机动画技术起步较晚。1990年的第11届亚洲运动会上,首次采用了计算机三维动画技术来制作有关的电视节目片头。从那时起,计算机动画技术在国内影视制作方面得到了讯速的发展, 继而以3D Studio 为代表的三维动画微机软什和以Photostyler、Photoshop等为代表的微机二维平面设计软件的普及,对我国计算机动画技术的应用起到了推波助谰的作用。 计算机动画的应用领域十分宽广 除了用来制作影视作品外, 在科学研究、视觉模拟、电子游戏、工业设计、教学训练、写真仿真、过程控制、平面绘画、建筑设计等许多方面都有重要应用,如军事战术模拟 4 科学计算可视化 科学计算的可视化是发达国家八十年代后期提出并发展起来的一门新兴技术,它将科学计算过程中及计算结果的数据转换为几何图形及图象信息在屏幕上显示出来并进行交互处理,成为发现和理解科学计算过程中各种现象的有力工具。 1987年2月英国国家科学基金会在华盛顿召开了有关科学计算可视化的首次会议。会议一致认为“将图形和图象技术应用于科学计算是一个全新的领域” 科学家们不仅 需要分析由计算机得出的计算数据,而且需要了解在计算机过程中数据的变化。会议将这一技术定名为“科学计算可视化(Visualization in Scientific Computing)”。科学计算可视化将图形生成技术图象理解技术结合在一起, 它即可理解送入计算机的图象数据.也可以从复杂的多维数据中产生图形。它涉及到下列相互独立的几个领域:计算机图形学、图象处理、计算机视觉、计算机辅助设计及交互技术等。科学计算可视按其实现的功能来分, 可以分为三个档次:(1)结果数据的后处理;(2)结果数据的实时跟踪处理及显示;(3)结果数据的实时显示及交互处理。 4.1 国外科学计算可视化现状 (1)分布式虚拟风洞 这是美国国家宇航局(Ames)研究中心的研究项目,包括连接到一台超能计算机上的两个虚拟屏幕。这一共享的分布式虚拟环境用来实现三维不稳定流场。两个人协同工作, 可在一个环境中从不同视点和观察方向同一流场数据。 (2)PHTHFINDER 这是美国国家超级计算机应用中心(NCSA)的研究项目. 是在交互分布环境下研究大气流体的软件。PHTHFINDER通过多个相联系的模型来研究暴风雨。 (3)狗心脏CT数据的动态显示 这也是NCSA的研究项目,它利用远程的并行计算资源.用体绘制技术实现CT扫描三维数据场动态显示。其具体内容是显示一个狗的心脏跳动周期的动态图像。 (4)燃烧过程动态模型的可视化 这是美国西北大学的研究项目.可以显示发生在非烧热的气体燃烧中复杂的空问瞬态图象。火焰位于两个同心圆柱之间.可燃混合气体从内圆柱注入,燃烧所生成的物质通过外圆柱送出。 (5)胚胎的可视化 依利诺大学芝加哥分校研制了一个在工作站和超级计算机上实现的可视亿应用软件。其内容是对一个七周的人类胚胎实现交互的三维显示, 是由卫生和医学国家博物馆所得到的数据重构而成的。这一项目表示了对人类形态数据实现远程访问和在网络资源中实现分布计算的可能性。最近美国还将做整个人体的可视化, 他们将两个自愿者(一男一女)做成了切片,男的被切了1780片, 厚度约1毫米,女的被切了5400片, 厚度约O.3毫米,数据量很大。概括起来有以下几点: (1)科学计算可视化技l术在美国的著名国家实验室及大学中已经从研究走向应用,应用范围涉及天体物理、生物学、气象学、空气动力学、数学、医学图象等领域。科学计算可视化的技术水平正在从后处理向实时跟踪和交互控制发展。 (2)美国在实现科学计算可视化时, 已经将超级计算机、光纤高速网、高性能工作站及虚拟环境四者结合起来,显示了这一领域技术发展的重要方向。就三维数据场的显示算法而言,当数据场分布密集而规则时(如cT扫描数据)多采用体绘制技术,这种算法效果好,但计算费时。对于数据场分布稀疏,或分布不规则的应用领域, 如天体物理、气象学多采用构造中间几何图象的方法,这种方法生成图象速度快,较易作到实时交互处理。 5 虚拟现实 “虚拟现实”(Virbual ReMity)- 词是由美国喷气推动实验室(VPL)的创始人拉尼尔(Jaron Lanier)首先提出的 在克鲁格(Myren Kruege)70年代中早期实验里.被称为 人工现实”(Artificial reality);而在吉布森(William Gibson)l984 年出版的科幻小说Neuremanccr里,又被称为“可控空间”(Cyberspaee)。虚拟现实, 也育人称之为虚拟环境(Virtual Environment)是美国国家航空和航天局及军事部门为模拟而开发的一门高新技术 它利用计算机图形产生器,位置跟踪器,多功能传感器和控制器等有效地模拟实际场景和情形,从而能够使观察者产生一种真实的身临其境的感觉虚拟环境由硬件和软件组成,硬件部分主要包括:传感器(Sensors)、印象器(Efeeter)和连接侍感器与印象器 产生模拟物理环境的特殊硬件。利用虚拟现实技术产生虚拟现实环境的软件需完成以下三个功能:建立作用器(Actors)以及物体的外形和动力学模型:建立物体之间以及周围环境之间接照牛顿运动定律所决定的相互作用;描述周围环境的内容特性 5.1 虚拟现实技术的应用 5.用于脑外科规划的双手操作空间接口工具 最近,美国弗尼亚大学推出了一种能用于脑外科规划的被称为Netra的双手操作空间接口工具 根据脑外科医生的工作环境和习惯,该系统采用一种外形象人头的控制器。脑外科医生可以根据他们的职业习惯,通过转动外形象人头的控制器, 来方便地观察人脑的不部位, 同时通过右手控制面板的平面来控制人脑的剥面的扫描井能根据CT或强磁共振图像所产生的主体脑模型显示所需得到观察视点着色后的真实图像 5.1.2虚拟环境用于恐高症治疗 英国研制的一个虚拟现实系统可以产生以下虚拟环境:① 透明的玻璃电梯,② 高层建筑阳台.@位于蛱咎之上的索桥。为了增加真实的感觉,患者除了佩戴能够产生三维立体景象的头盔式显示器外,还必须站在一个特制的框架内。调节电梯、.阳台和索桥的高度就可以产生不同程度的刺激。 .3虚拟风洞 德国信息技术国家研究中心的克鲁格等人建立了一个所谓的“虚拟风嗣 ,用以代替风洞实验(因风洞实验成本高,且实验难以控制)。在虚拟风洞中,其模拟的数据来自超级计算机或高性能工作站上运行的有限元程序。利用虎拟风洞,观测者通过佩戴液晶开关眼镜可以方便地对于给定的点和线进行观察,而且还可以通过放大的方式进行更细致的研究,大大方便了人们对于物体动力中特性的研究。 .4封闭式战斗作战训练器 封闭式战斗作战训练器(CCTT)是马斯塔格利等人为美军研制的用于坦克和机械化步兵在实际地形上进行演习的模拟装置。它与通常的虚拟环境和模拟器不同,它需要建立的是适用于军队训练的大规模复杂的虚拟环境。 .5虚拟现实技术在建筑设计中应用 虚拟现实技术还被广泛用于建筑设计。克鲁格等将他们设计的未来建筑显现在他们发明的虚拟工作平台上,建筑学家们聚集在一起透过所佩戴的液晶眼镜,可以看到设计的立体建筑,井方便地增添或移去建筑的一部分或其它物体。同时也可以通过数据手套来设置不同的光源.模拟不同时间的日光和月光.观察在不同光线下所设计建筑的美感以及与整个环境的协调性。 总之.虚拟现实技术是一门多学科交叉和综合集成的新技术。因此, 它的发展将取决于相关科学技术的发展和进步 虚拟现实技术最基本的要求就是反映的实时性和场景的真实性。但一般来说,实时性与真实性往往是相互矛盾的。 5.2 多通道用户界面 用户界面是计算机系统中人与计算机之间相互通讯的重要组成部分。八十年代以WIMP(窗口、图符、菜单、鼠标)为基础的图形用户界面(GUD极大地改善了计算机的可用性、可学性和有效性,迅速代替了命令行为代表的字符界面,成为当今计算机用户界面的主流。以用户为中心的系统设计思想.增进人机交互的自然性,提高人机交互的效率和带宽是用户界面的研究方向。于是提出了多通道用户界面的思想,它包括语言、姿势输入、头部跟踪、视觉跟踪、立体显示、三维交互技术、感觉反馈及自然语言界面等。可以这样说人体的表面就是人机界面。人体的任何部分都应成为人机对话的通道。虚拟现实显示是关键所在,这不仅要求软件来实现,更主要的是硬件上的实现。概括起来虚拟现实的人机交互通道可分为两个方面:主要的感觉通道和主要作用通道。多通道用户界面强调: (1)多个交互通道,如眼一语言一手势等。 (2)交互的双向性.如果每个通道兼有输入/输出 (3)交互不一定是在同一通道中完成.例如, 眼和耳都可以接受信息.但有明显的区别。眼永远是主动的, 即主动地去获取信息,耳永远是被动的,有些信息不管你愿不愿听,总要输到耳朵中,这就要求在具体的交互中具体选择交互通道。计算机图形学中各个领域的发展各有各自的特点, 但总起来说是以虚拟现实为导向 和目的的。虚拟现实的发展要求必将带动计算机图形学各学科的发展. 同样虚拟现实的发展也将依赖于其他学科的发展,计算机图形前景诱人。形势逼人(我国还比较落后),但通过努力还是可以缩短差距的。
226 浏览 4 回答
258 浏览 6 回答
348 浏览 4 回答
281 浏览 6 回答
259 浏览 4 回答
217 浏览 2 回答
155 浏览 5 回答
182 浏览 3 回答
261 浏览 4 回答
327 浏览 4 回答
268 浏览 6 回答
151 浏览 4 回答
177 浏览 5 回答
235 浏览 4 回答
152 浏览 3 回答