在java3d里面使用3DS格式的文件

在java3d里面使用3DS格式的文件
在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.0 0.0 0.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的浓香.

你可能感兴趣的:(在java3d里面使用3DS格式的文件)