一个简单的Java 3D源代码.docx

上传人:b****6 文档编号:8685936 上传时间:2023-02-01 格式:DOCX 页数:15 大小:52.63KB
下载 相关 举报
一个简单的Java 3D源代码.docx_第1页
第1页 / 共15页
一个简单的Java 3D源代码.docx_第2页
第2页 / 共15页
一个简单的Java 3D源代码.docx_第3页
第3页 / 共15页
一个简单的Java 3D源代码.docx_第4页
第4页 / 共15页
一个简单的Java 3D源代码.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

一个简单的Java 3D源代码.docx

《一个简单的Java 3D源代码.docx》由会员分享,可在线阅读,更多相关《一个简单的Java 3D源代码.docx(15页珍藏版)》请在冰豆网上搜索。

一个简单的Java 3D源代码.docx

一个简单的Java3D源代码

一个简单的Java3D源代码收藏

这段源代码实现了在一个窗体中显示一个场景;以一个棋盘格做的地面,在地面上浮着一个蓝色的球体,在场景中有一个环境光和一个直射光,实现了用鼠标全角度的观察场景的功能。

从某种意义上来说这的确实现了一部3D游戏最原始的框架。

代码是照着《KillerGameProgramminginJava》一书中关于3D游戏制作的那部分写的,由于此书是英文版的据说在国内也买不到中文翻译版的,看得很费力,本人英文不好。

只能慢慢的研究书中的源代码。

下面说明下源代码的文件功能

GameMain.java-程序的入口。

ScreenManager.Java-实现一个很简单的窗体类从JFrame派生,目前只返回一个窗体,以后可能实现最复杂的功能。

WrapCheckers3D.Java-实现一个简单的3D场景类,能实现一个简单的鼠标操作。

CheckerFloor.Java-实现一个国际象棋般的棋盘格做来场景中的地面。

ColouredTile.Java-派生自Shape3D类,能实现一个正方体平面,用来为CheckerFloor类实现棋盘格

GameMain.Java

1.import java.awt.event.WindowAdapter;  

2.import java.awt.event.WindowEvent;  

3.  

4.import javax.swing.JFrame;  

5.import javax.swing.JOptionPane;  

6.  

7.  

8.public class GameMain {  

9.    private static int scrWidth = 800;  

10.    private static int scrHeight = 600;  

11.    private static int scrBitdepth = 32;  

12.    private JFrame gameFrame;  

13.    private WrapCheckers3D wrap;  

14.      

15.    public static void main(String[] args)  

16.    {  

17.        GameMain game = new GameMain();  

18.    }  

19.      

20.    public GameMain()  

21.    {  

22.        ScreenManager screen = new ScreenManager(scrWidth,scrHeight,scrBitdepth,"Java 3D Test");  

23.        screen.setWindowMode();  

24.        gameFrame = screen.getFrame();  

25.        wrap = new WrapCheckers3D(scrWidth,scrHeight);  

26.        gameFrame.add(wrap);  

27.    }  

28.      

29.}  

ScreenManager.Java

viewplaincopytoclipboardprint?

·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150

1.import java.awt.Dimension;  

2.import java.awt.DisplayMode;  

3.import java.awt.GraphicsDevice;  

4.import java.awt.GraphicsEnvironment;  

5.import java.awt.Insets;  

6.import java.awt.Toolkit;  

7.import java.awt.event.WindowAdapter;  

8.import java.awt.event.WindowEvent;  

9.  

10.import javax.swing.JFrame;  

11.import javax.swing.JOptionPane;  

12.  

13.  

14.public class ScreenManager {  

15.  

16.    private GraphicsDevice device;  

17.    private JFrame frame;  

18.    private String title;  

19.    private boolean isResizable;  

20.    private boolean isWindowMode;  

21.    private int scrWidth;  

22.    private int scrHeight;  

23.    private int scrBitdepth;  

24.      

25.    public ScreenManager(int scrWidth,int scrHeight,int scrBitdepth,String title)  

26.    {  

27.        this.scrWidth = scrWidth;  

28.        this.scrHeight = scrHeight;  

29.        this.scrBitdepth = scrBitdepth;  

30.        this.title = title;  

31.    }  

32.      

33.    public void setWindowMode()  

34.    {  

35.        frame = new JFrame();  

36.        frame.setResizable(false);//禁止窗体改变大小  

37.        frame.setPreferredSize(new Dimension(scrWidth,scrHeight));  

38.        frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);//响应窗体的关闭事件,但不关闭窗体  

39.        frame.setVisible(true);  

40.//      侦听窗体事件并捕获窗体关闭中的事件,在用户确认后退出程序  

41.        frame.addWindowListener(new WindowAdapter(){  

42.            public void windowClosing(WindowEvent e)  

43.            {  

44.                int res = JOptionPane.showConfirmDialog(null, "是否退出!

","退出",JOptionPane.YES_NO_OPTION);  

45.                if(res == JOptionPane.YES_OPTION)  

46.                closeFrame();  

47.            }  

48.        });  

49.        this.setFrametoCenter();  

50.    }  

51.      

52.    public void setFullWindowMode()  

53.    {  

54.        if(frame !

= null)  

55.        {  

56.            device = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();  

57.            DisplayMode displayMode = device.getDisplayMode();  

58.            frame.setPreferredSize(new Dimension(displayMode.getWidth(),displayMode.getHeight()));  

59.        }  

60.    }  

61.      

62.    public int getWidth()  

63.    {  

64.        return scrWidth;  

65.    }  

66.      

67.    public int getHeight()  

68.    {  

69.        return scrHeight;  

70.    }  

71.      

72.    public JFrame getFrame()  

73.    {  

74.        return frame;  

75.    }  

76.      

77.//  将窗体在显示屏幕内居中显示  

78.    public void setFrametoCenter()  

79.    {  

80.        if(device!

=null)  

81.            return;  

82.        Insets inset = frame.getInsets();  

83.        int scrx=0;  

84.        int scry=0;  

85.        Dimension scrSize = Toolkit.getDefaultToolkit().getScreenSize();  

86.        if(scrSize.width > scrWidth)  

87.            scrx = (scrSize.width-scrWidth)/2;  

88.        if(scrSize.height > scrHeight)  

89.            scry = (scrSize.height-scrHeight)/2;  

90.        frame.setBounds(scrx-inset.left, scry-inset.top, scrWidth+inset.right+inset.left, scrHeight+inset.bottom+inset.top);  

91.    }  

92.      

93.//  关闭窗体事件  

94.    public void closeFrame()  

95.    {  

96.        frame.dispose();  

97.        System.exit(0);  

98.    }  

99.}  

WrapCheckers3D.Java

viewplaincopytoclipboardprint?

·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150

1.import java.awt.BorderLayout;  

2.import java.awt.Color;  

3.import java.awt.GraphicsConfiguration;  

4.  

5.import javax.media.j3d.AmbientLight;  

6.import javax.media.j3d.Appearance;  

7.import javax.media.j3d.Background;  

8.import javax.media.j3d.BoundingSphere;  

9.import javax.media.j3d.BranchGroup;  

10.import javax.media.j3d.Canvas3D;  

11.import javax.media.j3d.DirectionalLight;  

12.import javax.media.j3d.Material;  

13.import javax.media.j3d.Transform3D;  

14.import javax.media.j3d.TransformGroup;  

15.import javax.swing.JPanel;  

16.import javax.vecmath.Color3f;  

17.import javax.vecmath.Point3d;  

18.import javax.vecmath.Vector3d;  

19.import javax.vecmath.Vector3f;  

20.  

21.import com.sun.j3d.utils.behaviors.vp.OrbitBehavior;  

22.import com.sun.j3d.utils.geometry.Sphere;  

23.import com.sun.j3d.utils.universe.SimpleUniverse;  

24.import com.sun.j3d.utils.universe.ViewingPlatform;  

25.  

26.  

27.public class WrapCheckers3D extends JPanel {  

28.  

29.    private BranchGroup sceneBg;  

30.    private SimpleUniverse su;  

31.    private BoundingSphere bounds;  

32.    private static final float BOUNDSIZE=100.0f;  

33.      

34.    public WrapCheckers3D(int width,int height)  

35.    {  

36.        this.setLayout(new BorderLayout());  

37.        GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();  

38.        Canvas3D canvas = new Canvas3D(config);  

39.        this.add("Center",canvas);  

40.        canvas.setBounds(0, 0, width, height);  

41.          

42.        su = new SimpleUniverse(canvas);  

43.        createSceneGroup();  

44.        initUserPosition();  

45.        orbitControls(canvas);  

46.        su.addBranchGraph(sceneBg);  

47.    }  

48.      

49.    public void createSceneGroup()  

50.    {  

51.        sceneBg = new BranchGroup();  

52.        bounds = new BoundingSphere(new Point3d(0,0,0),BOUNDSIZE);  

53.        lightScene();  

54.        addBackground();  

55.        sceneBg.addChild(new CheckerFloor().getBG());  

56.        floatingSphere();  

57.        sceneBpile();  

58.    }  

59.      

60.    private void lightScene()  

61.    {  

62.        Color3f white = new Color3f(1.0f,1.0f,1.0f);  

63.        AmbientLight ambientLightNode = new AmbientLight(white);  

64.        ambientLightNode.setInfluencingBounds(bounds);  

65.        sceneBg.addChild(ambientLightNode);  

66.          

67.        Vector3f lightDirection = new Vector3f(-1.0f,-1.0f,-1.0f);  

68.        DirectionalLight light = new DirectionalLight(white,lightDirection);  

69.        light.setInfluencingBounds(bounds);  

70.        sceneBg.addChild(light);  

71.    }  

72.      

73.    private void addBackground()  

74.    {  

75.        Background back = new Background();  

76.        back.setApplicationBounds(bounds);  

77.        back.setColor(0.17f, 0.62f, 0.92f);  

78.        sceneBg.addChild(back);  

79.    }  

80.      

81.    private void floatingSphere()  

82.    {  

83.        Color3f black = new Color3f(0.0f,0.0f,0.0f);  

84.        Color3f blue = new Color3f(0.3f,0.3f,0.8f);  

85.        Color3f specular = new Color3f(0.9f,0.9f,0.9f);  

86.          

87.        Material blueMat = new Material(blue,black,blue,specular,25.0f);  

88.        blueMat.setLightingEnable(true);  

89.          

90.        Appearance blueApp = new Appearance();  

91.        blueApp.setMaterial(blueMat);  

92.          

93.        Transform3D t3d =  new Transform3D();  

94.        t3d.set(new Vector3f(0,4,0));  

95.        TransformGroup tg = new TransformGroup(t3d);  

96.        tg.addChild(new Sphere(2.0f,blueApp));  

97.        sceneBg.addChild(tg);  

98.    }  

99.      

100.    private void initUserPosition()  

101.    {  

102.        ViewingPlatform vp = su.getViewingPlatform();  

103.        TransformGroup steerTG = vp.getViewPlatformTransform();  

104.          

105.        Transform3D t3d = new Transform3D();  

106.        steerTG.getTransform(t3d);  

107.          

108.        t3d.lookAt(new Point3d(0,5,20), new Point3d(0,0,0), new Vector3d(0,1,0));  

109.        t3d.invert();  

110.          

111.        steerTG.setTransform(t3d);  

112.          

113.    }  

114.      

115.    private void orbitControls(Canvas3D canvas)  

116.    {  

117.        OrbitBehavior orbit = new OrbitBehavior(canvas, OrbitBehavior.REVERSE_ALL);  

118.        orbit.setSchedulingBounds(bounds);  

119.        ViewingPlatform vp = su.getViewingPlatform( );  

120

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 其它模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1