加载Obj 三维模型

]

package com.java3d.dennist.loader;import javax.media.j3d.BranchGroup;import com.sun.j3d.loaders.Scene;import com.sun.j3d.loaders.objectfile.ObjectFile;/** * * * @version : 1.1 ** @author : 苏若年<a href=”mailto:DennisIT@163.com”>发送邮件</a> ** @since : 1.0创建时间: 2013-5-7 下午02:13:43 ** TODO: Java3D读取OBJ文件 * ObjFileReader extends BranchGroup{private double creaseAngle = 60.0;/**** 读取ObjModel文件** @param filePath obj文件路径**/public ObjFileReader(String filePath){BranchGroup branchGroup = new BranchGroup();int flags = ObjectFile.RESIZE;ObjectFile objFile = new ObjectFile(flags, (float)(creaseAngle*Math.PI)/180);Scene scenen = null;try {scenen = objFile.load(filePath);} catch (Exception e) {e.printStackTrace();System.out.println(“OBJ模型加载失败” + e.getMessage());}branchGroup.addChild(scenen.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.Vector3f;import com.sun.j3d.utils.applet.MainFrame;import com.sun.j3d.utils.universe.SimpleUniverse;/** * * * @version : 1.1 ** @author : 苏若年<a href=”mailto:DennisIT@163.com”>发送邮件</a> ** @since : 1.0创建时间: 2013-5-7 下午02:21:18 ** TODO: Java3D 实例 OBJ模型加载 展示 * JavaModelObjLoaderApp extends Applet{/***serialVersionUID = 5841679659336190804L;public BranchGroup createSceneGraph(){// 创建场景图分支BranchGroup group = new BranchGroup();// 几何变换组节点TransformGroup transGroup = new TransformGroup();// 几何变换Transform3D trans3d = new Transform3D();// 缩放变换trans3d.setScale(0.8);//将几何变换节点对象添加到节点组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 ObjFileReader(“F:/guanyu.obj”));//将模型添加到变换组节点transGroup.addChild(objTrans);//设置几何变化,绕Y轴中心旋转Transform3D yAxis = new Transform3D();Alpha rotationAlpha = new Alpha(-1,Alpha.INCREASING_ENABLE,0,0,4000,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 JavaModelObjLoaderApp(){setLayout(new BorderLayout());// 创建3D场景绘制画布Canvas3D对象Canvas3D canvas = new Canvas3D(null);add(“Center”,canvas);BranchGroup scene = createSceneGraph();SimpleUniverse universe = new SimpleUniverse(canvas);universe.getViewingPlatform().setNominalViewingTransform();universe.addBranchGraph(scene);} main(String[] args) {new MainFrame(new JavaModelObjLoaderApp(), 360,360);}}

实例二:实现场景中多个模型

效果图:

实例代码:

只有流过血的手指才能弹出世间的绝唱。

加载Obj 三维模型

相关文章:

你感兴趣的文章:

标签云: