<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    千里冰封
    JAVA 濃香四溢
    posts - 151,comments - 2801,trackbacks - 0
    JAVA3D之HelloWorld

    很早就聽說了JAVA3D,可惜一直都沒有去看,那個時候JAVA3D還是1.4是最新版,轉眼一年多過去了,JAVA3D都到了1.5.1版了,在感慨時間易逝的同時也不免對自己沒有努力而感到嘆息。現在又重新拾起對JAVA3D的激情與希望,希望在以后的日子里,少一些空虛,多一份充實,與大家互勉。

    對于有JAVA基礎的人來說,學習JAVA3D并不會很困難,一般來說涉及到3D都是比較底層的東西了,但是JAVA3D卻把它抽象的非常好,很符合面向對象的思維,并且JAVA優秀的架構也使JAVA3D更加強大。我們還是先來看代碼吧,看了代碼才好講話:

    /*
     * Test1.java
     *
     * Created on 2007-10-4, 14:28:53
     *
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     
    */

    package test1;

    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.geometry.Cylinder;
    import com.sun.j3d.utils.universe.SimpleUniverse;
    import java.awt.Color;
    import java.awt.GraphicsConfiguration;
    import javax.media.j3d.Appearance;
    import javax.media.j3d.BoundingSphere;
    import javax.media.j3d.BranchGroup;
    import javax.media.j3d.Canvas3D;
    import javax.media.j3d.DirectionalLight;
    import javax.media.j3d.Material;
    import javax.media.j3d.Transform3D;
    import javax.media.j3d.TransformGroup;
    import javax.swing.JFrame;
    import javax.vecmath.Color3f;
    import javax.vecmath.Point3d;
    import javax.vecmath.Vector3f;

    /**
     *
     * 
    @author hadeslee
     
    */
    public class Test1 {

        
    public Test1() {
            build();
        }

        
    private void build() {
            
    //生成分支組合
            BranchGroup bg = createSceneGraph();
            
    //得到推薦的配置
            GraphicsConfiguration config =
            SimpleUniverse.getPreferredConfiguration();
            
    //用此配置構造一個用于顯示3D的畫布
            Canvas3D c=new Canvas3D(config);
            
    //用此畫布生成一個簡易的虛擬宇宙
            SimpleUniverse u = new SimpleUniverse(c);
            
    //設置觀察者的位置
            u.getViewingPlatform().setNominalViewingTransform();
            
    //把我們構造好的一個分支放進來
            u.addBranchGraph(bg);
            
    //生成一個Frame對象
            JFrame f=new JFrame("3D Hello");
            f.add(c);
            f.setSize(
    300,300);
            f.setLocationRelativeTo(
    null);
            f.setVisible(
    true);
            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }
    //創造分枝組合的方法
        private BranchGroup createSceneGraph() {
            
    //生成一個分支對象
            BranchGroup objRoot = new BranchGroup();
            
    //生成一個變換組合對象
            TransformGroup objTrans = new TransformGroup();
            
    //將其設為可寫,也就是在運行時可以進行更改
            objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
            
    //創建一個變換對象
            Transform3D trans = new Transform3D();
            Vector3f vec 
    = new Vector3f(0.5f00);
            
    //設置它的位置,為0.5,0,0
            trans.setTranslation(vec);
            
    //將此變換對象應用到變換組合中
            objTrans.setTransform(trans);
            
    //呈現方式
            Appearance app=new Appearance();
            
    //材質
            Material mater=new Material();
            
    //設置自己的顏色是藍色
            mater.setEmissiveColor(new Color3f(Color.BLUE));
            app.setMaterial(mater);
            
    //生成一個圓柱,并指定其顯示方式
            Cylinder box = new Cylinder(0.2f0.50f,app);
            
    //把圓柱加入到變換組合中,使它可以被變換
            objTrans.addChild(box);
            
    //把整個變換組件加入到分支組合中
            objRoot.addChild(objTrans);
            
    //作用的空間范圍 
            BoundingSphere bounds = new BoundingSphere(new Point3d(0.00.00.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);
            
    //預編譯一下,提高效率,也可以不要
            objRoot.compile();
            
    return objRoot;
        }

        
    public static void main(String[] args) {
            
    new Test1();
        }
    }

     

    代碼需要JAVA3D的運行環境,可以到這里下載:https://java3d.dev.java.net/,程序運行以后,可以看到一個3D的圓柱,可以用鼠標左鍵進行旋轉,鼠標右鍵進行平移,3D滾輪進行縮放,程序運行如下圖所示:

    在JAVA3D里面,所有的組件構成了一個圖表的結構,其中最頂端的就是虛擬宇宙,它只能有一個,然后它下面可以放很多個節點,節點下面還可以放節點,其中不但物體可以做為節點,燈光等別的東西也都是一個節點,附屬在一起,描述出了整個3D的世界。

    其實3D也沒有想象中那么難,只要把一些概念搞清楚了就可以了,有些概念我現在也不是很清楚,因為我們一般的編程模式不會用到這些,所以我們對這方面的知識就比較缺乏,現在只是盡自己的可能把自己所理解的寫出來,一來可以讓大家也了解一下JAVA3D,二來也算是自己的一個學習歷程吧。




    盡管千里冰封
    依然擁有晴空

    你我共同品味JAVA的濃香.
    posted on 2007-10-05 00:54 千里冰封 閱讀(5721) 評論(7)  編輯  收藏 所屬分類: JAVA擴展

    FeedBack:
    # re: JAVA3D學習(1)
    2007-10-05 02:18 | sonicluo3
    我也寫過一些關于Java3D的小程序,沒有太過深入的研究,但個人感覺在效率上面不太高.  回復  更多評論
      
    # re: JAVA3D學習(1)
    2007-10-05 02:20 | sonicluo3
    我覺得學習Java3D最好就是看它的demo了,不過要開發比較大的程序的話.單單看demo是不行的  回復  更多評論
      
    # re: JAVA3D學習(1)
    2007-10-05 08:57 | 千里冰封
    呵呵,其實對JAVA3D大家或許有點誤解,JAVA3D其實也是能做3D游戲的  回復  更多評論
      
    # re: JAVA3D學習(1)
    2007-10-05 08:57 | 千里冰封
    大型的不一定好做,小型的也挺不錯的  回復  更多評論
      
    # re: JAVA3D學習(1)
    2007-10-05 10:42 | 翔南
    呵呵
    學習了!!
    我也去試試!  回復  更多評論
      
    # re: JAVA3D學習(1)
    2007-10-06 20:00 | 李想
    個人覺得其前途還是在網頁應用上

    打個比方:某地產展示廳樓盤演示系統 在大廳里布置多臺用戶端計算機,集中一臺服務器管理,客戶可以從用戶端通過網頁瀏覽樓盤戶型的3D場景、虛擬漫游,并可查看多種戶型,基于于程序的靈活性,可以實現點取解說等效果。而當展示內容有所更改時只需要在服務器端更換程序即可,對用戶端要求比較低

    我是這么想的~不知還有沒有別的用途  回復  更多評論
      
    # re: JAVA3D學習(1)
    2008-10-02 18:07 |
    版主:向你學習,西安,qq87719230
    cnip@163.com  回復  更多評論
      
    主站蜘蛛池模板: 99亚洲乱人伦aⅴ精品| 亚洲精品无码日韩国产不卡av| 久久亚洲色WWW成人欧美| 毛片视频免费观看| 亚洲午夜一区二区三区| 亚洲成在人线aⅴ免费毛片| 亚洲人成电影网站| 成人激情免费视频| 亚洲人成色77777在线观看| 日日AV拍夜夜添久久免费| 精品亚洲视频在线| 国产成人亚洲精品91专区手机| 免费看一级毛片在线观看精品视频| 亚洲高清偷拍一区二区三区| 免费人成网站永久| 亚洲日产韩国一二三四区| 久久午夜无码免费| 亚洲人xxx日本人18| 成人永久福利免费观看| 人禽伦免费交视频播放| 国产V亚洲V天堂无码久久久| 无人在线观看免费高清| 亚洲一区二区三区不卡在线播放| 精品国产麻豆免费网站| 午夜成人无码福利免费视频| 亚洲人成在线播放网站| 99久久久国产精品免费牛牛| 狠狠色香婷婷久久亚洲精品| 免费人成网站7777视频| 免费无码又爽又刺激高潮软件| 亚洲精品在线播放视频| 在线A级毛片无码免费真人| 一区二区在线视频免费观看| 亚洲色欲色欲综合网站| 毛片免费观看的视频在线| 有色视频在线观看免费高清在线直播 | 亚洲精品无码Av人在线观看国产| 精品熟女少妇av免费久久| 亚洲一区二区观看播放| 老司机亚洲精品影视www| 四虎永久在线精品免费观看视频|