罗建华
摘 要:文章主要从场景数据、LOD算法、VRML场景浅谈Java3D虚拟场景的关键技术,并简要分析场景数据、LOD算法、VRML场景的一些缺点及改进方法。
关键词:Java3D虚拟场景;场景数据;LOD算法;VRML场景
随着信息技术和网络技术的发展,三维虚拟场景技术将人类的交流带入了新的领域,人们在三维虚拟场景中会产生身临其境的感觉。三维虚拟场景技术高度融合了人工智能、计算机、通信、热学、数学、机械、心理学和社会学学等多个方面的科学知识和学科知识。文章就Java3D虚拟场景的关键技术进行简要说明。
1 场景数据存取
1.1 传统场景数据存取存在的问题
当前的Java3D API不具将Java3D场景图直接写入文件中的功能,而且JAVA3D数据存取序列化也具备Java3d的场景图对象,导致Java3d的场景数据只能采用即时存取的方式,而不能直接将场景数据作为可以直接保存的序列流。但是在即时存取方式下,只有在创建期间才能修改或者访问的Java3dAPI的场景图对象,Java3api被编辑或浏览,则无法保存场景图对象。这一特点导致在通过重复原先操作才再次生成编辑得到的场景,编辑后的场景不能作为成品被保存或者调用,这一缺点给用户实际应用过程中带来许多麻烦。
1.2 场景数据存取优化措施
如果Java3d场景图可以作为序列直流直接保存,则可以很好的解决以上问题。为实现Java3d数据的序列化存取,在对具体三维场景的Java3d结构做封装操作是采用自定义的Java对象进行分装Java对象的数据仅包含三维场景的数据,而在实例化调用Java3d场景对象中,只有在Java3D方法中才实施实例化调用。这种做法将三维场景的序列化只对Java对象的数据文件成员才起作用,从而可以达到Java3D场景对象支持Java的数据存取序列化。
2 LOD算法
2.1 传统LOD算法的弊端
细节层次模型LOD是一种既可以降低场景复杂度,又可以提高图形实时显示速度的有效方法。但是传统LOD算法也具有很明显的缺点。按照传统的LOD思路,由于物体视距存在差异,需要建立多个LOD模型。在构建含物体的数量庞大的场景中,在场景内的物体都需要满足视距变化以及实施运算,则需要在场景中建立多级模型,导致LOD模型的数量更为庞大[1]。庞大的LOD数量模型不仅会导致代码量的增大,而且多于的物体多级模型也需要在网络传输中占用宽带,造成网络拥挤。
2.2 LOD算法的改进
通过研究可以发现,相邻两级LOD模型代码中的大部分数据具有一致性,知识相邻两级LOD模型之间至有部分细节数据代码的差别。即在视点能够分辨物体轮廓至逐渐逼近物体模型的过程,相邻两级LOD模型代码之间为逐渐增加的关系。相邻两级LOD模型代码中相同的部分数据只在其中一个LOD模型中保留,而不知两个LOD模型中都保留,并且在每次视点靠近一级就多现实一些模型细节。依照上述思路进行模型设计,只要建立一个LOD模型并且显示相关细节分析即可,就可以有效避免针对同一物体建立不同的LOD模型,以表明数据代码重复多余。而且传统LOD算法下图像跳变与LOD模型过多导致的数据矛盾有问题也可以得到有效的解决,其原因在于改良的LOD算法中的LOD模型内部层次更加细化,LOD切换时的变化更少,对图像跳变的影响也更小。而且改良的LOD算法在JAVA3d中可得到很好的实现。依据Java3D的语法,虽然JAVA3d代码将模型封装成类,并且无法改动。但是为了提高JAVA3d的交互性,JAVA3D的语法中也包含了CAPABILITY命令,该命令实现了用户输入或其它控制操作可以改变渲染过程中物体的变换和物体大小、形状、颜色等方面变动[2]。此外,该方式还可以实现调用和限制已封装编译的模型,从而达到在不增加多于数据代码的基础上分层次地显示物体模型的目的。
3 VRML场景
3.1 VRML场景的缺点
VRML(虚拟显现实造型语言,Virtual Reality Modeling Language)多用于实现网页中的三维动画效果以及用户交互。VRML存在一些严重的缺陷。VRML作为一种标记语言,VRML的语言能力可以通过脚本语言的方式得到增强,但是VRML无法对文件系统操作的应用,不能访问本地数据,也不具备在本地磁盘上进行写数据操作的能力。此外,VRML文件只能同时表示单一的场景图,如果用户需要进行修改场景图操作,必须通过修改VRML源文件方式才能实现。如果某一个VRML文件处于加载状态,而某个场景由该VRML文件定义为初始状态,用户对VRML的操作必然会改变场景图,但是VRML不具备存盘功能,因而场景在改变后也会丢失。当重新加载文件时,场景又会恢复到初始状态。最后,浏览VRML文件的浏览器必须满足已安装插件的要求,这一要求导致用户的体验极为麻烦。
3.2 VRML场景的调用
如果采用VRML描述虚拟场景,并且使用Java3D编写应用程序,要实现对VRML场景中对象的操作,必须将VRML描述的节点对象转换为JAVA3D对象,将使用Java3d场景图的组织结构将经Java3d转换后的节点组织起来,再依据常规JAVA3d程序逐一添加功能。与之对应的VRML文件则被解析和转换成一系列的JAVA3D的Shape3D节点对象,并且被加入TransformGroup组中。依照以上操作即可实现在JAVA3D中调用VRML场景。
[参考文献]
[1]季婷.基于Java3D的LOD算法的研究与优化[J].天津职业院校联合学报.2013,(02).
[2]袁剑锋.VRML与Java 3D转换关键技术的研究[J].计算机与现代化.2010,(09).