模拟物理实验java_应用Java3D技术实现大学物理虚拟实验(2)
2.模型部件的名称要用英文,并且要少于8个字符,否则,用3DS Loader导入时会出错;
3.模型必须要赋予材质,否则,用3DS Loader导入时会出错;
4.如果模型有贴图文件,则贴图文件必须用英文命名,否则,用3DS Loader导入时会看不到贴图。
四、导入模型,拆分、组合模型
(一)导入模型
Java3D可以导入.obj、.wrl、3ds等格式的文件,建议导入.3ds 文件格式,我们使用3DS Loader来导入模型,因为使用3DS Loader导入模型时,可以导入材质和贴图,这样就可以减少工作量和降低难度,不用再编程来给模型设置采制和帖图。把建立好的大学物理实验仪器模型用3DS Loader导入后,导入的模型是一个整体,不能够直接进行交互编程,要想实现对模型各个部分进行不同的交互,必须对模型按照一定的要求进行拆分。
(二)拆分、组合模型
在拆分模型时要先画好场景图,然后按照场景图,把一个个不同的部件,放到不同的TransformGroup中,以实现转动、平移等操作,组合后的模型从外表上看是一个整体,但是不同的部件属于在不同的TransformGroup中,下面以大学物理实验中“电磁感应”为例介绍拆分、组合模型的方法,“电磁感应”虚拟实验中,共分为四个部件,分别是“biao”指电流表、“luo“指螺线圈和电线、“zhizhen”指电流表的指针、“citie”指磁铁。指针要做旋转运动,磁铁要做平移运动。
1.“电磁感应”场景图
图2
2.拆分、组合模型代码:
TransformGroup biaoTg = (TransformGroup)nameObjects.get("biao");
TransformGroup citieTg = (TransformGroup)nameObjects.get("citie");
TransformGroup luoTg = (TransformGroup)nameObjects.get("luo");
TransformGroup zhizhenTg = (TransformGroup)nameObjects.get("zhizhen");
((BranchGroup)biaoTg.getParent()).removeAllChildren();
((BranchGroup)citieTg.getParent()).removeAllChildren();
((BranchGroup)luoTg.getParent()).removeAllChildren();
((BranchGroup)zhizhenTg.getParent()).removeAllChildren();
objScale.addChild(biaoTg);
objTrans.addChild(citieTg);
objScale.addChild(luoTg);
objTrans1.addChild(zhizhenTg);
五、加入背景、灯光,动画和行为
(一)背景、灯光
在开发大学物理虚拟实验中,在场景图中填加背景和灯光是比较模块化的地方。Java3D中默认的背景是黑色,我们可以通过如下代码:
Color3f bgColor = new Color3f(0.05f, 0.05f, 0.5f);
Background bgNode = new Background(bgColor);
bgNode.setApplicationBounds(bounds);
objRoot.addChild(bgNode);
改变背景颜色。
通过如下代码:
bounds = new BoundingSphere(new Point3d(0.0,0.0,0.0), 100.0);
Color3f ligh1Color=new Color3f(1.0f,1.0f,0.9f);
Vector3f light1DirectionalLight=new Vector3f(4.0f,-7.0f,-12.0f);
DirectionalLight light1=new DirectionalLight(ligh1Color,light1DirectionalLight);
light1.setInfluencingBounds(bounds);
objRoot.addChild(light1);
添加灯光。
(二)动画和行为
在开发大学物理虚拟实验中,所用到的动画方式有平移和旋转,使用了Java3D中的PositionInterpolator对象和RotationInterpolator对象结合Alpha对象来实现平移和旋转。
运用Java3D中Behavior类实现交互功能,可以实现响应键盘交互,响应鼠标交互,点取物体交互等,在开发大学物理虚拟实验中,我们主要使用响应按钮操作来完成学生与虚拟仪器交互功能。主要原因是,用键盘交互,响应鼠标交互,点取物体交互,必须给学生提供详细的操作说明,而且学生第一次做虚拟实验时往往不知道怎么样去操作模型。不如用响应按钮交互直观明了。
运用响应鼠标操作中的,MouseRotate类来对模型进行旋转,MouseTranslate类来对模型进行平移,MouseZoom类来对模型进行缩放。可以让学生从不同角度,不同距离观察实验进行情况,也是比较模块化的地方。
六、结论
我们已经运用Java3D技术,开发出了大学物理虚拟实验。如图3转动惯量虚拟实验,图4电磁感应虚拟实验。并且从中摸索出了一套行之有效的开发模式,运用这种模式指导开发大学物理虚拟实验,由于采用模式化,能够大量重复使用代码,因此缩短开发周期,降低开发难度。这种开发模式对其他虚拟实验的开发也有一定的参考意义。
图3转动惯量虚拟实验 图4电磁感应虚拟实验
参考书目:
[1] 刘 鹏.都志辉.顾 雷.房 冰.Java 3D 编程实践——网络上的三维动画[M].北京:清华大学出版社 :1
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
