基于Java3D的VRML三维模型变换
摘要:以Java3D的API接口为基础,导入VRML三维图形,使用Java3D中不同的类方法对导入的三维图形不同节点进行变换。
关键词:Java3D VRML 几何变换 视图 光照 交互
由于Java语言的平台无关性、安全机制、高可靠性和内嵌网络支持已经使之成为当前编写网络应用程序的首选工具之一。若用Java语言开发三维网络应用程序,基于它自身的面向对象的特征,相比于C++易学易用的特点,那对于程序员来说就获得了一个可编写三维应用程序的优良工具。
一、 Java3D API
Java3D是SUN公司在研究OpenGL三维图形库及VRML虚拟现实建模语言的基础上开发出来的一个API,包含了几乎所有编写JAVA交互三维应用程序所需要的最基本的类、接口[5]。是适用于Internet环境的跨平台三维图形开发工具包。Java本身所具有的网络功能与OpenGL、DirectX的图形图像处理功能相结合,使得Java语言的三维图像可以通过浏览器在Internet上显示。而且用Java3D生成的代码具有可传输性,即从服务器端到客户端传输的是生成三维图形的程序与数据(Applet),而不是图形本身,这样可以大大减少网络传输数据量。
目前流行的几种三维图形格式中,VRML被看着为一❣个通用的三维图形格式,其他主要的三维图形格式均可以转换成VRML格式。
二、导入VRML图形
为了在Java3D中调用VRML图形,需要一个vrml97.jar包,它是SUN公司提供的一个VRML的Loader。有了Loader这个jar包后,就可以方面的调用VRML图形了。具体步骤为:
先定义一个VrmlLoader对象:
VrmlLoader vrmlLoader = new VrmlLoader;
根据URL地址,和三维图形文件名,得到被调用图形的场景图
VrmlScenevrmlScene=vrmlLoader.load;
VrmlScene类常用的方法有
* Background[] getBackgroundNodes; 返回一个场景中包含的所有背景节点的数组
* Behavior[] getBehaviorNodes;返回一个场景中包含的所有行为节点的웃数组
* Light[] getLightNodes;返回一个场景中包含的所定义的灯光节点的数组
* java.util.Hashtable getNamedObjects;返回一个Objects哈希表,这个哈希表包含所有已经命名的Objects以及和这些Objects相关的场景
* BranchGroup getSceneGroup;返回场景图中BranchGroup根节点。因为只有BranchGroup节点才能直接附属到一个Local类对象上,所以用这个方法返回的BranchGroup节点可以直接添加到java创建的场景节点下,也可以用detach()方法从Local类对象上剥离出来。
* Sound[] getSoundNodes; 返回导入文件中所定义的声音节点数组
* TransformGroup[] getViewGroups; 返回导入文件中所定义的几何变换节点数组
通常情况下,我们在Java3d中调入VRML三维图形,不仅仅是原有图形的显示,而£是想根据需要,用Java语言对原
有图形作出一定的修改,如做一些几何变换,视图改变,调整光照和纹理,以及加入一些鼠标、键盘行为,以达到一定的交互目的。
三、行为和交互
ต互联网中的三维图形显示有两种常见的动态变化:交互和动画。交互(Interaction)是根据用户输入信息改变图形场景。动画(Animation)生成随着时间变化的绘制序列,产生动态效果。在Java3D中,可以用三种方式实现用户与图形场景间的交互。一是利用java的面向对象程序设计的优点,通过适用Behavior类以及其他相关类,向场景中引入了动画和交互逻辑。
MouseRotate mouserotate = new MouseRotate;
MouseZoom mousezoom = new MouseZoom;
MouseTranslate mousetranslate = new MouseTranslate;
二是利用java中的事件处理模型,有事件源生成各种事件,一个或多个监听器监听事件。具体应用时,先要在类定义时,要实现一个或多个监听器
public class Applet3D extends Applet implements ItemListener,WindowListener, ActionListener, CheckboxMenuListener{}
在方法定义中,添加各监听器向组件登记以获得事件发生信息
checkBox = new Checkbox;
menu.add;
☢checkBox.addItemListener;
在处理事件类中,实现监听器接口的方法。
四、 结束语
Java3D API大大提高了3D图形的开发能力和显示效果,扩大了3D图形在互联网中的应用,它的三维图形导入功能使得网络程序开发人员不再被困于复杂的三维虚拟图形的开发上,而把重点放在整个场景的布局,组合上和动态交互上,这样就可以大大降低三维网络应用程序开发难度,使得三维网络技术可以得到更广泛的实际应用。
参考文献:
[1]李志均,傅秀芬 Java3D API 与Java3D编程技术[J]. 现代计算机1999(4):28-33
[2]孙莉,廖文和,刘长毅,周炜 基于VRML-Java3D的交互式装配可视化环境构建[J] 电气技术与自动化. 2006.35 :106 ~109
[3]赛博科技工作室.VRML与Java编程技术[M]. 北京:人民邮电出版社, 2002 -1.