• 1. Java 3D 网络上的三维动画 刘鹏 pengliu@ieee.org
  • 2. 第一回起
  • 3. 初识Java 3D
  • 4. What is Java 3D? Internet的交互式三维图形应用编程接口(API)。 让用户能够像浏览网页一样观看并操作三维动态图形 一次编程,到处运行 适应各种不同的软硬件平台
  • 5. Java 3D=Java + 3D提高了编写三维图形程序的层次 是Java的嫡系 高效的三维图形语言
  • 6. 更大的优点它是网络语言,代码可以自由传输
  • 7. 从产品设计、网上 购物到各种游戏, “三维”将改变人们 在屏幕上获取信息 的习惯。
  • 8. Examples: Scientific Visualization                                                                                                                        
  • 9. Examples: Scientific Visualization
  • 10. Examples: Scientific Visualization
  • 11. Examples: Education
  • 12. Examples: Abstract Data (Financial)
  • 13. Examples: Medical Education                                                                                                                        
  • 14. Geographical information systems (GIS)
  • 15. Examples: CAD                                                                                                                        
  • 16. Examples: Analysis
  • 17. Examples: 3D Logos
  • 18. Examples: Astronomy
  • 19. Examples: Animations                                                                                                                        
  • 20. 如何用Java 3D编程
  • 21. 安装Java 3DJava 2 SDK/JRE http://java.sun.com Java 3D SDK/RT http://java.sun.com/products/java-media/3D/download.html OpenGL Direct3D
  • 22. Java 3D的编程空间
  • 23. Java 3D 的座标系
  • 24. 第一个Java 3D程序Hello.java
  • 25. Hello.javaImports public class Hello { public Hello() { Contents } public static void main(String[] args) { new Hello(); } }
  • 26. import com.sun.j3d.utils.geometry.*; import com.sun.j3d.utils.universe.*; import javax.media.j3d.*; import javax.vecmath.*;Imports
  • 27. Contents:空间和小球 // 创建一个虚拟空间 SimpleUniverse universe = new SimpleUniverse(); // 创建一个用来包含对象的数据结构 BranchGroup group = new BranchGroup(); // 创建一个球并把它加入到group中 Sphere sphere = new Sphere(0.5f); // 小球的半径为0.5米 group.addChild(sphere);
  • 28. Contents: 灯光构件Color3f light1Color = new Color3f(1.8f, 0.1f, 0.1f); // 设置光线的颜色 BoundingSphere bounds = new BoundingSphere( new Point3d(0.0,0.0,0.0), 100.0); // 设置光线的作用范围 Vector3f light1Direction = new Vector3f(4.0f, -7.0f, -12.0f); // 设置光线的方向
  • 29. Contents:灯光形成DirectionalLight light1= new DirectionalLight   (light1Color, light1Direction); // 指定颜色和方向,产生单向光源 light1.setInfluencingBounds(bounds); // 把光线的作用范围加入光源中 group.addChild(light1);   // 将光源加入group组
  • 30. Contents:观察者// 安放观察点 universe.getViewingPlatform(). setNominalViewingTransform(); // 把group加入到虚拟空间中 universe.addBranchGraph(group);
  • 31. 程序的逻辑结构
  • 32. 编译javac Hello.java运行java Hello
  • 33. 在网上发布Java 3D程序
  • 34. 第一步:编写Hello.html

    If you were using a Java-capable browser, you would see Hello Universe! instead of this paragraph.
  • 35. 第二步:转换HTML 运行 HTMLConverter.BAT http://java.sun.com/products/plugin/1.2/converter.html
  • 36. Hello </COMMENT> <blockquote> <hr> If you were using a Java-capable browser, you would see Hello Universe! instead of this paragraph. <hr> </blockquote>
  • 37. 执行流程
  • 38. 里程碑什么是Java 3D 优点、用处 用Java 3D编程 安装、程序、逻辑结构、编译、运行 在网上发布Java 3D Applet 编HTML、转换、自动安装运行环境
  • 39. 第二回进
  • 40. 基本形体的生成
  • 41. Cone cone=new Cone(.5f,1.0f,1,app) 锥体
  • 42. Sphere sphere=new Sphere(.5f,app); 球体
  • 43. Cylinder cylinder=new Cylinder(.5f,1.0f); 圆柱体
  • 44. 直线
  • 45. 直线的生成 (1)public class lineShape extends Shape3D { // 直线的定点坐标   private float vert[ ]={ .5f,0.5f,0.0f, -0.5f,0.5f,0.0f, 0.3f,0.0f,0.0f, -0.3f,0.0f,0.0f, -0.5f,-0.5f,0.0f, 0.5f,-0.5f,0.0f}; // 各定点的颜色 private float color[ ]={ 0.0f,0.5f,1.0f, 0.0f,0.5f,1.0f, 0.0f,0.8f,2.0f, 1.0f,0.0f,0.3f, 0.0f,1.0f,0.3f, 0.3f,0.8f,0.0f};
  • 46. 直线的生成 (2)public lineShape( ) { // 创建直线数组对象 LineArray line=new LineArray(6,LineArray.COORDINATES |LineArray.COLOR_3); // 设置直线对象的坐标数组 line.setCoordinates(0,vert); // 设置直线对象的颜色数组 line.setColors(0,color);
  • 47. 直线的生成 (3) // 创建直线属性对象 LineAttributes linea=new LineAttributes( ); // 设置线宽 linea.setLineWidth(10.0f); // 设置直线的渲染效果 linea.setLineAntialiasingEnable(true); Appearance app=new Appearance( ); app.setLineAttributes(linea); this.setGeometry(line); this.setAppearance(app); } }
  • 48. 直线的使用BranchGroup group=new BranchGroup(); Shape3D shape=new lineShape(); group.addChild(shape);
  • 49. 二维文字Shape3D text2D=new Text2D("清华大学",   new Color3f(1f,1f,0f),"宋体",100,Font.BOLD);
  • 50. 三维文字
  • 51. String text="清华大学"; FontExtrusion fe0=new FontExtrusion( ); QuadCurve2D.Double curve=new QuadCurve2D.Double( ); curve.setCurve(0,0,0.2,0.05,0.4,0); FontExtrusion fe1=new FontExtrusion( ); fe1.setExtrusionShape(curve); Font3D f3d=new Font3D(new Font("",Font.PLAIN,1),fe0); Text3D txt=new Text3D(f3d,text,new Point3f(0.0f,-1.f,-1.f), Text3D.ALIGN_CENTER,Text3D.PATH_RIGHT); Shape3D sh=new Shape3D ( );
  • 52. 真实形体的生成
  • 53. 用几何变换构造真实的物体Stool.html
  • 54. BranchGroup objRoot=new BranchGroup(); TransformGroup trans=new TransformGroup(); objRoot.addChild(trans); TransformGroup g1=new TransformGroup( ); g1.addChild(new ColorCube(0.2)); 较简单的例子
  • 55. Transform3D t=new Transform3D( ); t.setScale(0.5); t.setTranslation(new Vector3f(0.0f,0.6f,0.0f)); t.setRotation(new Quat4f(0.78f,0.78f,0.78f,0.0f)); TransformGroup g2=new TransformGroup(t); g2.addChild(new ColorCube(0.2));
  • 56. 运行结果MyCube1.html
  • 57. // 创建ObjectFile对象,指明属性 int flags = ObjectFile.RESIZE; ObjectFile f = new ObjectFile(flags,       (float)(49.0 * Math.PI / 180.0)); // 创建场景叶节点,导入.obj文件 Scene s = null; try { s = f.load(galleon.obj"); } // 将场景叶节点添加到3D模型所在的变换组分支节点 objTG.addChild(s.getSceneGroup());导入外界文件
  • 58. (本页无文本内容)
  • 59. 当前可导入的格式文件格式 对应的图形软件3DS3D StudioCOBCaligari trueSpaceDEMDigital Elevation MapDXFAutoCAD Drawing Interchange FileIOBImagineLWSLightwave Scene FormatLWOLightwave Object FormatNFFWorldToolKit NFF formatOBJWavefrontPDBProtein Data BankPLAYPLAYSLDSolid Works(prt and asm files)VRTSuperscape VRTVTKVisual ToolkitWRLVirtual Reality Modeling Language
  • 60. 本课程未涉及内容光照 材质 纹理映射 背景 雾效 声音 交互式编程
  • 61. chapter9\SimpleBillboard.html 更多…Java 3D作品欣赏会
  • 62. 里程碑基本形体的生成 球 圆柱 圆锥 (长方体) 直线 (平面) 二维文字 三维文字 真实形体的生成 几何变换是构成真实形体的基础 导入外界文件 其他功能 作品欣赏
  • 63. 第三回升
  • 64. 实例: 跨地域高性能计算的可视化
  • 65. ACI (Advanced Computing Infrastructure)
  • 66. 可视化支撑环境
  • 67. (本页无文本内容)
  • 68. 分子链的构成过程
  • 69. 复合几何变换
  • 70. double r = Math.sqrt(x*x+y*y+z*z); double alpha1 = Math.atan(x/z); double alpha2 = Math.acos(y/r); Transform3D rot1 = new Transform3D(); Transform3D rot2 = new Transform3D(); rot1.rotY(alpha1); // 绕Y旋转α1度 rot2.rotX(alpha2); // 绕X旋转α2度 Transform3D newTransform = new Transform3D(); // 叠加两次旋转的效果   newTransform.mul(rot1); newTransform.mul(rot2);
  • 71. 定义与服务器的数据传输格式 
  • 72. 客户端获取数据的代码String address = “http://192.168.166.253/servlet/” + “ template.TAP.RequestData?” + “TaskName=test&Step=501&nLink=3&” + “Link1=3&Link2=7&Link3=49”; URL u=new URL(address); // 形成一个URL(传入地址和参数) URLConnection con=u.openConnection(); // 与服务器的Servlet建立连接
  • 73. InputStream istream=con.getInputStream(); // 获取数据 BufferedReader br=new   BufferedReader(new    InputStreamReader(istream)); // 读取数据 StringTokenizer st = new StringTokenizer(br.readLine(),",",false); // 用StringTokenizer解析获得的数据 long step=Long.parseLong(st.nextToken()); // 解析返回数据的step信息 // 下面继续解析其他数据项...(略)
  • 74. Molecule.html
  • 75. 终点站如果说 有什么需要记住的话, 那么, 请记住:
  • 76. (本页无文本内容)