BBSˮľÇ廪վ¡Ã¾«»ªÇø
·¢ÐÅÈË: vrml (3d), ÐÅÇø: Java
±ê Ìâ: JAVA3DѧϰϵÁÐ(11)--WavefrontµÄOBJͼÐε÷ÓÃ
·¢ÐÅÕ¾: BBS ˮľÇ廪վ (Wed Apr 14 11:01:09 1999)
JAVA3DѧϰϵÁÐ(11)---Íⲿ¸´ÔÓÐÎÌåµÄµ÷ÓÃ
(WavefrontµÄOBJ,LightwaveµÄLWSºÍLWO£¬WRL,DWG,3DS)
ÉÇÍ·´óѧ»úµçϵ ÕŽܣ¨jzhang@mailserv.stu.edu.cn£©
****************VRML2.0½»»¥Ê½ÈýάͼÐαà³Ì****************
JAVA3DѧϰϵÁÐÖеÄÀýÌ⽫Óзdz£¶àµÄÊéÖеÄVRML³ÌÐòÓëÖ®Ïà±È½Ï£¬
»¶Ó¹ºÂòVRML2.0ÐÂÊé¡£
ÌØÊ⹺Ê鷽ʽ£º
1¡£×÷ÕßÊÛÊé
1¡£ÍøÉ϶©¹º(email address: jzhang@mailserv.stu.edu.cn)
2¡£¿ÉÒÔÏÈ»ñÊ飬ºó»ã¿î(²»ÂúÒâ¿ÉÍËÊé)£¬
Ö»Ð轫ͨÐŵØÖ·¼°ÓÊ±à¸æÖª×÷Õߣ¬¼´¿ÉÔÚ×î¶ÌµÄʱ¼äÄڵõ½Êé¡£
3¡£Êé¼ÛΪ25Ôª/±¾£¬ÃâÊÕÓʹº·ÑÓá£
4¡£ÊéΪ16¿ª±¾£¬ÕýÎÄ161Ò³¡£
5. ¹ºÊé¿É»ñ¸ÇÓгö°æÉç²ÆÎñÕµÄÊվݡ£
6. Èç¹ûÐèÒªÊéÖÐËùÓеÄÔ´³ÌÐò£¬ÎÒ¿ÉÒÔemailÒ»¸ö´ò°ü³ÌÐò
******************VRML2.0½»»¥Ê½ÈýάͼÐαà³Ì*************
ÎÒÃÇ¿ÉÒÔÀûÓÃÇ°Ãæ½éÉܵķ½·¨Éú³ÉÎÒÃÇËùÐèÒªµÄ»ù±¾ÐÎÌ壬
Éú³Éµã¡¢Ïß¡¢Æ½Ãæ¡£µ«ÓеÄʱºò£¬ÎÒÃÇÐèÒªÓõ½ÆäËü¸ñʽµÄÈý
άÐÎÌ壬ÈçVRML2.0¸ñʽµÄͼÐÎÎļþ£¬AUTOCAD»æ³öµÄDWG¸ñʽµÄ
ÈýάÐÎÌ壬3DS MAX»æÖƳöµÄ¸´ÔÓÐÎÌå¡£¶ÔÓÚÕâЩÐÎÌ壬ÎÒÃÇ¿É
ÒԷdz£·½±ãµØ½«ÆäÓõ½JAVA3D³ÌÐòÖÐÈ¥¡£ÏÂÃæÎÒÃǽéÉÜһЩͼÐÎ
¸ñʽÔÚJAVA3DÖеÄÓ¦Ó÷½·¨¡£
Ò». WavefrontµÄOBJ¸ñʽµÄͼÐÎÎļþµÄµ÷ÓÃ
1. OBJ¸ñʽͼÐεļòµ¥µ÷ÓÃ
JAVA3D±àÒë»·¾³Ëù´øµÄUTILITYÓÐÁ½¸öLOADER£¬Ò»¸ö¿ÉÓÃÀ´
µ÷ÓÃWavefrontÈí¼þµÄOBJ¸ñʽµÄÈýάͼÐθñʽÎļþ£¬Ò»¸ö¿ÉÓÃÀ´
µ÷ÓÃLightwaveÈí¼þµÄLWS¼°LWO¸ñʽµÄÈýάͼÐθñʽÎļþ¡£
¼ÙÉèÎÒÃÇÓÐÒ»¸öOBJ¸ñʽµÄÎļþ£¨JAVA3D¸½´øÓÐÁ½¸öOBJ£¬ÎÄ
¼þÃû·Ö±ðΪgalleon.objºÍp51_mustang.obj£¬ÒÔ¼°µ÷ÓÃËüÃǵÄÒ»
¸ö³ÌÐòObjLoad.java£©¡£
ÎÒÃDZàдµÄµÚÒ»¸ö³ÌÐòObj1.java½éÉÜÁËOBJͼÐεĵ÷Ó÷½·¨¡£
³ÌÐòµÄ±ãÒË·½·¨£º
javac Obj1.java
³ÌÐòµÄÔËÐз½·¨£¨¼ÙÉèͼÐÎÔÚͬһĿ¼£©£º
java Obj1 galleon.obj
//Obj1.java
import com.sun.j3d.loaders.objectfile.ObjectFile;
import com.sun.j3d.loaders.ParsingErrorException;
import com.sun.j3d.loaders.IncorrectFormatException;
import com.sun.j3d.loaders.Scene;
import java.io.*;
import java.applet.Applet;
import java.awt.BorderLayout;
import com.sun.j3d.utils.applet.MainFrame;
import com.sun.j3d.utils.universe.*;
import javax.media.j3d.*;
import javax.vecmath.*;
public class Obj1 extends Applet {
private String filename = null;
public BranchGroup createSceneGraph(String args[]) {
BranchGroup objRoot = new BranchGroup();
Color3f light1Color = new Color3f(1.0f, 1.0f, 0.9f);
Vector3f light1Direction = new Vector3f(4.0f, -7.0f, -12.0f);
BoundingSphere bounds =
new BoundingSphere(ne·£¬ÎÒÃǸø³öÁË£º
private double creaseAngle = 60.0;
Ëü¿ÉÒÔʹ³ÌÐòÔËÐÐʱͨ¹ýÉ趨ºÍVRML³ÌÐòÖÐͬÑùµÄ
creaseAngleÀ´Ìá¸ß»ò½µµÍͼÐεÄÏÔʾЧ¹û¡£
¸ø³öÁËcreaseAngle£¬fµÄ¶¨ÒåÒ²ÏàÓ¦µØÓÐÁ˱仯£¬¼´µ÷ÓÃ
µÄÊÇObjectFileµÄÁíÒ»¸ö¹¹Ô캯Êý£º
ObjectFile f = new ObjectFile(flags,
(float)(creaseAngle * Math.PI / 180.0));
²¢ÔÚÇ°Ãæ¶¨ÒåÁËflag£º
int flags = ObjectFile.RESIZE;
±¾ÈËδ»ñµÃ¶¨ÒåObjectFile¶ÔÏóµÄÔ´³ÌÐò£¬¹Ê
²Â²âObjectFile.RESIZE¿ÉÄÜÊÇÒ»¸ö¿ª¹Ø²ÎÊý£¬±íʾÔÊÐí
¸Ä±ä³ß´ç¡£
3.·Ö³ÉÁ½¸ö³ÌÐò
ÉÏÃæ¸ø³öµÄÁ½¸ö³ÌÐò£¬³ÌÐò²»ÊǺÜÇåÎú£¬ÔĶÁÆðÀ´±È½ÏÀ§ÄÑ£¬
Ϊ´Ë£¬ÎÒÃǽ«Obj2.java·Ö½â³ÉÁ½¸ö³ÌÐò£º
Obj3.javaºÍobjFile.java¡£
//Obj3.java
import java.applet.Applet;
import java.awt.BorderLayout;
import com.sun.j3d.utils.applet.MainFrame;
import com.sun.j3d.utils.universe.*;
import javax.media.j3d.*;
import javax.vecmath.*;
import com.sun.j3d.loaders.Scene;
import com.sun.j3d.loaders.objectfile.ObjectFile;
public class Obj3 extends Applet {
public BranchGroup createSceneGraph() {
BranchGroup objRoot = new BranchGroup();
TransformGroup objScale = new TransformGroup();
Transform3D t3d = new Transform3D();
t3d.setScale(0.3);
objScale.setTransform(t3d);
objRoot.addChild(objScale);
BoundingSphere bounds =
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(bounds);
objRoot.addChild(bg);
Color3f light1Color = new Color3f(1.0f, 1.0f, 0.9f);
Vector3f light1Direction = new Vector3f(4.0f, -7.0f, -12.0f);
DirectionalLight light1
= new DirectionalLight(light1Color, light1Direction);
light1.setInfluencingBounds(bounds);
objRoot.addChild(light1);
TransformGroup objTrans = new TransformGroup();
objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
objScale.addChild(objTrans);
BranchGroup b1 = new objFile("galleon.obj");
objTrans.addChild(b1);
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(bounds);
objTrans.addChild(rotator);
objRoot.compile();
return objRoot;
}
public Obj3(String args[]) {
setLayout(new BorderLayout());
Canvas3D c = new Canvas3D(null);
add("Center", c);
BranchGroup scene = createSceneGraph();
SimpleUniverse u = new SimpleUniverse(c);
u.getViewingPlatform().setNominalViewingTransform();
u.addBranchGraph(scene);
}
public static void main(String[] args) {
new MainFrame(new Obj3(args), 400,400);
}
}
//end of Obj3.java
--------------------------
//objFile.java
import com.sun.j3d.loaders.objectfile.ObjectFile;
import com.sun.j3d.loaders.ParsingErrorException;
import com.sun.j3d.loaders.IncorrectFormatException;
import com.sun.j3d.loaders.Scene;
import java.io.*;
import javax.media.j3d.*;
public class objFile extends BranchGroup{
private double creaseAngle = 60.0;
public objFile(String filename) {
BranchGroup obj = new BranchGroup( );
int flags = ObjectFile.RESIZE;
ObjectFile f = new ObjectFile(flags,
(float)(creaseAngle * Math.PI / 180.0));
Scene s = null;
try {
s = f.load(filename);
}
catch (FileNotFoundException e) {
System.err.println(e);
System.exit(1);
}
catch (ParsingErrorException e) {
System.err.println(e);
System.exit(1);
}
catch (IncorrectFormatException e) {
System.err.println(e);
System.exit(1);
}
obj.addChild(s.getSceneGroup( ) );
this.addChild(obj);
}
}
//end of objFile.java
4.ͬʱµ÷ÓÃÁ½¸öÐÎÌ壬Á½Õßµ¥¶ÀÐýת¡£
Ç°ÃæµÄ³ÌÐòÖУ¬ÐÎÌåÖ»ÓÐÒ»¸ö£¬Îª´Ë£¬ÎÒÃDZàÁËÒ»¸ö
³ÌÐò£¬ÀûÓÃËü¿ÉÒÔµ÷ÓÃÁ½¸öOBJÐÎÌ壬һ×óÒ»ÓÒ£¬ËüÃÇ·Ö±ðÈÆ
×ÔÉíµÄÖáÐýת£¬µ±È»£¬ÐÎÌåµÄÉú³ÉÈÔȻʹÓÃÉÏÃæµÄ
objFile.java³ÌÐò¡£ÁíÍ⣬ÎÒÃÇ»¹ÔÚ³ÌÐòÖмÓÁ˺ìÉ«µÄ±³¾°¡£
//Obj4.java
import java.applet.Applet;
import java.awt.BorderLayout;
import com.sun.j3d.utils.applet.MainFrame;
import com.sun.j3d.utils.universe.*;
import javax.media.j3d.*;
import javax.vecmath.*;
import com.sun.j3d.loaders.Scene;
import com.sun.j3d.loaders.objectfile.ObjectFile;
public class Obj4 extends Applet {
public BranchGroup createSceneGraph() {
BranchGroup objRoot = new BranchGroup();
TransformGroup objScale = new TransformGroup();
Transform3D t3d = new Transform3D();
t3d.setScale(0.3);
objScale.setTransform(t3d);
objRoot.addChild(objScale);
BoundingSphere bounds =
new BoundingSphere(new Point3d(0.0,0.0,0.0), 100.0);
Color3f bgColor = new Color3f(1.05f, 0.00f, 0.0f);
Background bg = new Background(bgColor);
bg.setApplicationBounds(bounds);
objRoot.addChild(bg);
Color3f light1Color = new Color3f(1.0f, 1.0f, 0.9f);
Vector3f light1Direction = new Vector3f(4.0f, -7.0f, -12.0f);
DirectionalLight light1
= new DirectionalLight(light1Color, light1Direction);
light1.setInfluencingBounds(bounds);
objRoot.addChild(light1);
BranchGroup b1 = new objFile("1.obj");
BranchGroup b2 = new objFile("2.obj");
objScale.addChild(createObject (b1, -1.2f , 0.0f ));
objScale.addChild(createObject (b2, 1.2f , 0.0f ));
objRoot.compile();
return objRoot;
}
private Group createObject (BranchGroup b, float xpos, float ypos ) {
Transform3D t = new Transform3D ( );
t.setTranslation ( new Vector3f ( xpos, ypos, 0.0f ) );
TransformGroup objTrans = new TransformGroup(t);
TransformGroup spin = new TransformGroup();
spin.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
spin.addChild(b);
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, spin, yAxis,
0.0f, (float) Math.PI*2.0f);
BoundingSphere bounds =
new BoundingSphere(new Point3d(0.0,0.0,0.0), 100.0);
rotator.setSchedulingBounds(bounds);
objTrans.addChild(rotator);
objTrans.addChild ( spin );
return objTrans ;
}
public Obj4(String args[]) {
setLayout(new BorderLayout());
Canvas3D c = new Canvas3D(null);
add("Center", c);
BranchGroup scene = createSceneGraph();
SimpleUniverse u = new SimpleUniverse(c);
u.getViewingPlatform().setNominalViewingTransform();
u.addBranchGraph(scene);
}
public static void main(String[] args) {
new MainFrame(new Obj4(args), 400,400);
}
}
//end of Obj4.java
--
¡ù À´Ô´:¡¤BBS ˮľÇ廪վ bbs.net.tsinghua.edu.cn¡¤[FROM: 202.192.158.89]
BBSˮľÇ廪վ¡Ã¾«»ªÇø