ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 在java3d里面使用3DS格式的文件

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

原创 Linux操作系统 作者:Java006 时间:2008-09-13 13:10:18 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 bjRoot = new BranchGroup();

  BranchGroup bg = scene.getSceneGroup();

  TransformGroup bjTrans = 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的素材。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/14734416/viewspace-446973/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-07-07

  • 博文量
    122
  • 访问量
    575100