用Java3D寫了一個金字塔

          Java3D寫了一個金字塔

          打開eclipose3.1,進入界面。點擊File->new->class彈出對話框,寫好你要建立的類文件名TestPyramid

          然后寫入代碼:

          //1 引入我們要調用的包:

          import java.applet.Applet; import java.awt.BorderLayout; import java.awt.Frame; import java.awt.GraphicsConfiguration;

          import com.sun.j3d.utils.applet.MainFrame; import com.sun.j3d.utils.geometry.ColorCube; import com.sun.j3d.utils.universe.*; import com.sun.j3d.utils.behaviors.mouse.*; import javax.media.j3d.*; import javax.vecmath.*;

          import java.awt.event.*; import java.util.Enumeration;

          //2. 現在我們正式開動了。先寫一個我們要展現的金字塔。

          public class TestPyramid extends Applet {

          Shape3D createPyramid() // 因為我們要創建的金字塔是Shape3D類型。

          {

           IndexedTriangleArray pyGeom =

             new IndexedTriangleArray(5, GeometryArray.COORDINATES

                     | GeometryArray.COLOR_3

                     , 18);

          // 這是用數組來創建一連串三角形的函數。其中5是我們創建模型所需的頂點數

          // GeometryArray.COORDINATES 是用坐標點來構建面。

          // 18 是來構建這個金字塔所用到的索引點數。

          // 定義5個頂點

           pyGeom.setCoordinate(0,new Point3f(  0.0f,  0.7f,  0.0f));

           pyGeom.setCoordinate(1,new Point3f( -0.4f,  0.0f, -0.4f));

           pyGeom.setCoordinate(2,new Point3f( -0.4f, 0.0f,  0.4f));

           pyGeom.setCoordinate(3,new Point3f(  0.4f,  0.0f,  0.4f));

           pyGeom.setCoordinate(4,new Point3f(  0.4f,  0.0f, -0.4f));

           

          // 構建第一個三角形面。

           pyGeom.setCoordinateIndex(0,0);

           pyGeom.setCoordinateIndex(1,1);

           pyGeom.setCoordinateIndex(2,2);

           

           pyGeom.setCoordinateIndex(3,0);

           pyGeom.setCoordinateIndex(4,2);

           pyGeom.setCoordinateIndex(5,3);

           

           pyGeom.setCoordinateIndex(6,0);

           pyGeom.setCoordinateIndex(7,3);

           pyGeom.setCoordinateIndex(8,4);

           

           pyGeom.setCoordinateIndex(9,0);

           pyGeom.setCoordinateIndex(10,4);

           pyGeom.setCoordinateIndex(11,1);

           

           pyGeom.setCoordinateIndex(12,1);

           pyGeom.setCoordinateIndex(13,4);

           pyGeom.setCoordinateIndex(14,2);

           

           pyGeom.setCoordinateIndex(15,4);

           pyGeom.setCoordinateIndex(16,3);

           pyGeom.setCoordinateIndex(17,2);

           

           Color3f c = new Color3f(0.6f,0.5f,0.55f);

           pyGeom.setColor(0,c);

           pyGeom.setColor(1,c);

           pyGeom.setColor(2,c);

           pyGeom.setColor(3,c);

           pyGeom.setColor(4,c);

           

           Shape3D pyramid = new Shape3D(pyGeom);

           return pyramid;

          }   

          //3. 創建視景根節點

          public BranchGroup createSceneGraph()

          {

           // 創建視景根節點

           

           BranchGroup objRoot = new BranchGroup();

           TransformGroup objRotate = new TransformGroup();

           objRotate.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);

           objRotate.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);

           

           objRoot.addChild(objRotate);

           objRotate.addChild(createPyramid());

           

           MouseRotate myMouseRotate = new MouseRotate();

           myMouseRotate.setTransformGroup(objRotate);

           myMouseRotate.setSchedulingBounds(new BoundingSphere());

           objRoot.addChild(myMouseRotate);

           

           // Java3D預先優化

           objRoot.compile();

           return objRoot; 

          }         

          //4. 在初始化函數中配置Applet顯示

          public TestPyramid()

          {

           setLayout(new BorderLayout());

           GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();

           

           Canvas3D canvas3D = new Canvas3D(config);

           add("Center",canvas3D);

           

           BranchGroup scene = createSceneGraph();

           

           //SimpleUniverse 是一個方便的工具類

           SimpleUniverse simpleU = new SimpleUniverse(canvas3D);

           simpleU.getViewingPlatform().setNominalViewingTransform();

           

           simpleU.addBranchGraph(scene);

          }      

          //5. 最后。

          public static void main(String[] args)

          {

           Frame frame = new MainFrame(new TestPyramid(),256,256);

          }                

          }

          運行結果如圖所示:

          prymid.jpg

          posted on 2006-07-10 22:27 XiaoLi 閱讀(1196) 評論(0)  編輯  收藏 所屬分類: Java

          公告


          文章發布許可

          本站作品均采用知識共享署名-非
          商業性使用-禁止演繹 2.5 中國大
          陸許可協議
          進行許可。

          Books I've Translated

          《精通Nginx(第二版)》

          精通Nginx(第二版)
          《云計算:原理與范式》

           云計算:原理與范式

          《SQL技術手冊(第三版)》
          SQL技術手冊(第三版)
          《MySQL核心技術手冊(第二版)》
          MySQL核心技術手冊(第2版)
          《RESTful Web Services中文版》
          RESTful Web Services中文版

          導航

          留言簿(2)

          隨筆分類

          搜索

          最新評論

          主站蜘蛛池模板: 丽水市| 静海县| 临高县| 舟山市| 广宁县| 岳西县| 金塔县| 宜宾县| 文安县| 江都市| 吴堡县| 宁晋县| 上杭县| 郴州市| 永顺县| 丹巴县| 罗定市| 中宁县| 南华县| 南投县| 新巴尔虎右旗| 临夏县| 龙陵县| 临清市| 厦门市| 临江市| 静乐县| 宁夏| 满城县| 城步| 大洼县| 天水市| 常德市| 陈巴尔虎旗| 肥乡县| 宜昌市| 庆阳市| 阳高县| 天长市| 郁南县| 从化市|