千里冰封
          JAVA 濃香四溢
          posts - 151,comments - 2801,trackbacks - 0
          在SUN的J3D里面并沒有提供對3DS格式的文件的導入。但是3DS格式的文件又很常見。為此,我們需要借用第三方的工具,來把3DS里面的模型導入到程序中。
          我們用的是Loader3ds這個工具,可以點擊這里下載

          我們還是看一個簡單的例子吧

          /*
           * Test2.java
           *
           * Created on 2007-10-4, 15:28:14
           *
           * To change this template, choose Tools | Templates
           * and open the template in the editor.
           
          */

          package test1;

          import com.microcrowd.loader.java3d.max3ds.Loader3DS;
          import com.sun.j3d.loaders.Scene;
          import com.sun.j3d.utils.behaviors.mouse.MouseRotate;
          import com.sun.j3d.utils.behaviors.mouse.MouseTranslate;
          import com.sun.j3d.utils.behaviors.mouse.MouseWheelZoom;
          import com.sun.j3d.utils.universe.SimpleUniverse;
          import java.awt.Color;
          import java.io.FileNotFoundException;
          import java.util.logging.Level;
          import java.util.logging.Logger;
          import javax.media.j3d.Alpha;
          import javax.media.j3d.BoundingSphere;
          import javax.media.j3d.BranchGroup;
          import javax.media.j3d.DirectionalLight;
          import javax.media.j3d.Transform3D;
          import javax.media.j3d.TransformGroup;
          import javax.vecmath.Color3f;
          import javax.vecmath.Point3d;
          import javax.vecmath.Vector3f;

          /**
           *
           * 
          @author hadeslee
           
          */
          public class Test2 {

              
          public Test2() {
                  build();
              }

              
          private void build() {
                  
          try {
                      BranchGroup bg 
          = loadBranchGroup();
                      SimpleUniverse u 
          = new SimpleUniverse();
                      u.getViewingPlatform().setNominalViewingTransform();
                      u.addBranchGraph(bg);
                  } 
          catch (FileNotFoundException ex) {
                      Logger.getLogger(Test2.
          class.getName()).log(Level.SEVERE, null, ex);
                  }
              }

              
          private BranchGroup loadBranchGroup() throws FileNotFoundException {
                  Loader3DS dd 
          = new Loader3DS();
                  Scene scene 
          = dd.load("01.3DS");
                  System.out.println(
          "scene=" + scene);
                  
          if (scene != null) {

                      BranchGroup objRoot 
          = new BranchGroup();
                      BranchGroup bg 
          = scene.getSceneGroup();
                      TransformGroup objTrans 
          = new TransformGroup();
                      Transform3D trans
          =new Transform3D();
                      trans.setScale(
          0.3f);
                      objTrans.setTransform(trans);
                      objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
                      objTrans.addChild(bg);

                      objRoot.addChild(objTrans);
                      BoundingSphere bounds 
          = new BoundingSphere(new Point3d(0.00.00.0), 100.0);
                      MouseRotate behavior 
          = new MouseRotate();
                      behavior.setTransformGroup(objTrans);
                      objTrans.addChild(behavior);
                      behavior.setSchedulingBounds(bounds);

                      MouseTranslate tr 
          = new MouseTranslate();
                      tr.setTransformGroup(objTrans);
                      objTrans.addChild(tr);
                      tr.setSchedulingBounds(bounds);
                      
                      MouseWheelZoom tr1 
          = new MouseWheelZoom();
                      tr1.setTransformGroup(objTrans);
                      objTrans.addChild(tr1);
                      tr1.setSchedulingBounds(bounds);
                      Color3f light1Color 
          = new Color3f(Color.RED);
                      Vector3f light1Direction 
          = new Vector3f(0f, 0f, -10f);
                      DirectionalLight light1 
          = new DirectionalLight(light1Color, light1Direction);
                      light1.setInfluencingBounds(bounds);
                      objRoot.addChild(light1);
                      
          return objRoot;
                  }
                  
          return null;
              }

              
          public static void main(String[] args) {
                  
          new Test2();
              }
          }

          我們從一個3DS文件里面導出了一個場景 ,當然也可以導出更多其它的東西。01.3ds大家可以替換成自己的文件,還有一點要注意的就是,因為3Ds MAX的一些設置和J3D里面不一定一樣,所以你導入進來以后,可能會什么都看不到,所以最好是設置為鼠標可以控制大小和位置的,這樣就可以自己去找到我們導入的模型,然后根據我們找到的位置,在程序里面再給它定好位。
          還有可以導入其它格式的第三方的庫,大家都可以去研究一下,以豐富J3D的素材。





          盡管千里冰封
          依然擁有晴空

          你我共同品味JAVA的濃香.
          posted on 2007-10-25 16:15 千里冰封 閱讀(2587) 評論(0)  編輯  收藏 所屬分類: JAVA擴展
          主站蜘蛛池模板: 泗水县| 河曲县| 舒城县| 墨竹工卡县| 正阳县| 鞍山市| 甘肃省| 乌拉特中旗| 麻阳| 青铜峡市| 姜堰市| 新田县| 普兰县| 阿克| 彭泽县| 霍州市| 铜川市| 皮山县| 云龙县| 河西区| 哈密市| 四川省| 嘉善县| 宁强县| 吉安市| 敦煌市| 泸州市| 准格尔旗| 玛曲县| 什邡市| 交城县| 福泉市| 安溪县| 永兴县| 班玛县| 三河市| 衡山县| 江川县| 和田市| 兴义市| 山阳县|