基于Java 3D的虚拟漫游技术研究

时间:2022-10-19 08:28:15

基于Java 3D的虚拟漫游技术研究

摘 要:探讨在当前网络环境下可满足网络可视化要求的虚拟漫游技术,剖析虚拟漫游控制技术即视点变换情况,给出一种科学有效的视点变换关系,保存当前的视点坐标和方位,利用键盘来控制漫游方向和行进。结合Java 3D的代码可传输特性,基于java 3d构建了可满足网络可视化要求的虚拟建筑物漫游,效果较好。

关键词: Java 3D; 虚拟漫游; 视点坐标; 网络环境

中图分类号:TN911; TP391 文献标识码:A

文章编号:1004-373X(2010)14-0084-02

Investigation of Virtual Ramble Technology Based on Java 3D

LIN Lü-ping, WANG Ru

(Xi’an University of Architecture & Technology, Xi’an 710055, China)

Abstract: The virtual ramble technology which can meet the request of the network visualiztion under the current network environment is discussed. The virtual ramble control technology (variation of view point) is analyzed. A variation relation of view point which is scientific and effective is given. The virtual ramble which can meet the request of network visualization based on Java 3D is built by preserving the current eye coordinate and azimuth, utilizing the keyset to control the ramble direction and movement, and combining the code transmission charicteristic of Java 3D.

Keywords: Java 3D; virtual ramble; eye coordinate; network visalization

虚拟漫游技术是虚拟现实(virtual reality)技术的重要组成部分,在各个领域,尤其是旅游、航天航空、医学、建筑等行业有着巨大的发展空间[1]。传统的编程工具如OpenGL和DirectX,能够有效的进行三维开发,从而实现虚拟漫游,但是,随着Internet的快速发展,B/S(Browse/Server)系统拥有传统的C/S(Client/Server)系统所没有的巨大优势,在B/S系统中,如果采用OpenGL等传统的编程工具,只能在Web服务器端生成图像,然后再一幅幅地传给客户端显示,在当前的Internet传输能力下,是不可能满足网络可视化要求的。而Java 3D却可以很好地解决Internet传输能力所带来的问题,因为它具有代码可传输性,这使得用来生成复杂三维图像的程序可以方便地从服务器端传送到客户端,然后在客户端本地运行,进而生成三维图像。因为传输的不是图像本身,而是控制图像生成的程序和数据,所以大大缩减了网络传输的数据量[2]。

1 Java 3D

Java 3D是SUN公司继Java的火爆成功后,于1997年推出的面向网络的交互式三维图形应用程序接口(API)[3]。Java 3D有纯粹的面向对象结构,其基本数据结构(场景图)是一些具有方向性的不对称图形组成的树状结构[4],涵盖了整个视景和立体空间的完整描述[5];Java 3D封装了流行的3D开发工具OpenGL和DirectX,提高了编写三维图形程序的层次――编程时不需要考虑光照、着色、碰撞检查等复杂的图形学问题;Java 3D来自于Java,所以它拥有了一切Java所拥有的优点,比如一次编写,就可以跨平台运行,而且还可以充分借用Java的各种功能,如交互式用户接口、图像处理、字体、绘制二维图形等;并且,Java 3D能并行着色,能自动利用硬件的加速功能来快速生成图像,还能对场景进行预编译以提高效率[6]。

2 视点变化

虚拟漫游的实质与现实中的漫游一样,物体在三维世界中是不变的,通过改变观察者的视点,以及视角,来获得不同的感官效果,从而实现漫游[7]。

Java 3D虚拟空间的坐标系统是右手坐标系的。┆x轴的正方向是水平向右,y轴的正方向是垂直向上,┆z轴正方向指向观察者[8]。在实现虚拟漫游的时候,物体与所处虚拟空间坐标系的相对位置关系是不变的,改变的是观察者的位置[9]。

在现实世界中,人观察事物有前进、后退、左走、右走等行为,相应的,观察者在世界坐标系中的坐标也发生改变,当观察者改变视线的方向和角度时,所看到的景物也不一样,虚拟世界中的漫游也采用同样的道理[10]。这里可以模拟向前走和向左走的行为。构造┮桓霆这样的坐标系,如图1所示,д南方向为z轴正方向,正东方向为x轴正方向,O为原点,再标志2个点A和D,其中,OA垂直于OD;设定OA为视线的方向,则OD即为向左走时的方向。由点A做一条直线垂直于x轴并交于点B,另做一条直线垂直于z轴并交于点C;同理过D做x轴、z轴的垂线,垂足分别为E,F。可以发现,|OB|即为向前走时在x轴移动的距离,|OC|即为向前走时在z轴移动的距离;|OE|即为向左走时在x轴移动的距离,|OF|即为向左走时在z轴移动的距离。

图1 视点的坐标位置

如图1所示,视线与z轴负方向的角度θ在[0,90°]中,当观察者从点O向前移动到点A,即观察者的坐标从点O移动到点A时,相当于观察者先从点O沿x轴负方向移动到点B,再由点B沿z轴负方向移动到点A。其中|OB|=|OA|sin θ,|OC|=|OA|cos θ。假定观察者的原始坐标为(x1,z1),向前移动s,到达新的坐标点(x2,z2);г蚩梢缘玫饺缦鹿式:

x2=x1-ssin θ,z2=z1-scos θ

当观察者从点O向左移动到点D,由于OD垂直于OA,所以∠DOE=θ。由此可知|OE|=|OD|cos θ,|OF|=|OD|sin θ。假定观察者的原始坐标为(x1,z1),向左移动s,到达新的坐标点(x2,z2);г蚩梢缘玫饺缦鹿式:

x2=x1-scos θ,z2=z1+ssin θ

同样的,Е仍谄渌3个象限中时,当观察者从坐标(x1,z1)向前移动s到坐标(x2,z2),Ь可以得出以下公式:

x2=x1-ssin θ (1)

z2=z1-scos θ (2)

当观察者从坐标(x1,z1)向左移动s到坐标(x2,z2),均可以得出以下公式:

x2=x1-scos θ (3)

z2=z1+ssin θ (4)

同理可推出,当观察者由坐标(x1,z1)向后移动s到坐标点(x2,z2)时,Я礁鲎标点之间的关系如下:

x2=x1+ssin θ (5)

z2=z1+scos θ (6)

当观察者由坐标(x1,z1)向右移动s到坐标点(x2,z2)时,Я礁鲎标点之间的关系如下:

x2=x1+scos θ (7)

z2=z1-ssin θ (8)

当观察者的坐标发生改变时,相应的,视点的坐标也在改变,而且变化的方向与距离跟观察者移动的方向与距离一致。

3 建筑物漫游

利用上述的视点变换公式并结合Java 3D的知识,可以得出以下算法:

private TransformGroup targetTG; /*声明一个TransformGroup对象*/

private double angle = 0.0; /*水平方向的角度*/

private double[]people={0.0,0.0,0.0}; /*观察者的坐标位置*/

private double[]point={0.0,0.0,0.0}; /*观察目标的坐标位置*/

Transform3D t=new Transform3D(); /*新建一个Transform3D对象*/

If(press up key){

/*根据式(1)和式(2)重新设定观察者的坐标以及观察目标的坐标*/

people[0] -= getCos(angle);

people[2] -= getSin(angle);

point[0] -= getCos(angle);

point[2] -= getSin(angle);

t.lookAt(new Point3d(people),new Point3d(point),

new Vector3d({0,1,0}));

this.targetTG.setTransform(t);

}

If(press left key){

/*根据式(3)和式(4)重新设定观察者的坐标以及观察目标的坐标*/

}

If(press down key){

/*根据式(5)和式(6)重新设定观察者的坐标以及观察目标的坐标*/

}

If(press right key){

/*根据公式(7)和公式(8)重新设定观察者的坐标以及观察目标的坐标;*/

}

将wrl格式的建筑物三维图形文件导入到Java 3D中,并直接在浏览器中对它进行虚拟漫游,运行效果如图2和图3所示。

图2 建筑物虚拟漫游(一)

图3 建筑物虚拟漫游(二)

其中,图2为观察者在(0.2,0.0,10.2)位置对(0.2,0.0,0.6)位置进行观察的画面,图3是观察者在(0.1,0.0,10.7)位置对(0.1,0.0,0.7)位置进行观察的画面。

利用Java 3D的代码可传输特性,可直接在浏览器中对建筑物进行虚拟漫游,很好地解决了网络可视化的要求。

4 结 语

本文主要研究了在虚拟漫游中视点的变换关系,并基于Java 3D构建了可满足网络可视化要求的建筑物虚拟漫游;但对于碰撞检测方面并没有进行深入的研究,最后的效果不是非常理想,有待进一步的改进。

参考文献

[1]周演,陈天滋.三维虚拟漫游技术的研究[J].计算机工程与设计,2009,30(5):1207-1211.

[2]都志辉.Java 3D编程实践――网络上的三维动画[M].北京:清华大学出版社,2002.

[3]鲍彦如.Java 3D 创建虚拟现实世界探析[J].微计算机应用,2003,24(6):378-381.

[4]侯哲威,王青山,程辉.基于Java 3D的网络地理信息可视化[J].测绘学院学报,2004,21(4):302-304.

[5]张绪冰,关泽群,张铁良.基于Java 3D虚拟场景的关键技术[J].安徽农业科学,2007(34):11328-11330.

[6]丁国栋,杨雪.用Java 3D实现Web虚拟现实的研究与实践[J].中国教育技术装备,2006(2):29-31.

[7]何同林,张绪冰.基于Java 3D三维虚拟场景的研究[J].计算机应用,2007,28(6):291-292.

[8]僧德文,李仲学,王红霞.基于OpenGL的虚拟漫游技术研究及应用[J].金属矿山,2007(9):84-86.

[9]陈光华,邓奕,王京文,等.基于OpenGL可漫游虚拟场景的设计[J].微计算机信息,2008,24(24):310-311.

[10]刘海霞,李仁旺,杨贵,等.基于VRML与Java 3D的交互式虚拟物流系统[J].计算机工程,2008,34(21):259-261.

上一篇:多子频带/子信道关联跳频扩频通信技术 下一篇:基于CMMB信号同步算法的研究