地矿测绘  2006,22(1):6~7CN53-1124/T D I SS N1007-9394 Surveying and Mapp ing of Geol ogy and M ineral Res ources Vol.22,No.1,2006
JAVA3D在三维可视化技术中的应用3
童春芽,朱大明,王森林
(昆明理工大学国土资源工程学院,云南昆明 650093)
摘要:三维真实感的图形技术是科学计算可视化、电脑动画和三维地理信息系统的核心。三维GI S是GI S领域的一个热门话题,而它最基本的技术便是三维可视化技术。结合应用实例,讨论了JAVA3D技术的一些概念,及其在三维图形制作上的优点。
关键词:JAVA3D;三维可视化;三维GI S
中图分类号:P208;P209   文献标识码:A   文章编号:1007-9394(2006)01-0006-02
Appli ca ti on of JAVA3D i n V isua li za ti on Technology
T ONG Chun2ya,ZHU Da2m ing,WANG Sen2lin
(Faculty of L and Resource Engineering,Kunm ing U niversity of Science and Technology,Kunm ing Yunnan650093,China)
Abstract:The graphic technol ogy of3D verity is the core of visualizati on in calculati on,computer ani m ati on and3D GI S.The3D GI S is the hot t op ic in the p r ovince of GI S,and its most radical technol ogy is3D visualizati on.This paper talks about s ome noti ons of JAVA3D and s ome advantages in the fabricati on of3D i m ages.
Key words:JAVA3D;3D visualizati on;3D GI S
0 引言
随着GI S(地理信息系统)在生产和生活中的作用越来越大,以及计算机技术的迅猛发展,使得三维GI S受到更多的关注。在目前的三维GI S领域,不仅要求GI S工作者对地理学、管理学、测量学以及制图学等方面要有足够的知识,同时也要求对最新的计算机技术、计算机编程语言要有更多的掌握,如最新流行的JAVA语言等。
1 三维可视化技术概述
111 地图学的发展与三维可视化的出现
地图是人类空间认知的结果,又是人们进行空间认知的工具(王家耀,陈毓芬,2000)。地图学家们探索了人的空间感受与图形认知的一系列生理、心理机制,提出了“视觉变量”和平面地图空间信息传输模式的理论,有效地提高了地图设计的质量和使用效果。
随着计算机三维(3D)显示技术的不断发展,地图符号形象化的要求日渐迫切。地图符号的抽象化和形象化这对矛盾在相互对立而又螺旋式上升的发展过程中向三维形象化回归,导致了空间信息三维可视化成为GI S发展的重要特征之一。三维可视化技术使传统二维的、静态的地图表示向三维的、动态的虚拟环境构建转变,人在进入这一环境后可以利用计算机实现以视觉为主的全方位交互,这是空间数据可视化最有发展前景的新领域,已成为被关注的热点,也是研究、利用数字地球资源的重要工具(高俊,2000)。
112 三维模型的产生及其特征
地图符号是地图上用来表示实地物体与现象的特定图解记号,是以约定关系为基础的与客观事物具有指代关系的物质对象(图形、图解)。它有两个基本功能:首先,它能指出目标种类及其数量和质量特征;其次,能确定对象空间位置和现象分布。
空间信息三维可视化的发展促进了三维模型的产生。与平面地图符号相似,三维模型就是在三维的条件下,描述实地物体与现象的图解模型。它具有平面地图符号的所有特征和基本功能(危拥军,2000),
但更加直观逼真。三维模型就是,在三维环境中,用来描述各种地理实体的形状、位置、大小、姿态以及地理现象的时空分布和变化特征的图形、图像以及图解模型(朱庆, 2003)。三维模型以逼真的形式提供给观察者更多的空间信息,通过用户的视觉被感知。综合起来,三维模型具有以下基本特征:
1)三维模型能够给予读者更加直观的三维空间信息。而平面地图符号反映的都是空间物体的平面布局,其高程信息只是作为一个属性值而存在,并不能被直观地反映出来。三维模型不仅能够反映空间物体或对象的平面位置(x,y),其高程信息(z)也同样可以反映出来。
2)能以更加直观和逼真的方式指出空间目标种类、数量和质量特征以及对象的空间位置和现象的时空分布,所以三维模型具有完整的时空定位特征。
3)三维模型以电子为介质,用户不仅可以从电子介质观察图形图像的效果,还能够从具体的文件中得到数字信息,也就是
6
3收稿日期:2005-12-06
说数字信息是以单独的文件保存起来的,并且这些数字信息都是比较详细的。
2 JAVA3D概述
211 JAVA3D语言
JAVA3D T M112AP I是用于编写三维图形的JAVA程序的一个类集,它为应用程序实现高性能、交互式三维图形提供了面向对象的接口。使用JAVA3D API,软件开发人员可以方便地构建、描绘和控制三维物体和虚拟环境的动作,把高质量、易扩展、独立于平台的三维图形结合到基于JAVA Applet或一般应用程序中。212 JAVA3D的特点
1)简化了三维应用程序的开发
Java3D结合了高层次的场景图(Scene Graph)模型,使得程序员不必花费时间和精力来设计具体的几何形体和编写描绘代码,只需集中精力于场景图中各个对象和组成元素。
2)适于开发基于I nteranet或I nternet的可视应用程序
Java3D继承了JAVA的平台无关性,采用了几何形体压缩技术,加快了三维模型的网络传输速度。
3)灵活的观察点模型(V ie wingModel)
采用JAVA3D观察点模型的程序,可以以各种灵活的方式描绘图形,而不需改变程序代码。
4)集成三维声音和图形于一体。
5)支持连续动作设备,增强了程序的交互性。
6)具有同其它JAVA AP Is良好的结合性。
213 JAVA3D的结构(Scane Graphs Structure)
JAVA3D是面向对象的编程,数据结构采用的是场景图,它是具有方向性的不对称树状图形,见图1。场景图中的节点都是JAVA3D类的实例,图中线表示实例之间的关系。场景图的根节点是V irtual Universe,每个场景图只能有1个根节点。根节点下面是Locale节点,每个Locale上拥有1个或多个B ranch2 Gr oup子节点。B ranchGr oup的子节点则是三维环境中的各种形体(shape)节点,以及Transf or mGr oup节点,用来设定形体的摆放位置。观察位置由V ie wPlatf or m节点设定,它是Transf or m2 Gr oup的子节点,如图1所示:
图1 JAVA3D应用程序的场景图
Fig11 Scene graph of JAVA3D app licati on p r ogra m
214 JAVA3D绘制与渲染
JAVA3D是一个面向对象的AP I,应用程序把单独的图形元素作为分离的对象来构造,然后将其连接到一个树型结构(场景图)中。其编程模型基于图形场景,从而为描绘和渲染场景提供了一个简单灵活的机制。场景图即对整个场景的完整描述,包括图形数据、属性信息和视点信息,利用这些数据,就可以从一个特定视点来渲染图形:Java3D消除了以前的AP I强加给编程人员的繁琐细节。允许编程人员更多地考虑形体本身,而不是组成它们的那些三角面———即考虑场景及其组织,而非底层渲染代码。
3 JAVA3D技术在三维可视化中的应用实例
为了具体说明三维模型的显示效果,采用P LY格式的数据,以兔模型为例。P LY格式是一种描述复杂三维实体的文本格式,通过描述复杂实体表面的多边形网格来描述实体。
首先建立一个P LY_BODY类,然后建立输入流。输入数据后,把节点数据连成一链表,由于使用的多边形是三角形,所以三个节点一组地输入。建立三维实体实例后,如果设置显示模式(setPoly Model)时设成P OLYG ON_L I N E,则显示的是三角形的三条边。完成了P LY_BODY类,在createScene_Graph方法中建立一个P LY_BODY实体,并把它加入到Transf or mGr oup类中即可。程序主要框架如下:
public class Bunny4extends Shape3D{
 public Bunny4()thr ows File NotFoundExcep ti on
  {try{
File file=File("f:/java3d/bunny4c.p ly");
Data I nputStrea m in=ne w Data I nputStrea m(ne w Buffered I n2 putStrea m(ne w File I nputStrea m(file)));
BufferedReader inbr=ne w BufferedReader(ne w I nputStrea m2 Reader(in));
Try{node_count=Fl oat.value ad L ine()).int V al2 ue();
ele m_count=Fl oat.value ad L ine()).int V alue();
f or(i=0,i<node_count,i++){…//输入结点坐标
z[i]=203Fl oat.value ad L ine()).fl oat V alue();}
f or(i=0;i<ele m_count;i++)f or(j=0;j<3;j++)
 {ne=Fl oat.value ad L ine()).int V alue();
ele mConnect[i][j]=ne;
p[ni]=ne w Point3f(x[ne],y[ne],z[ne]);
point L ist.addEle ment(p[ni]);//建立三角形的结点链表
col orx=(x[ne]-dx_m in)/(da_max-dx_m in);
col ors[ni]=ne w Col or3f(col orx,0.0f,1.0f-col orx);}//建立颜数组
Triangle A rray triangle=ne w Triangle A rray(33ele m_count,
 Triangle A rray.C OORD I N ATES|Triangle A rray.NOR2 MALS);//表面散模式
java开发可视化界面Triangle A rray triangle=ne w Triangle A rray(33ele m_count,
 TriangleA rray.C OORD I N ATES|Triagle A rray.COLOR_3); //表面直接着
Point3f[]verts=ne w Point3f[33ele m_count];
Point L ist.t oA rray(verts);
Triangle.set Coordinates(0,verts);//设置三角形链表的结点坐标
f or(i=0;i<ele m_count;i++)//计算散射方向
 {…point N or mal[93i]=face Nor mal.x;…
 point N or mal[93i+7]=face Nor mal.y;
 point N or mal[93i+8]=face Nor mal.z;}
 triangle.set N or mals(0,point N or mal);
 triangle.set Col ors(0,col ors);//设置表面颜
 Appearance app=ne w Appearance();
 Material mat=new M aterial();(下转第13页)
7
第1期童春芽,朱大明,王森林:JAVA3D在三维可视化技术中的应用
图3 网络结构图
Fig13 Net w ork structure diagra m 4 总结
该影像地图发布系统的建立,使已有的国土资源基础信息发挥了重要作用。首先能便捷的为政府部门的决策提供依据;为城市土地使用税费征收、确定土地出让价格、宏观调控地产市场提供依据;为控制土地供应总量、调控土地市场、合理制定土地供应政策、正确引导土地需求提供依据;其次,为促进政务公开和廉政建设,提高土地执法监管力度,防止土地未批先用等违法行为提供依据。同时也能为充分利用地质矿产资料,减少地质矿产工作的投资风险和重复投入提供依据。
[参 考 文献]
[1] 邬伦,等.地理信息系统———原理、方法和应用[M].北京:科学出
版社,2001.
[2] 张述清,黄伟昌.网络地理信息系统(Net w ork GI S)关键问题综述
[J].地矿测绘,2001,17(3):6~7.
(上接第7页)
   mat.set D iffuseCol or(new Col or3f(0.5f,0.5f,0.5f));//设置散射颜
 app.set M aterial(mat);
 Polygon A ttributes pa=ne w Polygon A ttributes();
 pa.setPolygon Mode(pa.P OLYG ON_F I L L);//面显示模式 pa.setPolygon Mode(pa.P OLYG ON_L I N E);//线显示模式 pa.set CullFace(pa.CULL_NONE);
 app.setPolygon A ttributes(pa);
 this.setGeometry(triangle);
 this.set A ppearance(app);
 }catch(I O Excep ti on e){
 Syste m.out.p rintln("Caugnt I O Excep ti on:"+e.get M essage ());
 }
 }catch(File NotFoundExcep ti on e){
  Syste m.out.p rintln("Caught File NotFountExcep ti on:"
    +e.get M essage());}
    }}
图2 兔模型不同模式的三维显示效果
Fig12 32D dis p lay effectiveness of different mode of rabbit model
  如果采用线显示模式,显示结果如图2(a)。如果表面直接着,则需要把颜数组赋给模型,如图2(b)。表面着后,颜不会改变,但有些地方方向立体感不强。为了增强立体感,可以采用散射模式。散射模式需要把表面法线方向赋给模型,并设定散射颜。如果每个三角形的3个顶点的法线方向就是表面法线方向,这样显示的结果如图2(c)。图2(c)没有光滑感,所以对每个顶点的法线方向进行平均(与之相连的所有三角形的法线方向进行平均),立体感很强,如图2(d)。
 由此可以得出,Java3D在将来的三维可视化图形的应用前景是非常可观的,作为三维GI S的开发人员,对这一技术的了解和掌握是必不可少的。
4 结束语
JAVA3D可以让人们更便捷的编码出人们需要的三维可视化图形,其中的三维建模更是从事三维GI S的开发人员必须掌握的。通过实践,笔者认为在三维模型的实际应用中必须注意以下几个方面:
1)应对形象素材进行高度概括,去其枝节,把最基本的特征表现出来,一般情况下应尽可能保留甚至夸张地物的形象特征,包括外观上的相似,让用户看到模型马上就可以联想到地物本身。
2)另一方面也不能盲目追求仿真、模拟原型,否则就会混淆3D GI S的三维可视化模型和模拟景观的区别。
[参 考 文 献]
[1] 朱庆,高玉荣,危拥军,黄铎.GI S中三维模型的设计[J].武汉大
学学报,2003,28(3).
[2] 龚建成,张佑生.基于JAVA的3D图形开发技术[J].安徽工程科
技学院学报,2003,18(1).
[3] 温永宁,文斌,张宏,刘晓艳.利用Java3D实现W eb上的真实感地
形显示[J].江苏测绘,2003,25(3).
作者简介:童春芽(1980~),男,浙江杭州人,硕士研究生,大地测量与测量工程专业,主要研究方向:GI S的应用与研究。
3
1
第1期林建新:基于A rc I M S的影像地图发布系统的设计与实现

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。