技术开发 频道

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

【IT168技术文档】在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的素材。
      原文地址

0
相关文章