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ˮľÇ廪վ¡Ã¾«»ªÇø