网上三维虚拟史馆模拟系统研究
2014-08-20朱英浩
朱英浩
(国防信息学院四系,湖北 武汉430010)
0 引言
当前,基于Flash格式(SWF)全景影像的网上三维展示技术已经被广泛用于展馆、史馆、校园和旅游景点的宣传介绍,其优点是所展示的三维场景表面逼真,文件大小与对象复杂程度基本无关,制作过程相对简单,但缺点是必须以已经存在的实际场景为依据,展示时只能绕若干个中心点旋转或缩放,不能沿中心点形成的路线漫游,无论修改场景中的哪个要素都需要由开发者重新制作,不便于建设单位灵活修改和自由扩充.如果用相机拍摄实际场景作为模型及其纹理主要素材来源,用Photoshop等工具处理纹理主要素材,用AutoCAD或3DStudio MAX等工具通过平面设计与三维建模,将生成的三维模型导出为虚拟现实建模语言(virtual reality modeling language,VRML)或可扩展3D(eXtensible 3D,X3D)格式,再发布到网页上,就可以克服上述缺点.这种方法除了也需要以已经存在的实际场景为依据外,最主要缺点是平面设计与三维建模均由专业级制作工具软件完成,制作过程相对复杂,对于纹理制作需要大量人工干预,比如需要手工排版与修饰的文字变为纹理图片后就不再有文字属性,涉及要素修改也需要由开发者重新制作.积极吸取了国内外史馆网站和虚拟场景建设成果优点,将标准化和扩展性相结合,以Visual C++for Windows为编程工具,把史馆所涉及到的各个要素进行了分层分解和统一编码管理,构建了“网上三维虚拟史馆模拟系统”,已经实现了在只有平面设计图和版面图片以及对应主题的影像等部分特定要素而没有实际存在的史馆条件下,用户经过少量操作,系统就可以自动生成包含网页框架、VRML/X3D格式三维场景、导航和控制按钮以及JavaScript程序的网上三维虚拟史馆,建设单位可以灵活修改和自我扩充各个要素,不仅可以部分弥补没有实体史馆的缺失,而且可以为实体史馆的建设提供参考.
1 主要功能模块实现
要实现系统方便的网上三维虚拟史馆生成、修改与扩充功能及其在远程的浏览与交互控制,涉及的主要功能有文件目录编码管理、平面设计、版面设计、元素生成、场景生成和网页生成等,对每一功能模块都进行了精心设计与实现,并与其他功能模块协调关联.
1.1 文件目录编码管理 通过分析平面设计图的史馆对外展示部分,主要内容可以划分为展板、展桌、标牌、展牌、灯箱、灯光、墙面、壁柱、吊顶、天花板、地毯、地面、墙基、影像、塑像、音乐、花坛和参观路线共计18类要素,构成三维史馆就以这18类要素为基本依据.由于地面是场景其它所有要素的基础,故在地面文件内首先对展厅进行编号作为一级编码(2位,如00),按展厅划分主题名称、播放音乐和场景视点.展板是展厅内最主要的对象,每个展厅都有展板,展板涉及到版面标题、附加标题、展板说明、数量不等的图片及其字数不等的图片说明.因此,在一级编码基础上对展板进行二级编码(2位,如00_00),展板涉及的底板图片、版面标题、附加标题、展板说明就以此为依据进行文件目录编码管理,再在二级编码基础上对展板图片进行三级编码(3位,如00_01_000),每张图片所对应的纹理图片、放大图片和图片说明及提示信息就以此为依据进行文件目录编码管理.文件目录编码管理功能模块用对话框对平面设计所有要素图层文件名称及路径进行设置和自动产生.
1.2 元素生成功能 由于原始图片通常分辨率较高,不同分辨率和宽高比例的原始图片仅适用于输出采样,难以直接用于排版,解决方法是对每张原始图片都生成256×256同名小图片,建立图目表,用逻辑值标识小图片是否已经生成,避免修改和扩充时重复生成.属于不同类型要素的版面名称、版面说明、照片说明和标牌及展牌所对应的文字都需要考虑排版换行和保持字体比率,生成对应的不同方向、大小、颜色、字体纹理图片,比如标牌主要是竖排的汉字名称,但下方可能还有横排的年月数字,需要合成为同一块标牌.解决方法是建立标牌目录表,赋予文字内容和不同类型要素以及几何尺寸等属性,通过Visual C++调用三维图形库OpenGL技术编程实现不同类型文字生成专用程序,分别用“门牌生成”、“标牌生成”、“展牌生成”、“标题生成”和“年月生成”把对应文字先屏幕立体感显示,再按照需要自动旋转、缩放、剪切和排列保存为图片文件作为纹理来源,并构建对应的矢量提示文字.
1.3 平面设计功能 平面设计功能模块以平面设计图为依据对18类要素图层自动生成一个项目工作空间(*.wor)文件,对每个图层分别产生MapInfo交换格式(*.mif/*.mid)的图形信息和属性信息数据结构及其输入/输出批处理功能,用户可以很方便地用MapInfo完成每个图层的修改与输入/输出.
1.4 版面设计功能 展板本身都具有位置、朝向、基高、宽度、高度以及厚度等几何属性,内部又涉及到复杂的排版,工作量较大,版面设计功能模块可以对应每块展板自动生成一个工作空间(*.wor),包含了由展板宽度和元素图片大小自动确定的版面标题层和附加标题层,由展板高宽比、版面图片平均高宽比与说明文字数量初步自动分布好的展板说明层、版面图片层和图片说明层,用户可以很方便地对每块展板进行文字修改和少量版面调整.
1.5 场景生成功能 场景生成功能模块可以在指定路径目录生成主场景文件(Museum*.wrl)和18类VRML/X3D三维对象文件(*.wrl)及其对应纹理图片、放大图片和图片说明(如图1所示).主场景包含了多个视点语句、交互控制语句、弹出放大图片语句和调用其他文件的“Inline”语句,考虑到用户需要网络条件,对可带音乐的地面、标牌与灯箱的纹理图片和展板弹出放大图片分浏览版、标准版和高清版3个版本.每个图层修改后对应三维对象文件独立更新,无需修改其他三维对象文件和主场景文件,大大方便了用户自我修改和灵活扩充.
1.6 网页生成功能 网页生成功能模块使得用户无需编程就可以根据指定的路径目录自动生成包含三维场景、导航条、导航图和控制条的框架网页(*.html)及其包含的JavaScript程序,与三维主场景内部对象自动按图层编码确定所有模型名称的放大链接对应关系和浏览路线的视点控制关系,通过网页操作可以实现对场景中展板图片、说明或展牌的弹出放大图片和视点控制.其中导航条和导航图的每块区域均代表一个展厅,分别按历史阶段和几何位置排列,用于实现鼠标对展厅视点的切换.导航控制条图标分别用于实现停止、漫游、行进、左转、右转、放大、缩小、仰视和俯视等操作.
图1 系统部分界面
2 网上三维场景交互关键技术
三维主场景是网页的嵌入对象,在三维主场景文件和网页文件中均嵌入了JavaScript程序,开发编程时调试好源码后分别放在各自生成模块内,访问网页使事件传入到三维主场景内,点击三维场景对象又将其属性传到网页.设高清版场景中某个展板图片编号为xx_xx_xxx,序号为xxxxx,三维坐标为[x1 y1z1,x2y2z1,x2y2z2,x1y1z2],放大图片像素宽高分别为Imwidth与Imheigh,主要步骤如下:
1)在网页内标识为Scene的嵌入VRML对象,把showDiv()作为其鼠标进入事件函数:
〈object onmouseover="showDiv()"classid="CLSID:86A88967-7A20-11d2-8EDA-00600818EDB1"align="absmiddle"id="Scene"〉〈param name="Scene"value="MuseumHDMI.wrl"〉〈/object〉.
2)在网页的JavaScript程序内定义相应的变量M_e和函数showDiv():
其中Groupofscript[]是与元素图片同时生成的“*.js”文件内提示文字字符串数组,可以避免VRML
对象的汉字乱码问题,函数pup()、dowhat()和dismiss()分别用于弹出图片和文字提示及其消失:
3)在三维主场景文件内分别定义带触摸传感器的图片框架RectPT_xx_xx_xxx、JavaScript函数JS()以及路由语句:
这样根据展板或展牌图片编号从指定的文件目录而不是从VRML对象中读取触摸展牌图片对应的弹出放大图片,可以大大减少三维主场景的数据量,实现所有展板图片的弹出放大.
3 结语
建设单位只要具备相关数字资料,用本文中开发的系统按流程运行后,很快就可以建立浏览版、标准版和高清版的网上三维史馆(如图2所示),具有60年光荣历史的某单位由此所构建的网上三维史馆目前已经试运行,初步表明建设单位可以灵活修改,访问用户可以满足应用服务.
图2 网上三维史馆部分场景
[1]张杰编.VRML2.0交互式三维图形编程[M].汕头:汕头大学出版社,1991.
[2]汪志达,叶伟.VRML虚拟现实网页设计[M].北京:清华大学出版社,2006.
[3][加]Jonathan Snook.JavaScript捷径教程[M].北京:人民邮电出版社,2009.