首页 > 作文

管理3d设置

更新时间:2023-03-21 18:55:32 阅读: 评论:0

找一找-学生手工

管理3d设置
2023年3月21日发(作者:手势功能)

收稿日期:2008-05-20;修回日期:2008-07-10

作者简介:郭鸿飞(1980-),男,硕士生,主要研究方向为虚拟现实。E-mail:guohf@

虚拟环境下基于Java3D的交互控制

郭鸿飞,王守尊

(海军工程大学船舶与动力学院,武汉430033)

摘要:介绍了利用Java3D对外部模型的导入及交互控制,并通过实例分析了Java3D对VRML格式模

型的交互操作。结合具体实现的代码阐述了扩展鼠标交互功能雷锋出生 的一般性方法,通过改写Java3D中相关的

鼠标操作基类,给出了实现过程中技术难点的解决方案;最后通过实例证明了此研究工作在虚拟装配操作

过程中的应用价值。

关键词:虚拟现实;人机交互;Vrml;Java3D;

中图分类号:TP391.9文献标志码:A

InteractiveControllingoftheVirtualEnvironmentinJava3D

GUOHong-fei,WANGShou-zun

(CollegeofNavalArchitectureandPower,neering,Wuhan430033,China)

ABSTRACT:ThispaperhasintroducedtheimportoftheexteriormodelsandthemutualcontrollingoftheminJava3D,andthe

gramsarelistedtoexplainthesolutionsforrealizing

thedesign,whichincludestheinheritance,overloadingandmodificationoftheba-classinJava3D.

KEYWORDS:VirtualReality;Human-ComputerInteraction;Vrml;Java3D;

1997年,SUN公司继Java的火爆成功之后迅速推出了适用于Internet环境的跨平台的三维图形开发工

具包Java3D。Java3D是Java2SDK的标准扩展,它将OpenGL和DirectX这些底层技术包装在Java接口

中。这种全新的设计使3D技术变得不再繁琐并且可以加入J2SF,J2FF的整me的意思 套架构,保证了Java3D技术

强大的扩展性[1]。Java3D其本质是一个交互式的三维图形应用编程接口(API),因此它可以和普通的Java

2D、Swing、AWT、Applet等很好的结合。Java3D支持导入外部3D图形文件,因此,采用PRO/E,Solid

Works,3DMAX等三维建模软件,可以在直观可视的条件下建立零件模型,并给模型设置材质和贴图,

再利用Loader接口将建立好的模型导人到Java3D场景中,这样就大大地减少了工作量,使设计者能够把

更多的精力放在人机交互等更深入的研究上。

1模型的建立及导入

Java3D提供了基本形体以及编写点、线、面的各种对象的应用,这些内容可以在应用程序之中构造简

单的形体,复杂的形体则很难实现。可以通过调用其它格式的三维图形文件获得复杂形体,如直接调用

VRML2.0、OBJ和Lightwave格式的三维图形文件,或者通过处理,间接调用DWG,DXF,3DS等格式

的三维图形文件。这些格式的三维模型可以很方便地应用在Java3D程序中。其中VRML作为虚拟现实建

模语言,具有文件体积小、易于编辑、适于王二小的故事简短 网络传送等特点,其应用非常广泛。

1.1选择PRO/E机械设计模块进行零件建模。

采用Pro/E进行实体建模的最终目的是输出VRML格式模型,在进行零部件建模时要考虑模型导入后

Java3D对模型的识别能力。建好零部件模型,在PRO/E中将单个零件模型进行装配后,如果直接将装配

体导出为Vrml文件,PRO/E会自动生成设计者难以控制的一系列的信息和视点,代码过于繁琐。同时也

不推荐从零件模型导出为Vrml文件,这种方式建模效率低,而且在导入Java3D时每个零件都会生成各自

的默认坐标系,不利于零件的管理。经过反复的试验总结,同时鉴于3DMAX不善于机械建模但导出的

Vrml文件代码简洁,确定了与Java3D相匹配的Pro/E建模方法。根据零件数量上的多少采用不同的方案:

①当装配体零件较多时,由于大于2.3兆以上单个Vrml文件导入Java3D应用于网络时就会出现显示不全、

速度慢等问题。所以在PRO/E装配体文件中选择导出为STL格式文件,在出现在对话框中选择“包括”(见

图1),然后选择单个或者多个零件保存为STL格式文件。用这种方法将所有的零件和子装配体导出。然后

在3DMAX中将刚才STL格式的零件模型导出为Vrml文件。这样便得到单个零件的Vrml格式模型,其

中的默认坐标系已经设置好。直接导入Java3D或者通过下面格式的Vrml文件进行组合:

DEFxiaxiangtiTransform{

#...设置相应域值

children[

Inline{url""}#包含箱体

]}

DEFshangxiangtiTransform{

#...设置相应域值

children[

Inline{url""}#包含箱盖

]}

#...包含其他零件或子装配体

组织模型的VMRL文件中Transform节点一定要定义英文名,方便以后进行操作和控制,然后进行导入。

②当装配体中零件较少时可以用3DMAX直接将PRO/E导出的装配体STL文件导出为Vrml文件。注意

Vrml文件中所有的Shape对象都要定义相应英文名[2红花功效与作用 ]。

1.2Java3D对Vrml模型文件的导入

Java3D的s包中包括了Loader和Scene两个接口。在Java3D中调用不同格式的3D

图形文件,应根据这两个接口编写自己的Loader类,针对不同类型的3D图形文件编写不同的Loader类。

SUN提供了一个VR英语物主代词 ML97的Loader,可以利用它在Java3D中调用VRML97类型的文件。首先下载

,并设置好其路径,通常应放在%JAVAHOME%lib目录下[3]。VRML97包中的

VrmlLoader实现了s包中Loader接口。

1.3Java3D获取模型节点

当使用Loader将一个VRML文件导入Java3D中时,Loader接口的Load的方法将返回一个

对象,一般情况下可以调用Scene的getSceneGroup()方法,该方法将返回一个

BranchGroup对象,该BranchGroup对象可以被Java3D的场景图直接引用。在虚拟装配的应用中,经常需

要获得单个场景对象,因为许多行为和操作都是针对单个零件,比如装配体中有若干零件,需要在Java3D

程序的运行时将零件的外观改变,以便更好地观察其细节,如果在一个VRML文件中定义了许多零件,那

么将其导入到Java3D中时,必须获得每个零件的单个实例,以便将它们作为单独的对象进行处理,这其

中就要用到Shape3D对象。Shape3D对象除了定义了三维形体的几何(Geometry)特征,还定义了形体的外

观(Appearance)属性。一个VRML的Shape对象对应Java3D的Shape3D对象,导入的时候必须对其能力

图1在装配体中选择零件导出为STL格式

标志位进行设置(见表1)。

表1Shape3D对象的标志

标志意义

ALLOW_APPEARANCE_READ程序运行时允许读入外观

ALLOW_APPEARANCE_WRITE程序运行时允许写入外观

ALLOW_COLLISION_金枝玉叶花 BOUNDS_READ程序运行时允许读取碰撞包围范围

ALLOW_COLLISION_BOUNDS_WRITE程序运行时写入碰撞包围范围

ALLOW_GEOMETRY_READ程序运行时允许读取几何体

ALLOW_GEOMETRY_WRITE程序运行时允许写入几何体

同样地,一个VRML中的Transform对象被后背麻 导入到Java3D场景中被转换为Java3D的TransformGroup

对象,通过它可以方便地实现零件的各种变换。在导入的时候必须对其能力位进行设置,如表2所示。

表2TransformGroup对象的标志

标志意义

ALLOW_TRANSFORM_READ允许在程序运行的时候读取该节点上的场景

ALLOW_TRANSFORM_WRITE允许在程序运行的时候修改该节点上的场景

这两个标志位十分常用,如果需要控制场景中的物体就一定要设定这两个标志。

2Java3D对节点进行交互控制

Java3D鼠标点取功能类主要在ors和g

两个包中,它们都包括PickMouBehavior、PickRotateBehavior、PickTranslateBehavior、PickZoomBehavior

四个类,g包已经被ors包所替代,不推荐

使用。它们都用到了包中的MouBehavior、MouZoom、MouTranslate、

MouWheelZoom、MouRotate类[4],这几个类都继承自行为基类or。.

or类也是编写自己的行为类时所要继承的类,如下面的PickInfoBehavior类实现点取场景中零件

时改变零件外观,同时根据我们前面所设置零件节点的UrData通过JDBC进行数据库的操作,查找所点

取零件的详细信息。

classPickInfoBehaviorextendsBehavior{

publicvoidprocessStimulus(Enumerationcriteria){

while(eElements()){......

if(pickResult!=null){NodetempNode=ect();

if(rData()!=null){accessoryname=(String)rData();

if(partinfof!挑战权威 =null){e();}

try{getinfo(accessoryname);}catch(SQLExceptionee){n("Exception:"+sage());}}

Shape3DtempShape=(Shape3D)tempNode;

if(entityint==1){earance(wireframeApp);}elif(entityint==0){

earance(entityApp);}}}

wakeupOn(newWakeupOnAWTEvent(_PRESSED));}

protectedvoidgetinfo(Stringaccessoryname)throwsSQLException{

connvrconn=newconn("accessory",accessoryname);//根据表名和零件代号实现数据库操作类进行零件信息查询}}

可以对Java3D里已经存在的行为类进行改写,以满足自己特定的需要[4]。PickTranslateBehavior类

默认的为使用鼠标右键对节点进行拖动控制,但是使用者习惯使用左键,便可以进行行为类的改写。

3应用实例

以圆柱齿轮减速器为实验模型,圆柱齿轮减速器由箱体、深沟球轴承、齿轮轴、装配轴、箱盖组成。

由PRO/E进行产品建模和装配,通过3DMAX生成VRML文件,经过编辑后保存在后台并建立相应的零

件数据库。在零件信息查询模块,用户可以通过鼠标点击和拖动自由查看数据库中保存的零件信息,如图

2、3所示分别为框图和实体模式下对零件的选择查看。在零件拆装模块用到了经过改进的鼠标点击事件类,

用户可以通过鼠标左、中、右键分别实现拖动、缩放、旋转零部件,如图4所示。

4结论

Java有两种类型的应用程序,一种是直接运行在Java虚

拟机上的Application,;另一种运行在浏览器里,由浏览器调

用执行,一般称它为Applet小程序。它可以把执行程序加到

web页面上,使web页面更加动态、更具交互性,从而大大

增加了支持Web的应用程序类型。本系统经过网络化能够实

现本地和远程虚拟装配。Java3D技术目前在国内的应用还

不是很多,但它的发展前景非常广阔,将逐渐为人们所熟知,

本文对Java3D技术的交互性进行了研究,在下一步的工作中将继续深化,如增加虚拟装配中设定网格和

对象捕捉技术、通过建立装配体零件树型结构实现零件自动寻找基准零件等,充分发挥Java3D在网络三

维领域的强大优势。

参考文献

[1]Java3DTutorial[DB/OL],/products/java-media/java3D.2005.

[2]张金钊,张金镝,张金锐.虚拟现实三维立体网络程序设计语言VRML-第二代网络程序设计语言[M].北京:

清华大学出版社,2004.

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

图2框图模式下查看装配轴信息

图3实图模式下查看箱盖信息

图4正在使用鼠标左键拖动零件进行拆装

[4]邓文生,马王俊美.Java3D扩展鼠标交互功能的研究与实现[J].计算机仿真,2007,歌颂祖国的儿歌 4(3):176-179.

本文发布于:2023-03-21 18:55:30,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/3c5ca5d67ad27aad4096d753036da36f.html

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

本文word下载地址:管理3d设置.doc

本文 PDF 下载地址:管理3d设置.pdf

标签:管理3d设置
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图