第一章交互式三维图形软件开发系统

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1第一章交互式三维图形软件开发系统为什么要研制基于OpenGL的交互式三维图形软件开发工具Intra3D2.0?本章开头两节将解答这个问题。软件工程的主要目标是提高质量与生产率,如果没有软件工程思想方法的指导,Intra3D2.0的设计、编程、扩展等工作可能会陷入混乱的困境。1.3节论述了软件的质量因素,以及提高质量与生产率的三种基本策略:“复用”、“分而治之”和“优化—折衷”。本章重点是Intra3D2.0的系统设计,主要从“体系结构设计”、“模块化设计”、“数据结构与算法设计”、“用户界面设计美学”和“程序设计风格”五个方面论述。1.1图形标准OpenGL及其高级开发工具图形标准在图形领域有着重要的地位,是很多大公司与机构争夺的法宝。历史上曾出现的图形标准有Core、GKS、PHIGS、PEX、GL、Dore、RenderMan、Hoops、OpenGL等等。经过了竞争与淘汰,目前OpenGL占据了领导地位,成为国际上公认的3D图形工业标准。SGI公司是赢家,它于1990年着手研制OpenGL。1992年OpenGL体系结构委员会制定了1.0规范,1995年推出1.1规范。1998年OpenGL1.2在SGI平台实现。OpenGL及其应用程序已在Unix与PC平台得到广泛的应用。图形标准存在显而易见的优点:它不仅加速了3D应用程序的开发,而且使应用程序的可移植性更好。但是标准亦存在着缺点,AndriesVanDam指出:“标准是很多人经过多年的努力共同创建的,它的规范与实现总是落后于最新技术。经验表明,绝大多数领域最先进的设计都是极小数精英小组创作的,但是标准却是一个庞大委员会的技术、政治折衷的产物”[Dam1998]。OpenGL的发展已近10年,从1.0版本到1.2版本在功能上并无显著的变化。在开发交互式3D图形应用程序方面,OpenGL存在明显的不足:(1)OpenGL与窗口系统无关,不提供任何交互手段,必须由程序员自己编写所有的交互功能。(2)OpenGL应用程序性能的优化是程序员面临的一大困难。OpenGL的API(编程接口)非常灵活,不仅针对硬件与软件的优化方法多而相异,即便对于同一数据结构或算法,如果代码的组织不同亦会产生显著的性能差异。(3)OpenGL的API是低级的C函数,不提供可复用的对象库或者应用程序框架,开发效率不高。以上几点表明,除非开发人员既精通图形系统又精通窗口系统的编程,否则难以开发出较好的基于OpenGL的交互式3D应用程序。由于标准不能被轻易创建与修改,它往往跟不上技术的发展与市场的变化。而3D图形是迅猛发展的领域,为了克服这个困难,人们往往在图形标准之上再建立更高级的开发工具(3DToolkit或3DEngine)。基于OpenGL的著名的开发工具有:一、OpenInventor2OpenInventor是从SGI的IrisInventor发展而来,适合于开发面向对象的交互式3D图形应用程序。其核心是围绕SceneGraph的庞大的C++类库,它提供场景编辑、交互式绘制、文件输入输出等功能以及相应的图形用户界面。OpenInventor是通用的商业化软件,由OpenInventor体系结构委员会制定标准,可以在多个平台运行。PC平台的OpenInventor由TGS公司开发与销售。[Wernecke1994][Wang1997]OpenInventor的基本特征是“大而全”,如果你只要开发很小的3D应用程序,使用OpenInventor就象让相扑运动员去干针线活那样笨。二、IrisPerformerIrisPerformer是高性能实时3D图形开发系统,由SGI公司研制,专用于SGI的高档图形工作站。IrisPerformer提供高层的场景结构,支持多CPU、场景多层次细节(LOD)管理。不提供用于3D交互的图形用户界面。[Rohlf1994]IrisPerformer我只听说过但没有亲手用过。总统套房好是好,可老百姓住不起。三、OpenGLOptimeizer/Cosmo3DOpenGLOptimeizer/Cosmo3D是面向大型CAD/CAE与可视化应用的开发系统,由SGI公司研制。它可以将大型复杂的造型简化,并快速地绘制。但由于该产品推出的时间不长,短期内难以被广泛采纳。[Paul1997]所有的新产品都说自己好并且对用户“必不可少”,但用户总免不了疑神疑鬼,还是等它成熟了再用。四、GLUTGLUT的核心是个小型的C函数库,这些函数可以创建OpenGL窗口、弹出菜单、响应鼠标事件,并可以绘制简单的常见几何形体。GLUT可在X-Window,WindowsNT,OS/2等系统下运行,特别适合于开发不需要复杂界面的OpenGL示例程序。GLUT的源程序是公开的,并且提供了百余个出色的示例程序,可帮助用户进一步了解OpenGL。[Paul1997][Kilgard1996]GLUT可爱得象南方的小葱,但是派不上大用场。另外,SGI与Microsoft合作的“Fahrenheit计划”,将综合OpenGL、Direct3D、OpenInventor、Optimeizer/Cosmo3D的优点,创建更优秀的图形与可视化开发系统。可是雷打了两年多,就是不下雨。我在博士入学的第一年就看到了这计划,一直到毕业都没见到产品,幸好我没有干等着。[Fahrenheit]1.2Intra3D2.0的研制背景由于OpenInventor在Unix与PC平台得到了广泛的应用,被誉为是交互式3D开发工具的“事实标准”。但显然没有一个3D开发工具能满足所有的应用需求,3D的广泛应用需要更多的开发工具支持。目前在Internet上可以搜索到的各种用途的3DEngine有500多个[Engines],OpenInventor可以更精确地归类于“objectorienteddrawinganddocumenteditingsystem”[Kochhar1996]。随着计算机图形技术与网络技术的迅猛发展,两者的结合势在必行。在商业、科研、3教育、娱乐等领域,用于分布式虚拟环境(DistributedVirtualEnvironments,DVEs)和支持协同工作(ComputerSupportedCooperativeWork,CSCW)的图形系统已成为研究与应用的热点[Barton1999][Pendergast19999]。著名的DVEs系统有DIVE、dVS、MR、Repo-3D等[MacIntyre1998]。但是这些DVEs系统缺乏3D开发工具的交互式图形功能以及通用性,而通用的3D开发工具如OpenInventor则又不支持分布式计算和协同工作。由于在窗口系统、图形支撑库、编程语言等方面存在差异,上述DVEs系统和3D开发工具难以方便地结合使用。为了紧跟发展潮流,我们从国情出发,多方面分析了3D的需求及软硬件条件研制完成了自主版权、运行于PC平台的“交互式协同式三维图形软件开发系统与数据流可视化平台”[林锐2000b],如图1.1所示,其中:(1)Intra3D2.0是基于OpenGL的交互式三维图形软件开发工具,可用于快速开发Window9X/NT下的交互式三维图形应用软件。(功能示例见彩图1—6)(2)DVL2.0是基于OpenGL的数据可视化工具库(DataVisualizationLib),主要用于绘制科学计算数据和商业统计图形。结合Intra3D2.0和DVL2.0可以快速开发交互式数据可视化应用软件。(3)CNC2.0是用于协同工作的网络通讯开发系统(CooperativeNetworkCommunicator),其核心是支持“发布—订阅模式”和“数据流模式”的类库。结合Intra3D2.0、DVL2.0和CNC2.0,可以快速开发支持协同工作的交互式三维图形与数据可视化应用软件。(4)GIVE+是“分布式数据流可视化平台”。用户从GIVE+中选取模块,以“搭积木”的方式将各个模块用数据流连接起来,之后用户就可以直观地控制这些模块的运行。如果用户在GIVE+中找不到需要的模块,可以使用Intra3D2.0、DVL2.0和CNC2.0来开发该模块,把开发完成的模块添加到GIVE+的模块库中即可。(功能示例见彩图7、8、9)应用环境开发工具支撑平台图1.1交互式协同式的三维图形软件开发系统与数据流可视化平台图1.1的方案充分体现了“大规模复用”和“分而治之”的软件工程思想(见1.3.节)。如果按工作量划分比例,那么Intra3D2.0约占40%,DVL2.0约占10%,CNC2.0约占25%,GIVE+约占25%。Intra3D2.0是上述方案中最重要的软件开发工具。PC+Windows9X/NT交互式三维图形软件开发工具Intra3D2.0用于协同工作的网络通讯开发系统CNC2.0数据可视化工具库DVL2.0国际图形标准OpenGL通用可视化平台GIVE与GIVE+4在设计Intra3D2.0时,我们分析过百余个OpenGL应用程序,借鉴了OpenInventor与Optimeizer/Cosmo3D的设计优点。以下是Intra3D2.0与OpenInventor的主要不同点:(1)体系结构不同。OpenInventor是围绕SceneGraph开发的,可称大而全,但其很多功能在图1.1方案中不实用也不必需。Intra3D2.0分四层设计,每层少而精,扩展灵活,切合图1.1的方案。(2)Intra3D2.0提供C++类库与COM(ComponentObjectModel)库,支持VisualC++、VisualBasic、Delphi编程。这种多语言编程是现代PC应用开发的一个特征。而OpenInventor是从SGI的IRISInventor发展而来的,由于需求背景不同,OpenInventor不具备Intra3D2.0这种特征。(3)Intra3D2.0是个免费软件,所有源代码向用户开放。Intra3D2.0的内核用VisualC++编写,其C++类库与COM库各有60余个模块,共有7万多行代码。由于Intra3D2.0是分层设计的,用户可以方便地修改内核以适应不同的需求。OpenInventor是商业软件,不免费、不公开源代码。1.3软件工程思想本节讲述指导Intra3D2.0系统设计的软件工程思想[林锐2000a]。软件工程的目标是提高软件的质量与生产率,最终实现软件的工业化生产。质量是软件需求方最关心的问题,用户即使不图物美价廉,也要求个货真价实。生产率是软件供应方最关心的问题,老板和员工都想用更少的时间挣更多的钱。质量与生产率之间有着内在的联系。高生产率必须以质量合格为前提。如果质量不合格,对供需双方都是坏事情。从短期效益看,追求高质量会延长软件开发时间并且增大费用,似乎降低了生产率。从长期效益看,高质量将保证软件开发的全过程更加规范流畅,大大降低了软件的维护代价,实质上是提高了生产率,同时可获得很好的信誉。质量与生产率之间不存在根本的对立,好的软件工程方法可以同时提高质量与生产率。对开发人员而言,如果非得在质量与生产率之间分个主次,那么应该是质量第一,生产率第二。这是因为:(1)质量直接体现在软件的每段程序中,高质量自然是开发人员的技术追求,也是职业道德的要求。(2)高质量对所有的用户都有价值,而高生产率只对开发方有意义。(3)如果一开始就追求高生产率,容易导致急功近利,留下隐患。宁可进度慢些,也要保证每个环节的质量,以图长远利益。1.3.1软件的质量因素由于软件开发是一种智力创作活动,很难象传统工业那样通过执行严格的操作规范来保证软件产品的质量。世上最小心翼翼、最老实巴脚的程序员未必就能开发出高质量的软件来。程序员必须了解软件质量的方方面面(称为质量因素),才能在进行系统设计、程序设计时将高质量内建其中。软件的高质量并不是“管理”出来的,实质上是设计出来的。5那么什么是高质量的程序?“运行正确”的程序就是高质量的程序吗?“运行正确”的程序不见得就是高质量的程序

1 / 24
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功