《基于web的3d模型浏览与交互系统》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
学校代码10530学号201510171884分类号TP391密级硕士学位论文基于Web的3D模型浏览与交互系统学位申请人郭明金指导教师陈姝副教授学院名称信息工程学院学科专业计算机技术研究方向计算机视觉、模式识别二○一八年四月十日 3DModelBrowsingandInteractionSystemBasedonWebCandidateGuoMingjinSupervisorAssociateProf.ShuChenCollegeCollegeofInformationEngineeringProgramComputerTechniqueSpecializationComputerVisionandPatternRecognitonDegreeMasterofEngineeringUniversityXiangtanUniversityDateApril10,2018 摘要随着互联网技术的持续发展,人们浏览信息的方式不断改变,不再仅仅只需浏览2D网页,对3D网页的要求也越来越高,3D交互技术也因此得到了越来越广泛的应用。目前国内大部分的3D场景交互技术都需要安装客户端,一些基于Web的3D技术也需要在浏览器中安装插件,由此给用户带来了不便。因此,本文提出的基于Web的3D模型浏览与交互系统具有较好的应用前景。本文设计的基于Web的3D模型浏览与交互系统,主要采用基于WebGL的第三方库Three.js来实现。该系统的建立主要包括场景的构建、场景的交互控制和模型的云存储。模型是场景构建的前提,用户可从外部导入所需模型或利用系统自带的简单模型进行模型的构建。场景的交互技术主要包括模型的平移、旋转、缩放、拾取、剖切、3D动画模型的播放以及信息的显示等。模型的云存储是指用户可以通过登录账户将3D模型存储到服务器,日后需要时直接从服务器中加载即可。基于Web的3D模型浏览与交互系统,是一个可在Web浏览器内进行3D模型高效浏览与便捷交互的可视化平台,旨在帮助用户实时上传自己的3D模型并在浏览器端进行展现,并且用户可对模型进行实时操控。关键词:3D模型;WebGL技术;Three.js库;服务器;可视化I AbstractWiththecontinuousdevelopmentoftheInternettechnology,people'sdemandsforinformationacquisitionareconstantlyimproving.Theynolongerremainintheprevious2Dpages,butmoreandmoretendto3Dpages.Therefore,3Dinteractivetechnologyhasalsobeenwidelyused.Atpresent,mostofthe3DsceneinteractiontechnologiesinChinarequiretheinstallationofclients,andsome3Dtechnologiesbasedonwebalsorequiretheinstallationofplug-insinthebrowser,therebycausinginconveniencetousers.Therefore,3DModelBrowsingandInteractionSystemBasedonWebproposedinthispaperhasagoodapplicationprospect.3DModelBrowsingandInteractionSystemBasedonWebisdesignedinthispaper,whichmainlyadoptsthethird-partylibraryThree.jsbasedonWebGLtorealize.Theestablishmentofthesystemmainlyincludestheconstructionofthescene,theinteractivecontrolofthesceneandthecloudstorageofthemodel.Themodelisthepremiseofsceneconstruction,userscanimporttherequiredmodelfromtheoutsideorusethesystem'ssimplemodeltobuildthemodel.Theinteractivetechnologiesofthescenemainlyincludethetranslation,rotation,zooming,pickingupofthemodel,playingofthe3Danimationmodel,anddisplayofinformationandsoon.Thecloudstorageofthemodelmeansthattheusercanstorethe3Dmodelontheserverbyloggingintotheaccount,andcandirectlyloaditfromtheserverwhenneeded.3DModelBrowsingandInteractionSystemBasedonWebisavisualplatformforefficientbrowsingandconvenientinteractionof3Dmodelsinawebbrowser.Itisdesignedtohelpusersuploadtheirown3Dmodelsinrealtimeanddisplaythemonthebrowserside.Andtheusercanmanipulatethemodelinrealtime.KeyWords:3Dmodel;WebGLtechnology;Three.jslibrary;server;visualII 目录摘要..............................................................................................................................IAbstract......................................................................................................................II目录..........................................................................................................................III第1章绪论..................................................................................................................11.1课题研究背景及意义.........................................................................................11.2研究现状.............................................................................................................21.3研究目标及内容.................................................................................................31.4章节安排.............................................................................................................4第2章Web3D关键技术...............................................................................................52.1HTML5技术.......................................................................................................52.2WebGL技术........................................................................................................62.2.1WebGL简介.................................................................................................62.2.2WebGL坐标系统.........................................................................................72.3Three.js.................................................................................................................72.3.1场景构建.......................................................................................................82.3.2几何体与材质...............................................................................................92.3.3外部模型的导入.........................................................................................102.4JavaScript...........................................................................................................112.5Tomcat................................................................................................................122.6本章小结...........................................................................................................12第3章系统设计........................................................................................................143.1需求分析............................................................................................................143.2系统结构设计....................................................................................................143.3系统布局设计....................................................................................................153.4系统功能............................................................................................................163.5系统接口设计....................................................................................................163.6数据库设计........................................................................................................203.6.1总体构想....................................................................................................203.6.2用户表........................................................................................................21III 3.6.3平台表........................................................................................................213.6.4模型总表....................................................................................................213.6.5模型详表....................................................................................................223.6.6状态表........................................................................................................223.7本章小结...........................................................................................................22第4章系统的实现....................................................................................................244.1系统主界面的实现...........................................................................................244.2主要算法的实现...............................................................................................244.2.1BSP分割算法............................................................................................244.2.2动画模型算法............................................................................................254.3主要功能的实现...............................................................................................264.3.1注册与登录功能........................................................................................264.3.2导入导出功能............................................................................................264.3.3模型操作功能............................................................................................274.3.4渲染功能....................................................................................................334.3.5模型加载与上传功能................................................................................334.3.6信息存储与显示功能................................................................................344.4本章小结...........................................................................................................35第5章实验分析........................................................................................................365.1实验环境...........................................................................................................365.2渲染比较...........................................................................................................365.3功能测试...........................................................................................................375.4性能测试...........................................................................................................425.5本章小结...........................................................................................................44第6章总结与展望....................................................................................................456.1总结...................................................................................................................456.2展望...................................................................................................................45参考文献......................................................................................................................46致谢..............................................................................................................................48附录A攻读硕士学位期间发表的论文.....................................................................49IV 第1章绪论1.1课题研究背景及意义随着计算机技术的不断发展,交互式的计算机图形学现今已经是一种实用的工具。计算机图形学在建筑、科学、医药、商务和娱乐等各种领域的应用已经非常广泛,目前已经成为各个应用领域中极其重要的技术,成为计算机视觉、图像处理、多媒体技术、模式识别等各个学科的技术基础。Web3D作为三维计算机图形学与网络技术的产物,其发展和应用非常广泛,它可以在网页上创建一个服务[1]器,使得用户可以直接通过浏览器实现3D场景的实时渲染与互动。[2]随着电子科学信息的不断增长与科学技术的发展,仿真技术在工业设计中的应用越来越广泛。但是三维技术入门较难,三维交互软件需占用大量内存,对计算机的CPU和GPU要求很高,功能虽多却操作复杂,因此只是在专业领域应用广泛,普通用户很少接触三维模型交互技术。随着3D技术的应用领域逐渐增多,普通用户对其需求逐步提高,参与设计3D模型的兴趣也越来越浓烈,因此为了满足这些用户的需求,必须要创建出一个适合大众用户且操作简单、方便快捷的3D模型浏览与交互工具。网页制作与设计人员一直都尝试通过各种技术实现3D网页,其中包括“Java3D”、“Flash3D”、“Sliverlight”、“Unity3D”以及“CopperCube”等来实现3D商品展示、3D打印、3D游戏、虚拟现实。然而,这些技术却存在一些问题,首先,这些技术都必须要安装特定的插件,安装插件会影响网页的跨平台性及稳定性,特别是限制了其在移动终端网页中的应用;其次,许多技术仅仅针对特定行业,其通用性不强,比如Unity3D只适合游戏网页的开发;再次,技术实现较为困难,开发成本高,并且制作效率低下。为了解决[3]这些问题,本系统采用WebGL技术,WebGL的优势是不用在浏览器上安装插件,就能被应用到网页中去以创建多种多样的复杂3D模型,在硬件条件相同的情况下提高3D模型的渲染性能和渲染效果。目前,国内Web3D相关产品比较稀缺,资源和资料也比较稀少,所以,本文提出的基于Web的3D模型浏览与交互系统是虚拟现实技术亟待解决的重要技术问题之一,应用前景非常好。基于Web的3D模型浏览与交互系统,是一个在线网页版3D浏览平台,是一个旨在帮助用户实时上传自己的3D模型并在浏览器端进行展现,系统采用[4]WebGL技术来对三维模型进行显卡渲染加速,并且不需要安装复杂的3D软件,用户输入网址即可进入系统,以实现对模型的浏览与操作。此技术将给用户带来极大的方便与快捷,既实现了PC端3D模型的交互又实现了手机等移动端3D模1 [5]型的可视化与交互操作,促进了虚拟现实技术的应用范围,为其运用到实际的生产生活中提供了有力的促进作用。1.2研究现状目前,桌面版3D模型交互软件很多,如Blender、3Dmax、SketchUp、Maya等,并且都具有非常强大的功能,且在3D领域已被普遍运用。但是这些是专业人员运用的专业软件,普通用户不易掌握,存在操作复杂的困扰。近几年,网络媒体对图形图像处理和视频技术等提出了更高的要求,各3D图形公司纷纷陆续[6]推出了自己的Web3D制作工具,各具特色,使得Web3D虚拟现实技术的操作[7]更加简单,使用更加便捷。目前国内外在线3D模型交互平台及工具不多,目前比较成型的有国外的3DTin和TinkerCAD以及国内的WebMax等。(1)TinkerCADAutodesk的TinkerCAD是一个在线网页版3D平台,用户只需几分钟就可以完成3D作品的设计,无论使用者是不是3D领域的专业设计人员,都可以快速[8]地对3D模型进行设计制作,并具有较好的渲染性能和渲染效果。TinkerCAD可应用于3D打印,它一直致力于帮助用户设计自己的3D模型并通过使用3D打印机将其打印出来。TinkerCAD可以无限制地存储设计模型,不仅可以通过简单地拖拽几何形状进行组合,甚至可以使用“超级脚本”进行更高水平的3D模[9]型设计。TinkerCAD降低了3D模型设计的门槛,让非专业领域用户也可以方便快捷的使用CAD工具。(2)3DTin3DTin是一款3D模型交互工具,使用现在非常盛行的WebGL技术进行开发,[10]它提供了两种方法来构建3D模型,一是用户通过使用系统自带的模型工具来构建3D模型进行交互,二是导入用户已设计好的模型来进行交互操作。用户制[11]作好3D模型后可将模型保存在服务器以便下次使用,也可以将其导出为国际标准的3D格式模型供用户传输,比如dae格式和obj格式。(3)WebMax[12]WebMax是一款由中国上海创图公司自主研发的Web3D软件开发技术,它使用C++和DirectX编写,采用分布式三维实时渲染技术实现巨大规模场景的[13]实时渲染,拥有其独一无二的压缩技术,是国内Web3D技术开发的先驱,3D交互功能非常强,三维渲染效果也非常好,并且运算速度非常快,是我国Web3D技术的重大突破。这三款Web3D工具都具有操作简单并且方便快捷的特点。但是,TinkerCAD2 和3DTin是国外产品,在网络带宽不足的情形下系统会出现严重的卡顿,造成用[14]户体验感极大降低。WebMax是我国国内出现的第一个具有完全自主知识产权三维在线软件开发技术,运算速度快、交互性强等优点是同类国外技术无可比拟的。但是WebMax需要下载插件才能完成网页上Web3D的浏览,插件的安装将会影响用户的使用热情。1.3研究目标及内容本文的研究目标是做出一个基于Web的3D模型浏览与交互系统,即一个在线网页版3D浏览平台,用户可实时上传自己的3D模型并在浏览器端进行展现,无需在客户端安装复杂的3D软件,用户只需输入网址进入系统,即可实现对模型的浏览与操作。用户可对模型进行修改,并保存用户修改的模型信息,进行导出保存。系统的功能按钮需简洁清晰,运行流畅自如。本系统旨在建立一个方便快捷的3D模型交互平台,其功能与复杂度可能比不上现有成熟的桌面3D软件,但简单流畅、方便快捷是本系统的主要优势,也是本系统所研究的目标。研究内容包括:1)模型信息导入与加载系统支持导入已创建好的3D模型。用户可以从本地导入,也可从服务器加载,导入或加载到浏览器即可进行浏览或修改操作。此项研究内容可极大提高系统的交互性及其扩展性。2)模型信息导出与上传在用户完成模型的修改之后,系统可对整个场景的模型信息进行存储,可导出到本地,或登录账号保存到服务器中,以后用户想要查看这个模型,只需再次从本地导入或登录账号进行加载即可进行查看与修改。这些功能使得系统的实用性增强,是重点研究内容之一。3)3D场景交互场景的交互技术主要包括模型的平移、旋转、缩放、拾取、材质的修改、3D动画模型的播放以及信息的显示等。系统提供一些基本的几何体(如平面、正方体和圆柱体等),用户可以将其进行组合拼接,或导入所需模型增加一些基本模型,组合成用户所需的复杂模型。模型在场景中可以被复制,也可以被删除。如何做到灵活流畅的控制模型,也是本系统重点研究的内容之一。4)场景实时渲染本系统是在线网页系统,在导入模型或修改模型时,应该确保能够实时渲染场景,做到流畅自如,使系统具有较高的性能。为此,系统采用了WebGL技术[15]进行显卡加速并使场景能够实时渲染。3 1.4章节安排本文的章节共有六章,章节安排如下:第1章为绪论,本章对课题的研究背景及意义,国内外的研究现状,研究目标及内容进行了介绍。第2章介绍了本系统主要涉及的Web3D关键技术,包括HTML5技术,WebGL技术,Three.js的相关知识如场景构建、几何体与材质、外部模型的导入,JavaScript和Tomcat。第3章对系统的总体设计进行了介绍,具体介绍了需求分析,系统结构设计,系统布局设计,系统功能,系统接口设计以及数据库设计。第4章对系统的实现进行了介绍,主要涉及系统主要算法与主要功能的实现。第5章是对系统的实验的记录及分析。第6章为总结与展望。4 第2章Web3D关键技术2.1HTML5技术[16]HTML5是由万维网联盟(W3C)推出的HTML标准的最新版本,是该标准的第五个正式修订版本,2014年10月正式完成标准的制定。HTML5技术[17]是互联网的核心技术之一,它是一种在万维网上构建和呈现内容的结构化标记语言。HTML标准在1990年被首次提出,并在1999年被修订为HTML4.01[18]和XHTML1.0标准,而HTML5则是取代了HTML4.01和XHTML1.0标准,使其在网络迅速发展时,网络标准能达到当代网络需求。HTML5还在进一步发展和完善,但是国内外大多数主流浏览器都已经支持HTML5,比如微软的IE11浏览器、谷歌的Chrome浏览器以及IOS的Safari浏览器等,其中Chrome浏览器和Firefox浏览器对HTML5支持的最好。此外,HTML5在移动互联网中也具有好的兼容性,ChromeAndroid、UCforAndroid和IOSSafari等浏览器都对HTML5有很好的支持。[19]从广义上来讲,HTML5其实是一个技术的组合体,包含HTML、CSS和JavaScript等技术,可以提高其网络应用服务的性能。通过HTML5技术能开发出许多跨平台的并且功能更为丰富的软件产品。另外,它还可以进行多线程处理并新增了部分功能,这些新功能不仅可以提供丰富的媒体支持,而且还增强了对创建与用户、本地数据和服务器交互的Web应用程序的支持,比以前更有效的进行交互,更易于实现大型的复杂程序。通过文档对象模型里新增的API,再加上WebGL、Canvas和CSS3等技术,HTML5能够实现Flash的一些功能,同时也拥有了实现3D模型浏览与交互系统的基础。[20]在HTML5平台上,浏览图象、动画等同电脑的交互操作被标准化了。在HTML5出现之前,每种应用都一定要依赖自己的插件,三维图像在浏览器中不可以直接渲染展示,但是由于每种插件的标准不一样,安装插件对于浏览器甚至对系统来说也可能存在一定的安全隐患,因为插件可能会通过后台程序来盗取用户信息,或者插件自身也可能会有木马或者病毒,损害电脑的安全,而且下载多[21]种插件也是一种资源的浪费。HTML5技术能够解决以前系统存在的插件不标准,不安全和耗资源等问题,这样不但给开发人员带来了很大的便利,而且用户也不需要安装有关的插件,其加载速度也得到了改善,并且它还能够跨浏览器及[22]跨平台使用。5 2.2WebGL技术2.2.1WebGL简介[23]WebGL是一种3D绘图标准,是一套可以跨平台使用的的JavaScript[24]API,它在HTML中以3D绘图上下文的形式实现了OpenGLES(OpenGLfor[25][26]EmbeddedSystems)2.0的功能,把OpenGLES2.0与JavaScript结合起来,并以底层的文档对象模型DOM(DocumentObjectModel)接口的形式将开发接口暴露出来,使得Web开发者能够更便捷的在网页中展示更加流畅的3D模型与场景。[27]WebGL已经被纳入HTML5标准之中,这使得它定义的3D图形的应用程序接口可以通过其Canvas元素来呈现,在网页中不需要安装相关插件即可对复杂的3D模型及场景进行较强的交互操作功能,WebGL能够把Canvas元素当作DOM的API来使用,并且可以通过JavaScript来实现硬件加速与内存管理功能。WebGL能够运行在各种各样的设备上,例如移动设备、PC机以及高性能的智能电视等,现在很多常用的浏览器的最新版本基本都对WebGL的功能有着很好的支持,图2.1介绍了目前PC及各移动端对WebGL的支持情况。利用WebGL能够展现丰富多彩的三维图形图像,其应用领域非常的广泛,应用领域主要有3D建模、数据可视化、物理空间模拟、在线互动游戏、房地产、游戏、电影等方面。图2.1各主流浏览器对WebGL的支持情况WebGL的虽然功能非常的强大,可以创建出令人惊叹的3D视觉效果。但是原生的WebGLAPI开发起来非常困难,涉及很多基础的开发,开发者必须付出大量的精力。目前,为了提升开发的便捷性,很多开发者使用第三方辅助库来进行开发以提高其开发效率,较具有代表性的第三方库有Three.js、CopperLicht、X3DOM以及Oak3D等。这些图形库对WebGL进行了封装,只需要少量的几行就可以实现绚丽的效果,图形库中封装了许多函数,例如camera相机、light光6 源以及材质和纹理等。为了使用户体验更佳,许多交互性的内容都被添加到了图形库中,只需要通过某个特定的事件接口就能够实现有关的动作编程。本系统采用的是Three.js作为系统的3D引擎。2.2.2WebGL坐标系统WebGL使用的是三维笛卡尔坐标系,它具有三个坐标轴,分别为x轴、y轴和z轴。在WebGL中,其原点在屏幕的中心点,当你面向计算机时,X轴的正方向是水平向右的,Y轴的正方向是垂直向上的,而Z轴的正方向则为垂直于屏幕向外。如图2.2所示,WebGL坐标系又被称为右手坐标系。yxzCanvas图2.2WebGL坐标系2.3Three.js[28]Three.js是在浏览器中运行的基于WebGL的第三方辅助图形库,是众多第[25]三方库中的领导者,使用JavaScript编写。它提供了一套基于WebGL的、非[29]常易用的JavaScriptAPI,能够简易而直观的创建3D图形中的常见物体。它使用了很多最佳实践的图形引擎技术,渲染速度很快。而且还内置了多种类型的对象和方便的工具,简化了开发的步骤,减轻了开发者的负担,功能非常的强大。目前互联网上许多优秀的WebGL作品都是使用Three.js来构建的。但是由于这[30]款3D引擎目前尚未成熟,还处于开发阶段,没有非常系统和详细的文档,这增加了学习者的难度。幸运的是Three.js的官网上提供了大量的示例和代码,可以从中学习到Three.js提供的所有的API。7 2.3.1场景构建使用Three.js程序构来建场景必须要包含三部分,即场景、照相机以及渲染[31]器。有了这三部分,我们才可以用相机将物体渲染到场景中。场景Scene是所有物体的容器,通常来说,场景在程序初始化时进行构建,在Three.js中的场景只有一种构建方式,所以构建场景使用的代码也较简单,即:varscene=newTHREE.Scene()。类Scene中包含了所有显示在屏幕上的对象,比如三维模型和灯光效果。相机Camera在3D引擎中是一个非常重要的组件,它能决定场景中的哪些对象可见,什么角度的物体会被显示出来。Three.js中的相机有两种,一种是orthographic正投影相机,另一种为perspective透视相机。两种相机的对比如图2.3和图2.4所示。图2.3正投影视图图2.3透视投影视图8 在图2.2和图2.3中可以清楚地观察到,使用正投影相机时,不管远近,物体都具有相同的视觉效果,但是采用透视投影相机时,物体却是远小近大的视觉效果,所以在不同需求时,选取的相机种类是不同的,本交互系统用于让用户浏览3D模型,所以在选取相机时,选择与人类的视觉习惯相同的相机能更好的进行交互,因此系统选用透视投影相机。透视投影相机的函数为varcamera=newTHREE.PerspectiveCamera(fov,aspect,near,far),函数初始化时其参数的取值需依据具体情况来选取。最后一部分是渲染器,渲染器决定了渲染的结果,决定绘制在页面的什么元素上,并且以怎样的方式来绘制。本文中的系统目的是浏览交互三维模型,所以需要选择WebGL渲染器,其函数为varrenderer=newTHREE.WebGLRenderer()。另外还必须要使用document.body.appendChild(renderer.domElement)将渲染器的domElement元素加入到网页元素中。其全部渲染都是绘制在domElement上的,因此将domElement元素添加到网页的文档对象中以后,渲染结果才会显示在页面中。但是仅添加domElement元素还不能保证场景的正常显示,还必须要进行渲染。渲染分为离线渲染和实时渲染两种方式。对于质量较高的场景图,需要事先将一帧帧图片渲染好,之后再将图片拼接起来连续显示,即离线渲染。而实时渲染,则需要实时对画面进行渲染,就是说即使场景中对象没有做出改变,也必须要进行重新渲染。本文系统中呈现的场景,运用当前的电脑CPU及GPU,都可以满足其实时渲染的要求。需要使场景对象实时渲染的代码如下:functionrender(){renderer.render(scene,camera);requestAnimationFrame(render);}如上述代码所示,render()函数中的requestAnimationFrame()函数非常重要,它可以多次调用函数中的参数,因此以当requestAnimationFrame()嵌套在render()中时,能够不断重复调用这两个函数,如果再在render()中添加使场景中对象的坐标变换的代码,就能够实现场景对象的每一帧都能改变其坐标的实时渲染。2.3.2几何体与材质几何体是THREE.Geometry的实例,主要用于描述场景中对象的形状。它都是由顶点与面构成的,这些顶点与面都能够通过定义其对象数组来访问。这些顶点在三维笛卡尔坐标系中拥有自己的坐标值,都是THREE.Vector3对象,这些面都是THREE.Face3的对象。在Three.js中不管多么复杂的三维模型都是由一些三角形的面组成的。通常情况下,开发者并不用直接处理顶点与面这类底层的数据,9 因为Three.js中的提供了很多用来生成常见的形状的子类,例如有平面、圆形、立方体、球体、圆柱体以及圆环等,这些基础几何体的属性都可以自己设置。绘制图形时,开发人员可以选择直接给定顶点的坐标来进行绘制,然而如需用到复杂模型的场景时,还是要使用专业的3D绘制软件来设计。材质(Materials)是THREE.Material的实例,就像是物体的皮肤,与渲染效果相关,通过设置材质可以改变物体的颜色以及光照模式和纹理贴图等。总而言之,材质可以决定对象在场景中的视觉效果。下面是几种常见的材质种类的介绍。(1)MeshBasicMaterial:基础材质,赋予几何体一种简单的颜色或线框。(2)MeshNormalMaterial:材质颜色是根据每一个面外指的法向量的计算得出其分量,可以快速辨别对象的形状。(3)MeshDepthMaterial:它显现的灰色阴影的强度会随相机的距离变化而产生变化。一般用于在添加真实纹理之前设计场景。(4)MeshLambertMaterial:这种材质会受到光照的影响,没有光照时会呈现黑色。可以用来创建暗淡的物体。(5)MeshPhongMaterial:这种材质也会受到光照影响,产生镜面反射。所以镜面和金属对象使用这种材质比较适合,没有光照时会呈现黑色。材质类的属性map(纹理图)应用十分广泛,这个属性可以覆盖拥有该材质的几何对象的表面纹理图。本文在导入3D模型时可以将纹理图一并导入并实时渲染到场景中。可通过下述代码来设置材质的map属性,其材质表面就会呈现纹理图的视觉效果。varimage=THREE.ImageUtils.loadTexture(`imagename.jpg');newTHREE.MeshLambertMaterial({map:image});2.3.3外部模型的导入使用Three.js创建常见的几何体十分方便,但对复杂的模型使用几何体来组合则会难度非常大,Three.js允许用户导入由Blender或3dsMax等软件制作的3D模型,并可导入到场景中。这些函数支持的模型格式如表2.1所示。表2.1导入模型支持的文件格式JOSN格式是Three.js自带的格式,可以用来定义几何体或者场景。虽然这种格JSON式不是正式的,但它方便使用与重用。OBJ是当前使用最普遍的格式之一。OBJ和MTL是一起使用的,MTL中详细OBJ/MTL描述了OBJ模型对象里全部组件的表面材质。Collada一种基于XML的3D格式,内部存储了3D动画及网格的数据。这是普Collada遍使用的一种格式,有大量的3D引擎与3D软件支持这种格式。10 (上接表2.1)VRML格式具有更强的三维模型表达能力,支持3D动画,同时支持颜色,材VRML质,光照等常见属性,应用更加广泛。STL是用于表示三角网格的一种格式。3D打印机打印的文件通常都是STL格式。STLCTM是由OpenCTM构建的一种3D格式,它是一种可用于存储由三角形网格CTM构成的三维模型的压缩格式。VTK主要用于存储面和顶点,是由可视化工具定义出的文件格式。VTKPLY是一种多边形文件格式,通常被用于存储3D扫描仪的信息。PLY2.4JavaScriptJavaScript简称JS,是一种跨平台的、直译式动态的解释性脚本语言,但可以基于原型(prototype)的面向对象进行编程,使用小程序段的方式来实现编程。它的基本结构同C++非常相似。但是它不用先编译,而是在程序的运行过程中逐个被解释。JavaScript和HTML结合起来使用,可方便开发人员操作。JavaScript是一种直译式的脚本语言,它可以为客户端提供数据验证、面向对象的编程以及事件驱动等,是当前世界上使用最广泛的脚本语言,最开始是由Netscape公司设计研发出来的,其不仅能够在客户端进行开发,也可以应用于服务器端编程。JavaScript技术由三个部分组成,分别是核心ECMAScript、文档对[32]象模型DOM以及浏览器对象模型BOM,如图2.2所示。ECMAScript是为了标准化JavaScript创建的,BOM封装了JavaScript和浏览器交互的方法与接口,DOM则封装了JavaScript和页面进行操作的方法与接口。许多用HTML5新特性来实现较好效果的web应用程序都需使用JavaScript。JS语言是世界上最流行的编程语言之一,其设计目标是在不占用太多系统资源及网络资源的情形下,提供一种可以将不同应用程序的通用代码嵌入其中的[33]方法。它可以不用依赖特定的操作系统或机器,也就是它是独立于操作平台的。其平台无关性使它可以广泛应用于笔记本电脑或个人电脑、智能移动终端以及服务器等,功能丰富并且适用性强。11 JavaScriptECMAScriptDOMBOM文档对象模型浏览器对象模型图2.2Javascript组成结构图2.5TomcatTomcat服务器是由Apache软件基金会开发的免费的、开源的JavaServlet容器,是由Sun、Apache以及其他公司和个人一起开发而成的。因为有了Sun[34]公司的参与和支持,Tomcat对最新的Servlet和JSP规范有着非常好的支持,Tomcat7支持最新的JSP2.2与Servlet3.0规范。Tomcat服务器性能稳定而且技术先进,并且经过不断的成长与完善,目前的Tomcat已经具有许多常用的应用系统开发功能,比如扩展性好、运行时占用系统资源较小以及支持负载平衡和邮件服务等优点,已经成为当前企业开发者用来开发JavaWeb应用时最常用的应用服务器之一。Tomcat是属于轻量级的小型应用服务器,它是一种JSP/Servlet容器,在中小型系统中或着并发用户不多的场合下被普遍使用,是开发与调试JSP程序的最[35]佳选择。Servlet最常见的用途是用来扩展JavaWeb服务器的功能组件,同时可以提供很容易使用、能移植并且非常安全的CGI代理品。Tomcat服务器是在Apache的基础上发展起来的,它扩展了Apache的功能,可以成功支持动态网页。2.6本章小结本章主要介绍了系统开发所使用的Web3D关键技术,首先了介绍了HTML5技术的发展历程及其包含的技术和特点等。接着介绍了WebGL的网页结构、坐标系统以及程序流程,可以看出直接用WebGL底层语言搭建三维场景,开发效率较低,因此我们采用Three.js这一WebGL的第三方库,用面向对象的方式开发本系统。随后对Three.js进行了系统的介绍,包括如何用Three.js搭建三维场12 景、几何体与材质以及外部模型导入。接着对本系统使用的主要语言JavaScript进行了介绍。最后对本系统使用的服务器Tomcat的发展与功能进行了介绍。13 第3章系统设计3.1需求分析3D模型的浏览与交互系统是一个在线网页版的3D模型浏览平台,用户通过此平台可以上传自己的3D模型,在浏览器端进行浏览与交互操作,并能将3D模型上传到服务器端进行保存,下次直接从服务器进行加载即可。系统的主要需求如下:(1)用户能够流畅地访问系统,系统稳定性高,并且对于可能发生的异常情况,系统能够捕获异常,对其进行及时的处理与反馈。(2)系统界面简洁友好,操作简单,用户通过鼠标键盘就能够在场景中进行3D浏览与交互,并能实现漫游、平移、旋转、缩放、剖切、撤销、恢复等功能,场景切换流畅。(3)能够方便有效的对模型进行导入导出、修改、删除等操作,能够对用户上传的模型进行云端存储,并能随时有效的加载出用户上传的模型,加载速度快。(4)简单易用,不需要安装任何插件或软件,通过浏览器便可直接浏览与修改三维模型。3.2系统结构设计基于Web的3D模型浏览与交互系统,采用B/S(Browser/Server)结构,系统的结构设计如图3.1所示,主要由三个部分组成,分别是客户端、服务器端和数据库。服务器端采用Java编写,对数据库中各表进行了封装,从而数据的安全性得到了保障。14 客户端服务器数据库/本地数据模型图3.1系统软件结构设计不同客户端如手机、电脑等通过Web浏览器导入或加载模型,服务器接收其请求,并将模型传送到客户端,然后客户端的浏览器通过WebGL加速渲染模[36]型,形成三维场景。用户可以在客户端浏览器的场景中实现场景漫游和模型平移或缩放等操作。同时,客户端可以向服务器发送请求,查看数据库中存储的模型。3.3系统布局设计系统的布局界面如图3.2所示,系统界面分为三个区域:场景渲染区域、菜单栏区域及信息栏区域。场景渲染区域是系统界面最主要的区域,用来对3D场景进行实时渲染;菜单栏区域为用户与界面交互的区域,用于用户的注册登录、模型的导入导出、编辑与操作等的控制,菜单栏区域采用下拉列表的方式;信息栏区域包括场景信息显示栏、模型基础信息栏和模型材质栏,用于指导用户使用该系统及显示系统其他一些相关信息。菜单栏区域场景渲染区域信息栏区域图3.2系统界面布局15 3.4系统功能系统由服务器端与客户端两部分组成,客户端主要用于用户与系统的交互,服务器端则主要负责存储用户上传的模型,并能通过用户的操作实时加载模型到场景中。客户端包括本地导入、本地导出、模型操作、渲染、信息的存储与显示等功能模块。服务器端主要包括用户登录、用户登出、模型与场景的加载、上传和删除等功能模块。其系统功能模块图如图3.3所示:登录登出模块加载模块导出模块客户端导入模块渲染模块上传模块服务器端信息存储与模型操作模块显示模块图3.3系统功能模块图3.5系统接口设计该系统提供了标准的API接口,我们定义了七个类作为API接口,分别是用户注册类RegisterServlet,登录类LoginServlet,注销类LogoutServlet,上传模型类UploadServlet,加载模型类LoadServlet,查找模型标识类ModelListServlet和删除模型类DeleteServlet。用户注册类API用于添加用户,它调用了数据库的用户表,实现用户表中用户的增加,成功注册后用户即可登录。API设计如下表3.1所示。16 表3.1用户注册类接口表模块说明模块文件名RegisterServlet.java所在路径src/com.polaris.register.web.servlet/RegisterServlet.javaurl路径/RegisterServlet下级模块调用RegisterService模块输入1.字段名为pltID,值为平台ID(已经默认给出Info.PLATFORM_DEFAULT_ID)2.字段名为username,值为所要注册的用户名3.字段名为password,值为所要注册的用户密码模块输出注册成功则返回10,否则返回20数据库操作使用了th_user表程序逻辑用户注册界面openWindowOption.js登录类API用于提供用户登录,首先调用数据库的用户表,检查是否存在该用户,若存在并密码输入正确,则可进行加载和上传操作,此时调用数据库的模型总表和模型详表。API设计如下表3.2所示。表3.2登录类接口表接口说明模块文件名LoginServlet.java所在路径src/com.polaris.loginout.web.servlet/LoginServlet.javaurl路径/LoginServlet下级模块调用LoginService模块输入1.字段名为param_username,值为用户名2.字段名为param_password,值为密码模块输出1.成功则将user对象保存在session域中,失败则不做此操作2.成功则返回json字符串,{“result”:true,“username”:登录的用户名}失败返回json字符串,{“result”:false}数据库操作使用了tb_total_model、tb_detail_model表程序逻辑用户登录界面openWindowOption.js17 注销类API用于退出用户登录。API设计如下表3.3所示。表3.3注销类接口表接口说明模块文件名LogoutServlet.java所在路径src/com.polaris.loginout.web.servlet/LoginServlet.javaurl路径/LogoutServlet下级模块无模块输入字段名为session_user值为用户对象(要求用户必须登录)模块输出移除session中的用户对象数据库操作无程序逻辑用户注销界面openWindowOption.js上传模型类API提供登录用户上传模型或场景到服务器保存,调用数据库的模型总表和模型详表。API设计如下表3.4所示。表3.4上传类接口表接口说明模块文件名UploadServlet.java所在路径src/com.polaris.upload.web.servlet/UploadServlet.javaurl路径/UploadServlet下级模块调用UploadService模块输入1.字段名为session_user,值为用户对象(要求用户必须登录)2.缓存目录(Info.REPOSITORY_PATH已经给出)3.缓存大小(Info.SIZE_THRESHOLD已经给出)4.字段param_modelName,值为模型的名字5.字段param_modelPicServicePath,值为服务器上的模型附属文件路径,路径之间用分号(;)隔开6.上传的表单项模块输出1.将附属文件保存在指定目录2.在数据库中插入模型记录和相应的附属文件记录3.返回上传信息(10为上传成功,20为上传失败,30为上传大小超出范围)数据库操作使用了tb_total_model、tb_detail_model表程序逻辑保存用户上传的模型界面openWindowOption.js18 加载模型类API提供登录用户加载模型或场景到客户端进行场景渲染,调用数据库的模型总表和模型详表。API设计如下表3.5所示。表3.5加载模型类接口表接口说明模块文件名LoadServlet.java所在路径src/com.polaris.load.web.servlet/LoadServlet.javaurl路径/LoadServlet下级模块调用ModelService模块输入字段名为param_modelID,值为模型ID模块输出该模型ID对应的附属文件的JSON形式(“附属文件ID”:“附属文件目录”)数据库操作使用了tb_total_model、tb_detail_model表程序逻辑返回给定的模型对应的附属文件路径界面openWindowOption.js查找模型标识类API提供登录用户查找模型或场景,当用户需要从服务器加载模型到客户端时,必须先在数据库中查找该用户的云端存储了哪些模型或场景,调用数据库的模型总表。API设计如下表3.6所示。表3.6查找模型类接口表接口说明模块文件名ModelListServlet.java所在路径src/com.polaris.load.web.servle/tLoadServlet.javaurl路径/ModelListServlet下级模块调用ModelService模块输入字段名为session_user,值为用户对象(要求用户必须登录)模块输出该用户的所有模型文件的JSON形式(“模型ID”:“模型名字”)数据库操作使用了tb_total_model表程序逻辑返回给定用户的所有抽象的模型文件界面openWindowOption.js删除模型类API提供登录用户删除保存在服务器模型或场景,调用数据库的模型总表。API设计如下表3.7所示。表3.7删除模型类接口表接口说明模块文件名DeleteServlet.java所在路径src/com.polaris.delete.web.servlet/DeleteServlet.javaurl路径/DeleteServlet19 (上接表3.7)下级模块调用DeleteService模块输入字段名为param_delete_modelIDs,值为模型ID模块输出修改模型的状态为删除状态,不修改附属文件。成功回写“succeedtodeletethemodels!”数据库操作使用了tb_total_model表程序逻辑删除给定的模型界面openWindowOption.js3.6数据库设计3.6.1总体构想为了使模型能够云端存储,并实现模型的动态加载与上传,将模型数据存入MySQL数据库中,用户登录自己的账号即可从数据库中加载上传过的模型,通过数据库的查询和删除等操作实现模型的加载与删除等操作。本系统所涉及的表主要有用户表tb_user、平台表tb_platform、模型总表tb_total_model、模型详表tb_detail_model和状态表tb_status,各个表之间的联系如图3.4。图3.4数据库20 3.6.2用户表用户表主要用于存储用户的信息,包括用户编号、平台编号、用户名、用户密码等相关信息,如表3.8所示。useID用于描述用户编号,pltID用于描述平台编号、username用于描述用户名、password用于描述用户密码、usrStatus用于描述用户状态。其中usrID为tb_user表的主键,pltID为tb_user的外键。表3.8tb_user表的设计字段名数据类型长度主/外键默认值是否为空描述usrIDBIGINT8主键否用户编号(自增)pltIDINT4外键否平台编号usernameVARCHAR20否用户名passwordVARCHAR20否用户密码usrStatusINT22否用户状态3.6.3平台表平台表主要用于存储平台的信息,包括平台编号、平台名称、创建时间等相关信息,如表3.9所示。pltID用于描述平台编号、username用于描述用户名、password用于描述用户密码、usrStatus用于描述用户状态。其中pltID为tb_platform表的主键。表3.9tb_platform表的设计字段名数据类型长度主/外键默认值是否为空描述pltIDINT4主键否平台编号(自增)pltNameVARCHAR30否一级类别名称pltCreTimeDATETIMENow()否平台创建时间pltStatusINT22否平台状态3.6.4模型总表模型总表主要用于存储模型编号、创建者、模型名称、模型创建时间等相关信息,如表3.10所示。mdlID用于描述模型编号、usrID用于描述创建者的编号、mdlName用于描述模型名称、mdlCreTime用于描述模型的创建时间、mdlStatus用于描述模型名称的状态。其中mdlID为tb_total_model表的主键,usrID为tb_total_model为表的外键。21 表3.10tb_total_model表的设计字段名数据类型长度主/外键默认值是否为空描述mdlIDBIGINT8主键否模型编号(自增)usrIDBIGINT8外键否创建者mdlNameVARCHAR50否模型名称mdlCreTimeDATETIMENow()否模型创建时间mdlStatusINT22否模型状态3.6.5模型详表模型详表主要用于存储模型文件编号、模型编号、文件路径和文件状态等相关信息,如表3.11所示。mdlTtID用于描述模型文件编号、mdlID用于描述模型编号、mdlPath用于描述文件路径、mdlStatus用于描述文件的状态。其中mdlTtID为tb_detail_model表的主键,mdlID为tb_detail_model表的外键。表3.11tb_detail_model表的设计字段名数据类型长度主/外键默认值是否为空描述mdlTtIDBIGINT8主键否模型文件编号(自增)mdlIDBIGINT8外键否模型编号mdlPathVARCHAR20否文件路径mdlStatusINT22否文件状态3.6.6状态表状态表主要用于存储状态编号、表名、属性名、属性值和状态描述等相关信息,如表3.12所示。sttID用于描述状态编号、tblName用于描述表名、fldName用于描述属性名、sttValue用于描述属性值、sttDesc用于描述状态描述。其中sttID为tb_total_model表的主键。表3.12tb_status表的设计字段名数据类型长度主/外键默认值是否为空描述sttIDBIGINT8主键否状态编号(自增)tblNameVARCHAR20否表名fldNameVARCHAR20否属性名sttValueINT22否属性值sttDescVARCHAR50否状态描述3.7本章小结本章主要介绍了基于Web的3D模型浏览与交互系统的设计过程,首先对用户的需求进行了分析,确定系统的目标以及功能,然后对系统的结构进行设计,22 确定采用B/S结构来架构整个系统,接着设计系统界面布局,将尽可能多的信息呈现在页面中,然后对系统的功能进行了分析,接着对系统的API进行了设计,最后对数据库进行设计,主要包括用户表、平台表、模型总表、模型详表和状态表等。23 第4章系统的实现4.1系统主界面的实现主界面分为三个区域:场景渲染区域、菜单栏区域及信息栏区域大体布局。如图4.1所示。图4.1主界面实现图4.2主要算法的实现4.2.1BSP分割算法由于Three.js本身并没有提供几何体布尔运算的布尔函数,因此本系统的剖切操作使用Three.js的扩展库ThreeBSP.js函数库进行布尔运算,主要用到了BSP[37]分割算法,下面将对BSP分割算法的实现进行解析。首先需要先构建一个根节点,并把全部的顶点表、平面表以及结构化三角形表一起放入这个根节点中。然后,分割的流程如下:1)遍历该节点的全部备选平面,寻找一个合适的分割平面;2)若找不到合适的分割平面,则这个节点是一个叶子节点,返回;3)若找到了,标记这个平面已经被使用过;[38]4)新建两个新节点,一个为正向节点,一个为负向节点,挂接到本节点下;24 5)遍历所有结构化面。若结构化面是在分割平面的正向,那么就将这个结构化面与其所对应的平面加入到正向节点中。如果结构化面在分割平面的负向,就放入到负向节点中。如果结构化面被分割平面分割,就分割此三角形,并将分割后的结果放入相应的子节点;(发现结构化面所对应的平面已被标记时,则只放结构化面,不放分割平面,以防同一个平面用于分割两个以上空间,违反BSP空间二分逻辑的唯一性)6)遍历全部细节面。处理细节面的方法和结构化面相似,但是由于不用考虑与细节面所对应的平面的问题,相对更简单;7)遍历完毕,由于全部的结构化三角形、平面以及细节面都已经转移到两个子节点中了,所以从本节点中解除掉所有的结构化三角形、平面和细节面的引用。节点所需保留的数据只需要是分割平面和两个下级节点的指针即可;8)对两个子节点,分别从1)开始递归执行。当执行结束时,就构建了一棵完整的BSP树,全部的节点中只保留有节点的分割平面与两个下级节点,而与渲染有关的结构化三角形以及细节面就全都在叶子节点中。最后,只需顺着根节点递归,将节点全部组织成节点表就完成了。4.2.2动画模型算法本系统支持dae格式和vrml格式的3D模型动画的浏览,模型动画可以理解为,在设定的时间轴内通过改变对象的数据及数据结构来实现。模型动画是由连续的帧组成,每一帧都需要把模型重新渲染。实现模型动画的播放,关键就是解析出时间值与对象数据变化之间的对应关系,进而渲染出每一帧动画。下面将分别对dae格式和vrml格式的动画进行解析。dae格式的动画其时间是以关键帧的时间点来存储的,两个关键帧之间往往对应着一段独立的动画,动画存储在
此文档下载收益归作者所有