ImageVerifierCode 换一换
格式:DOCX , 页数:29 ,大小:168.23KB ,
资源ID:6603398      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6603398.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(第一章三维图形程序设计基础doc.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

第一章三维图形程序设计基础doc.docx

1、第一章三维图形程序设计基础doc第一章 交互式三维图形软件开发系统为什么要研制基于OpenGL的交互式三维图形软件开发工具IntraD2.0? 本章开头两节将解答这个问题.软件工程的主要目标是提高质量与生产率,如果没有软件工程思想方法的指导,ntraD 。0的设计、编程、扩展等工作可能会陷入混乱的困境.1。3节论述了软件的质量因素,以及提高质量与生产率的三种基本策略:“复用”、“分而治之”和“优化-折衷”。本章重点是Inta3D20的系统设计,主要从“体系结构设计”、“模块化设计、“数据结构与算法设计、“用户界面设计美学”和“程序设计风格”五个方面论述。1.1图形标准OGL及其高级开发工具图形

2、标准在图形领域有着重要的地位,是很多大公司与机构争夺的法宝.历史上曾出现的图形标准有re、KS、PIS、PX、ore、endra、ops、OGL等等。经过了竞争与淘汰,目前OenG占据了领导地位,成为国际上公认的D图形工业标准。SGI公司是赢家,它于19年着手研制pnGL.2年enL体系结构委员会制定了。0规范,995年推出1。1规范。1998年OpnGL 1。在SGI平台实现。enL及其应用程序已在Unx与PC平台得到广泛的应用。图形标准存在显而易见的优点:它不仅加速了3D应用程序的开发,而且使应用程序的可移植性更好。但是标准亦存在着缺点,Anrie Van Dam 指出:“标准是很多人经过

3、多年的努力共同创建的,它的规范与实现总是落后于最新技术。经验表明,绝大多数领域最先进的设计都是极小数精英小组创作的,但是标准却是一个庞大委员会的技术、政治折衷的产物”m 19。OenL的发展已近0年,从1。0版本到1。2版本在功能上并无显著的变化。在开发交互式3D图形应用程序方面,OnL存在明显的不足:()peG与窗口系统无关,不提供任何交互手段,必须由程序员自己编写所有的交互功能.(2)OpenGL应用程序性能的优化是程序员面临的一大困难.OeG的A(编程接口)非常灵活,不仅针对硬件与软件的优化方法多而相异,即便对于同一数据结构或算法,如果代码的组织不同亦会产生显著的性能差异。(3)OenG

4、L 的I是低级的函数,不提供可复用的对象库或者应用程序框架,开发效率不高.以上几点表明,除非开发人员既精通图形系统又精通窗口系统的编程,否则难以开发出较好的基于enGL的交互式3D应用程序。由于标准不能被轻易创建与修改,它往往跟不上技术的发展与市场的变化.而3图形是迅猛发展的领域,为了克服这个困难,人们往往在图形标准之上再建立更高级的开发工具(3 olkit或3Dngine)。基于nL的著名的开发工具有:一、Ope InventorOen Iventor 是从SGI的rs Inetor发展而来,适合于开发面向对象的交互式D图形应用程序。其核心是围绕Seerap的庞大的+ 类库,它提供场景编辑、

5、交互式绘制、文件输入输出等功能以及相应的图形用户界面。pnIventor是通用的商业化软件,由Opn nveto体系结构委员会制定标准,可以在多个平台运行.C平台的Open Invento由TG公司开发与销售.Wernck194 Wang197Open Inentor的基本特征是“大而全”,如果你只要开发很小的3D应用程序,使用Open en就象让相扑运动员去干针线活那样笨。二、risPerrerIis Pomer 是高性能实时3图形开发系统,由SI公司研制,专用于SGI的高档图形工作站。ris eomr 提供高层的场景结构,支持多CPU、场景多层次细节(D)管理。不提供用于3D交互的图形用户

6、界面。ohlf994sPerfmer我只听说过但没有亲手用过.总统套房好是好,可老百姓住不起。三、OpenGL tieirCsm3Opetimer/so3 是面向大型AD/CA与可视化应用的开发系统,由I公司研制。它可以将大型复杂的造型简化,并快速地绘制。但由于该产品推出的时间不长,短期内难以被广泛采纳。ul 1997所有的新产品都说自己好并且对用户“必不可少”,但用户总免不了疑神疑鬼,还是等它成熟了再用.四、GLGU的核心是个小型的C函数库,这些函数可以创建OnG窗口、弹出菜单、响应鼠标事件,并可以绘制简单的常见几何形体。GLT 可在-inow, Wind N, OS/等系统下运行,特别适合

7、于开发不需要复杂界面的OpenGL示例程序。GLT的源程序是公开的,并且提供了百余个出色的示例程序,可帮助用户进一步了解OpenGL。Paul197 ilard 996GU可爱得象南方的小葱,但是派不上大用场。另外,GI与icrosof合作的“Fanht计划”,将综合penL、Direc3D、Oen Iventor、OptimeierCosmo3的优点,创建更优秀的图形与可视化开发系统.可是雷打了两年多,就是不下雨。我在博士入学的第一年就看到了这计划,一直到毕业都没见到产品,幸好我没有干等着。Fhrenheit.2 Itra3D 。0的研制背景由于pen Invntr在Unix与PC平台得到了

8、广泛的应用,被誉为是交互式3D开发工具的“事实标准。但显然没有一个3D开发工具能满足所有的应用需求,3的广泛应用需要更多的开发工具支持。目前在nternt上可以搜索到的各种用途的Dnine有50多个Engin,pen Inven可以更精确地归类于“object orientddrwn dcument eiti ysteKohr 196。 随着计算机图形技术与网络技术的迅猛发展,两者的结合势在必行。在商业、科研、教育、娱乐等领域,用于分布式虚拟环境(isributedVitua nvironen,DVEs)和支持协同工作(oputerSupported oopeativrk, CSC)的图形系统

9、已成为研究与应用的热点rto 99Pnderast199。著名的DVEs系统有DIVE、dS、MR、Re3D等MacInyre1998.但是这些DVEs系统缺乏3开发工具的交互式图形功能以及通用性,而通用的3D开发工具如Oen nvenor则又不支持分布式计算和协同工作。由于在窗口系统、图形支撑库、编程语言等方面存在差异,上述DEs系统和3开发工具难以方便地结合使用。 为了紧跟发展潮流,我们从国情出发,多方面分析了3D的需求及软硬件条件研制完成了自主版权、运行于P平台的“交互式协同式三维图形软件开发系统与数据流可视化平台林锐 200b,如图1。1所示,其中:()Inr3D。0是基于OpenL的

10、交互式三维图形软件开发工具,可用于快速开发indw X/T下的交互式三维图形应用软件。(功能示例见彩图16)()DVL 是基于OpeL的数据可视化工具库(Daa isuaizain ),主要用于绘制科学计算数据和商业统计图形。结合Ina3D 2。和L20可以快速开发交互式数据可视化应用软件。(3)NC .是用于协同工作的网络通讯开发系统(CoopertvNetwrk Comuncato),其核心是支持“发布-订阅模式”和“数据流模式”的类库。结合ItraD 0、DVL 2。0和CNC 2。,可以快速开发支持协同工作的交互式三维图形与数据可视化应用软件。(4)GIVE是“分布式数据流可视化平台”

11、。用户从GI中选取模块,以“搭积木的方式将各个模块用数据流连接起来,之后用户就可以直观地控制这些模块的运行。如果用户在GV+ 中找不到需要的模块,可以使用ItrD 2.0、V20和CNC。0来开发该模块,把开发完成的模块添加到GVE的模块库中即可。(功能示例见彩图7、8、9)应用环境开发工具支撑平台图1 交互式协同式的三维图形软件开发系统与数据流可视化平台图1.1的方案充分体现了“大规模复用和“分而治之的软件工程思想(见1.3节)。如果按工作量划分比例,那么nra3D20 约占0,DVL2约占10,CN.0约占2,GIVE约占5%。Intra3D 。 是上述方案中最重要的软件开发工具。在设计n

12、tra32.时,我们分析过百余个Open应用程序,借鉴了OpenInvento与Opteiz/Cosmo3D的设计优点.以下是Intr .0与p Ivenor的主要不同点:()体系结构不同.en Inven是围绕cene raph开发的,可称大而全,但其很多功能在图.1方案中不实用也不必需。Inra3D 2.0分四层设计,每层少而精,扩展灵活,切合图1的方案。(2) Intra3D 2。0提供C类库与CM(omponeObject Mdel)库,支持Vsul +、Visul Basc、Deph编程。这种多语言编程是现代P应用开发的一个特征。而Open Inenor是从I的IRIS Invent

13、or发展而来的,由于需求背景不同,OpnInventor不具备Intra3D 。0这种特征.(3)nta3 2.0是个免费软件,所有源代码向用户开放。Itra 20的内核用sl 编写,其+类库与CO库各有0余个模块,共有万多行代码。由于Ita3D。是分层设计的,用户可以方便地修改内核以适应不同的需求。peIner是商业软件,不免费、不公开源代码。1. 软件工程思想本节讲述指导na3D。0系统设计的软件工程思想林锐 2000a。软件工程的目标是提高软件的质量与生产率,最终实现软件的工业化生产。质量是软件需求方最关心的问题,用户即使不图物美价廉,也要求个货真价实。生产率是软件供应方最关心的问题,老

14、板和员工都想用更少的时间挣更多的钱。质量与生产率之间有着内在的联系。高生产率必须以质量合格为前提。如果质量不合格,对供需双方都是坏事情.从短期效益看,追求高质量会延长软件开发时间并且增大费用,似乎降低了生产率。从长期效益看,高质量将保证软件开发的全过程更加规范流畅,大大降低了软件的维护代价,实质上是提高了生产率,同时可获得很好的信誉。质量与生产率之间不存在根本的对立,好的软件工程方法可以同时提高质量与生产率.对开发人员而言,如果非得在质量与生产率之间分个主次,那么应该是质量第一,生产率第二。这是因为:(1)质量直接体现在软件的每段程序中,高质量自然是开发人员的技术追求,也是职业道德的要求。(2

15、)高质量对所有的用户都有价值,而高生产率只对开发方有意义。(3)如果一开始就追求高生产率,容易导致急功近利,留下隐患.宁可进度慢些,也要保证每个环节的质量,以图长远利益.1. 软件的质量因素由于软件开发是一种智力创作活动,很难象传统工业那样通过执行严格的操作规范来保证软件产品的质量。世上最小心翼翼、最老实巴脚的程序员未必就能开发出高质量的软件来.程序员必须了解软件质量的方方面面(称为质量因素),才能在进行系统设计、程序设计时将高质量内建其中。软件的高质量并不是“管理出来的,实质上是设计出来的。 那么什么是高质量的程序?“运行正确”的程序就是高质量的程序吗?“运行正确”的程序不见得就是高质量的程

16、序。这个程序也许运行速度很低并且浪费内存;也许代码写得一塌糊涂,除了开发者本人谁也看不懂也不会使用。正确性只是反映软件质量的一个因素而已。软件的质量因素很多,如正确性、精确性、可靠性、容错性、性能、效率、易用性、可理解性、简洁性、可复用性、可扩充性、兼容性等等。这里关心的主要质量因素为“正确性与精确性”、“性能与效率、“易用性、“可理解性与简洁性”和“可复用性与可扩展性”.其中“正确性与精确性”排在第一位,其余的并列,如图1.所示。图12 软件质量因素的分类一、正确性与精确性正确性与精确性之所以排在质量因素的第一位,是因为如果软件运行不正确或者不精确,就会给用户造成不便甚至造成损失。机器不会欺

17、骗人,软件运行不正确或者不精确一般都是人造成的。即使一个软件能10 地按需求规格执行,但是如果需求分析错了,那么对客户而言这个软件也存在错误。即使需求分析完全符合客户的要求,但是如果软件没有1 地按需求规格执行,那么这个软件也存在错误.开发一个大的软件项目,程序员要为正确、精确四个字竭尽精力。与正确性、精确性密切相关的质量因素是容错性和可靠性。容错性首先承认软件系统存在不正确与不精确的因素,为了防止潜在的不正确与不精确因素引发灾难,系统为此设计了安全措施。在一些高风险的软件系统,如航空航天、武器、金融等系统中,容错性设计非常重要.可靠性是指在一定的环境下,在给定的时间内,系统不发生故障的概率。

18、可靠性本来是硬件领域的术语。比如某个电子设备,一开始工作很正常,但由于工作中器件的物理性质会发生变化(如发热),慢慢地系统就会失常.所以一个设计完全正确的硬件系统,在工作中未必就是可靠的。软件在运行时不会发生物理性质的变化,人们常以为如果软件的某个功能是正确的,那么它永远都是正确的。可是我们无法对软件进行彻底地测试,无法根除软件中潜在的错误。平时软件运行得好好的,说不准哪一天就不正常了,如“20年”问题.因此把可靠性引入软件领域是非常有意义的。二、性能与效率用户都希望软件的运行速度高些(高性能),并且占用资源少些(高效率)。程序员可以通过优化算法、数据结构和代码组织来提高软件系统的性能与效率。

19、优化的关键工作是找出限制性能与效率的瓶颈。附录论述了OenGL三维图形程序性能优化的方法.三、易用性易用性是指用户感觉使用软件的难易程度。用户可能是操作软件的最终用户,也可能是那些要使用源代码的程序员。易用性没有一个量化的指标,主观性较强.调查表明,当用户不理解软件中的某个特性时,大多数人首先会向同事、朋友请教。要是再不起作用,就向产品支持部门打电话。只有30的用户会查阅用户手册。一般认为,如果用户不翻阅手册就能使用软件,那么表明这个软件具有较好的易用性.Cusuma 195四、可理解性与简洁性开发人员只有在自己思路清晰时才可能写出让别人能理解的程序。编程时要注意不可滥用技巧,应该用自然的方式

20、编程.简洁是一种美,不管是开发人员自己还是用户都会有同感。一个原始的应用问题可能很复杂,但高水平的人就能够把软件系统设计得很简洁。如果软件系统臃肿不堪,它迟早会出问题。简洁是人们对工作精益求精的结果.五、可复用性与可扩展性可扩展性反映软件适应“变化”的能力.在软件开发过程中,“变化是司空见惯的事情,如需求的变化、对需求理解的变化、算法的改进、数据及其描述的变化、程序实现技术的变化等等。复用能同时提高软件的质量与生产率。复用的一种方式是原封不动地使用现成的软构件,另一种方式是对现成的软构件进行必要的扩展后再使用.可复用性好的程序一般也具有良好的可扩展性。下一节将深入论述“复用”。13.提高质量与

21、生产率的三种基本策略人们都有自己的世界观和方法论,能自然而然地运用于生活和工作中.同样,程序员脑子里的软件工程观念会无形地支配他怎么去做事情。软件工程三十年的发展,已经积累了相当多的方法,但这些方法不是严密的理论。实践人员不应该教条地套用方法,更重要的是学会“选择合适的方法和“产生新方法”。本节讲述提高质量与生产率的三种基本策略:“复用”、“分而治之、“优化折衷”.一、复用复用是指“利用现成的东西”,被复用的对象可以是有形的物体,也可以是无形的成果。复用不是人类懒惰的表现而是智慧的表现.因为人类总是在继承了前人的成果,不断加以利用、改进或创新后才会进步。复用的内涵包括了提高质量与生产率。由经验

22、可知,在一个新系统中,大部分的内容是成熟的,只有小部分内容是创新的。一般地可以相信成熟的东西总是比较可靠的(即具有高质量),而大量成熟的工作可以通过复用来快速实现(即具有高生产率)。人们应该把大部分的时间用在小比例的创新工作上,而把小部分的时间用在大比例的成熟工作中,这样才能把工作做得又快又好。把复用的思想用于软件开发,称为软件复用。据统计,世上已有00亿多行程序,可见无数功能被重写了成千上万次。面向对象(Ojec eed)学者的一个“呼吁就是“请不要再发明相同的车轮子了.将具有一定集成度并可以重复使用的软件组成单元称为软构件(SoftaeComnet)。软件复用可以表述为:构造新的软件系统可

23、以不必每次从零做起,直接使用已有的软构件,即可组装(或加以合理修改)成新的系统.复用方法合理化并简化了软件开发过程,减少了总的开发工作量与维护代价,既降低了软件的成本又提高了生产率。另一方面,由于软构件是经过反复使用验证的,自身具有较高的质量。因此由软构件组成的新系统也具有较高的质量。利用软构件生产应用软件的过程如图1.3所示。 存在 构件不存在图1。3 利用软构件生产应用软件的过程软件复用不仅要使自己拿来方便,还要让别人拿去方便,是“拿来拿去主义”。面向对象技术,Mcrost公司的规范 oerson 99,都能很好地用于实现大规模的软件复用。在图1.的方案中,nra3D 2。、DVL、NC2

24、。0软件系统的核心都是可复用的对象库,可帮助用户快速地开发交互式协同式的三维图形与数据可视化应用软件。软构件经典的程序形式是C+的类,例如pen Invtor的构件库是C+类库。目前在PC平台非常流行的一种构件程序形式是OM,OM的一个突出优点是与编程语言无关。Ina3D 0同时提供C+类库与COM库,在应用编程时可以支持Vsua +、Visua aic、elp等语言,使得ntra 2.0的构件适应面更广。二、分而治之分而治之是指把一个复杂的问题分解成若干个简单的问题,然后逐个解决。这种朴素的思想来源于人们生活与工作的经验,完全适合于技术领域。软件人员在执行分而治之的时候,应该着重考虑:复杂问

25、题分解后,每个问题能否用程序实现?所有程序最终能否集成为一个软件系统并有效解决原始的复杂问题?图1。4表示了软件领域的分而治之策略.诸如软件的体系结构设计、模块化设计都是分而治之的具体表现。软件的分而治之不可以“硬分硬治”。不像为了吃一个西瓜或是一只鸡,挥刀斩成n块,再把每块塞进嘴里粉碎搅拌,然后交由胃肠来消化吸收,象征复杂问题的西瓜或是鸡也就此消失了。图的设计方案充分体现了“分而治之方法的有效性.Inra3 2。、D2。、CN。和I在设计和实现是都是独立的,降低了开发难度。而在应用时,它们可以方便的结合。例如使用Itr3D 。0和DVL 2。0可以快速地开发交互式数据可视化应用软件.结合nt

26、a3D 2.0、DL 2。0和NC 0,可以快速开发支持协同工作的交互式三维图形与数据可视化应用软件,并且可以方便地将“模块”加入到GIVE+的可视化集成环境中。 解决原始问题 分解 集成图14软件领域的分而治之策略三、优化-折衷软件的优化是指优化软件的各个质量因素,如提高运行速度,提高对内存资源的利用率,使用户界面更加友好,使三维图形的真实感更强等等。想做好优化工作,首先要让开发人员都有正确的认识:优化工作不是可有可无的事情,而是必须要做的事情.当优化工作成为一种责任时,程序员才会不断改进软件中的算法,数据结构和程序组织,从而提高软件质量。著名的3D游戏软件uak,能够在机上实时地绘制高度真

27、实感的复杂场景。Qake的开发者能把很多成熟的图形技术发挥到极致,例如把resenh画线、多边形裁剪、树遍历等算法的速度提高近一个数量级.我第一次看到ue时不仅感到震动,而且深受打击。这个C游戏软件的技术水平已经远胜于我所见识到的国内领先的图形学相关科研成果。这对我们日益盛行的点到完止的研发工作真是莫大的讽刺。所以当我们开发的软件表现出很多不可救药的病症时,不要怨机器差.真的是我们自己没有把工作做好。优化工作的复杂之处是很多目标存在千丝万缕的关系,可谓数不清理还乱。当不能够使所有的目标都得到优化时,就需要“折衷”的策略。软件中的折衷策略是指通过协调各个质量因素,实现整体质量的最优.软件折衷的重

28、要原则是不能使某一方损失关键的职能,更不可以象“舍鱼而取熊掌”那样抛弃一方。例如D动画软件的瓶颈通常是速度,但如果为了提高速度而在程序中取消光照明计算,那么场景就会丧失真实感,3动画也就不再有意义了(如果人类全是色盲,计算机图形学将变得异常简单)。人都有惰性,如果允许滥用折衷的话,那么一当碰到困难,人们就会用拆东墙补西墙的方式去折衷,不再下苦功去做有意义的优化。所以我们有必要为折衷制定严正的立场:在保证其它因素不差的前提下,使某些因素变得更好。Inra3D 2.0和VL2。的核心都是基于pen的对象库,这些对象库对应用软件的图形绘制性能有很大的影响.附录A论述了penGL三维图形程序性能优化的

29、方法,可以指导tra3 2.0、DVL2及其应用软件的优化工作.1. nra3D 20系统设计系统设计是把需求转化为软件系统的最重要的环节。系统设计的优劣在根本上决定了软件系统的质量。本章在宏观上讲述ntr3D 20系统设计的五方面内容:体系结构设计、模块设计、数据结构与算法设计、“用户界面设计美学”和“程序设计风格”.林锐 2000在进行系统设计时,我们要关注软件的质量因素,如正确性与精确性、性能与效率、易用性、可理解性与简法性、可复用性与可扩充性等等。即使把系统设计做好了,也并不意味着就能产生好的软件系统.在程序设计、测试、维护等环节还要做大量的工作,无论哪个环节出了差错,都会把好事搞砸了。1 体系结构设计原理体系结构有两个基本特征:()体系结构是对复杂事物的抽象.良好的体系结构是普遍适用的,它可以高效地处理多种多样的个体需求。一提起“房子”,我们的脑中马上就会出现房子的印象。“房子”是人们对住宿或办公环境的一种抽象。不论是办公楼还是民房,同一类建筑物(甚至不同类的建筑物)之间都具有非常相似的体系结构和构造方式。(2)体系结构在一定的时间内保持稳定。软件开发中最不希望发生的是需求变化,但“需求会发生变化”是个无法逃避的现实.人们希望

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1