Java3D实例应用

相关文档

]

package com.java3d.dennist.loader;import javax.media.j3d.BranchGroup;import com.microcrowd.loader.java3d.max3ds.Loader3DS;import com.sun.j3d.loaders.Scene;/** * * * @version : 1.1 ** @author : 苏若年<a href=”mailto:DennisIT@163.com”>发送邮件</a> ** @since : 1.0创建时间: 2013-5-7 下午02:44:02 ** TODO: * ThreeDSFileReader extends BranchGroup{/**** 读取ObjModel文件** @param filePath 3ds文件路径**/public ThreeDSFileReader(String filePath){BranchGroup branchGroup = new BranchGroup();Loader3DS l3ds = new Loader3DS();Scene scene = null;try {scene = l3ds.load(filePath);} catch (Exception e) {e.printStackTrace();System.out.println(“3DS模型加载失败” + e.getMessage());}branchGroup.addChild(scene.getSceneGroup());this.addChild(branchGroup);}}

加载模型到场景

package com.java3d.dennist.loader;import java.applet.Applet;import java.awt.BorderLayout;import javax.media.j3d.Alpha;import javax.media.j3d.Background;import javax.media.j3d.BoundingSphere;import javax.media.j3d.BranchGroup;import javax.media.j3d.Canvas3D;import javax.media.j3d.DirectionalLight;import javax.media.j3d.RotationInterpolator;import javax.media.j3d.Transform3D;import javax.media.j3d.TransformGroup;import javax.vecmath.Color3f;import javax.vecmath.Point3d;import javax.vecmath.Vector3d;import javax.vecmath.Vector3f;import com.sun.j3d.utils.applet.MainFrame;import com.sun.j3d.utils.universe.SimpleUniverse;import com.sun.j3d.utils.universe.ViewingPlatform;/** * * com.java3d.dennist.loaderJavaModel3dsLoaderApp.java* * @version : 1.1 ** @author : 苏若年<a href=”mailto:DennisIT@163.com”>发送邮件</a> ** @since : 1.0创建时间: 2013-5-7 下午02:57:32 ** TODO: * JavaModel3dsLoaderApp extends Applet{public BranchGroup createSceneGraph(){// 创建场景图分支BranchGroup group = new BranchGroup();// 几何变换组节点TransformGroup transGroup = new TransformGroup();// 几何变换Transform3D trans3d = new Transform3D();// 缩放变换trans3d.setScale(0.7);//将几何变换节点对象添加到节点组transGroup.setTransform(trans3d);//将几何变化组添加到场景group.addChild(transGroup);// 球体作用范围边界对象BoundingSphere bound= new BoundingSphere(new Point3d(0.0,0.0,0.0),100.0);Color3f bgColor = new Color3f(0.05f,0.05f,0.2f);Background bg = new Background(bgColor);bg.setApplicationBounds(bound);group.addChild(bg);// 设置光源Color3f lightColor = new Color3f(1.0f,1.0f,0.9f);Vector3f lightDirection = new Vector3f(4.0f,-7.0f,-12.0f);//设置定向光的颜色和影响范围DirectionalLight light = new DirectionalLight(lightColor, lightDirection);light.setInfluencingBounds(bound);//将光源添加到场景group.addChild(light);//几何变换组节点 – 加载外部模型TransformGroup objTrans = new TransformGroup();objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);//加载Obj格式的模型文件objTrans.addChild(new ThreeDSFileReader(“F:/rexue.3ds”));//将模型添加到变换组节点transGroup.addChild(objTrans);//设置几何变化,绕Y轴中心旋转Transform3D yAxis = new Transform3D();Alpha rotationAlpha = new Alpha(-1,Alpha.INCREASING_ENABLE,0,0,6000,0,0,0,0,0);RotationInterpolator rotator = new RotationInterpolator(rotationAlpha, objTrans,yAxis,0.0f,(float)Math.PI*2.0f);rotator.setSchedulingBounds(bound);objTrans.addChild(rotator);group.compile();return group;}public JavaModel3dsLoaderApp(){setLayout(new BorderLayout());// 创建3D场景绘制画布Canvas3D对象Canvas3D canvas = new Canvas3D(null);add(“Center”,canvas);BranchGroup scene = createSceneGraph();SimpleUniverse universe = new SimpleUniverse(canvas);//设定用户视角Point3d userPosition = new Point3d(0,18,18);initUserPosition(universe,userPosition);//universe.getViewingPlatform().setNominalViewingTransform();universe.addBranchGraph(scene);} initUserPosition(SimpleUniverse universe,Point3d userPosition){ViewingPlatform vp = universe.getViewingPlatform();TransformGroup steerTG = vp.getViewPlatformTransform();Transform3D t3d = new Transform3D();steerTG.getTransform(t3d);t3d.lookAt(userPosition, new Point3d(0,0,0), new Vector3d(0,1,0));t3d.invert();steerTG.setTransform(t3d);} main(String[] args) {new MainFrame(new JavaModel3dsLoaderApp(), 340,340);}}

实例二:实现鼠标触控模型三维空间任意旋转

但没有一个创造奇迹的人是依靠瞬间的。

Java3D实例应用

相关文章:

你感兴趣的文章:

标签云: