在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的浓香.
posted on 2007-10-25 16:15
千里冰封 阅读(2580)
评论(0) 编辑 收藏 所属分类:
JAVA扩展