ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:52.63KB ,
资源ID:8685936      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8685936.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(一个简单的Java 3D源代码.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

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

1、一个简单的Java 3D源代码一个简单的Java 3D源代码 收藏 这段源代码实现了在一个窗体中显示一个场景;以一个棋盘格做的地面,在地面上浮着一个蓝色的球体,在场景中有一个环境光和一个直射光,实现了用鼠标全角度的观察场景的功能。从某种意义上来说这的确实现了一部3D游戏最原始的框架。代码是照着Killer Game Programming in Java一书中关于3D游戏制作的那部分写的,由于此书是英文版的据说在国内也买不到中文翻译版的,看得很费力,本人英文不好。只能慢慢的研究书中的源代码。下面说明下源代码的文件功能GameMain.java - 程序的入口。ScreenManager.Jav

2、a - 实现一个很简单的窗体类从JFrame派生,目前只返回一个窗体,以后可能实现最复杂的功能。WrapCheckers3D.Java - 实现一个简单的3D场景类,能实现一个简单的鼠标操作。CheckerFloor.Java - 实现一个国际象棋般的棋盘格做来场景中的地面。ColouredTile.Java - 派生自Shape3D类,能实现一个正方体平面,用来为CheckerFloor类实现棋盘格GameMain.Java1.importjava.awt.event.WindowAdapter; 2.importjava.awt.event.WindowEvent; 3.4.importj

3、avax.swing.JFrame; 5.importjavax.swing.JOptionPane; 6.7.8.publicclassGameMain 9.privatestaticintscrWidth=800; 10.privatestaticintscrHeight=600; 11.privatestaticintscrBitdepth=32; 12.privateJFramegameFrame; 13.privateWrapCheckers3Dwrap; 14. 15.publicstaticvoidmain(Stringargs) 16. 17.GameMaingame=newG

4、ameMain(); 18. 19. 20.publicGameMain() 21. 22.ScreenManagerscreen=newScreenManager(scrWidth,scrHeight,scrBitdepth,Java3DTest); 23.screen.setWindowMode(); 24.gameFrame=screen.getFrame(); 25.wrap=newWrapCheckers3D(scrWidth,scrHeight); 26.gameFrame.add(wrap); 27. 28. 29.ScreenManager.Javaview plaincopy

5、 to clipboardprint?1020304050607080901001101201301401501.importjava.awt.Dimension; 2.importjava.awt.DisplayMode; 3.importjava.awt.GraphicsDevice; 4.importjava.awt.GraphicsEnvironment; 5.importjava.awt.Insets; 6.importjava.awt.Toolkit; 7.importjava.awt.event.WindowAdapter; 8.importjava.awt.event.Wind

6、owEvent; 9.10.importjavax.swing.JFrame; 11.importjavax.swing.JOptionPane; 12.13.14.publicclassScreenManager 15.16.privateGraphicsDevicedevice; 17.privateJFrameframe; 18.privateStringtitle; 19.privatebooleanisResizable; 20.privatebooleanisWindowMode; 21.privateintscrWidth; 22.privateintscrHeight; 23.

7、privateintscrBitdepth; 24. 25.publicScreenManager(intscrWidth,intscrHeight,intscrBitdepth,Stringtitle) 26. 27.this.scrWidth=scrWidth; 28.this.scrHeight=scrHeight; 29.this.scrBitdepth=scrBitdepth; 30.this.title=title; 31. 32. 33.publicvoidsetWindowMode() 34. 35.frame=newJFrame(); 36.frame.setResizabl

8、e(false);/禁止窗体改变大小 37.frame.setPreferredSize(newDimension(scrWidth,scrHeight); 38.frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);/响应窗体的关闭事件,但不关闭窗体 39.frame.setVisible(true); 40./侦听窗体事件并捕获窗体关闭中的事件,在用户确认后退出程序 41.frame.addWindowListener(newWindowAdapter() 42.publicvoidwindowClosing(WindowEv

9、ente) 43. 44.intres=JOptionPane.showConfirmDialog(null,是否退出!,退出,JOptionPane.YES_NO_OPTION); 45.if(res=JOptionPane.YES_OPTION) 46.closeFrame(); 47. 48.); 49.this.setFrametoCenter(); 50. 51. 52.publicvoidsetFullWindowMode() 53. 54.if(frame!=null) 55. 56.device=GraphicsEnvironment.getLocalGraphicsEnvir

10、onment().getDefaultScreenDevice(); 57.DisplayModedisplayMode=device.getDisplayMode(); 58.frame.setPreferredSize(newDimension(displayMode.getWidth(),displayMode.getHeight(); 59. 60. 61. 62.publicintgetWidth() 63. 64.returnscrWidth; 65. 66. 67.publicintgetHeight() 68. 69.returnscrHeight; 70. 71. 72.pu

11、blicJFramegetFrame() 73. 74.returnframe; 75. 76. 77./将窗体在显示屏幕内居中显示 78.publicvoidsetFrametoCenter() 79. 80.if(device!=null) 81.return; 82.Insetsinset=frame.getInsets(); 83.intscrx=0; 84.intscry=0; 85.DimensionscrSize=Toolkit.getDefaultToolkit().getScreenSize(); 86.if(scrSize.widthscrWidth) 87.scrx=(s

12、crSize.width-scrWidth)/2; 88.if(scrSize.heightscrHeight) 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.publicvoidcloseFrame() 95. 96.frame.dispose(); 97.System.exit(0);

13、98. 99.WrapCheckers3D.Javaview plaincopy to clipboardprint?1020304050607080901001101201301401501.importjava.awt.BorderLayout; 2.importjava.awt.Color; 3.importjava.awt.GraphicsConfiguration; 4.5.importjavax.media.j3d.AmbientLight; 6.importjavax.media.j3d.Appearance; 7.importjavax.media.j3d.Background

14、; 8.importjavax.media.j3d.BoundingSphere; 9.importjavax.media.j3d.BranchGroup; 10.importjavax.media.j3d.Canvas3D; 11.importjavax.media.j3d.DirectionalLight; 12.importjavax.media.j3d.Material; 13.importjavax.media.j3d.Transform3D; 14.importjavax.media.j3d.TransformGroup; 15.importjavax.swing.JPanel;

15、16.importjavax.vecmath.Color3f; 17.importjavax.vecmath.Point3d; 18.importjavax.vecmath.Vector3d; 19.importjavax.vecmath.Vector3f; 20.21.importcom.sun.j3d.utils.behaviors.vp.OrbitBehavior; 22.importcom.sun.j3d.utils.geometry.Sphere; 23.importcom.sun.j3d.utils.universe.SimpleUniverse; 24.importcom.sun

16、.j3d.utils.universe.ViewingPlatform; 25.26.27.publicclassWrapCheckers3DextendsJPanel 28.29.privateBranchGroupsceneBg; 30.privateSimpleUniversesu; 31.privateBoundingSpherebounds; 32.privatestaticfinalfloatBOUNDSIZE=100.0f; 33. 34.publicWrapCheckers3D(intwidth,intheight) 35. 36.this.setLayout(newBorde

17、rLayout(); 37.GraphicsConfigurationconfig=SimpleUniverse.getPreferredConfiguration(); 38.Canvas3Dcanvas=newCanvas3D(config); 39.this.add(Center,canvas); 40.canvas.setBounds(0,0,width,height); 41. 42.su=newSimpleUniverse(canvas); 43.createSceneGroup(); 44.initUserPosition(); 45.orbitControls(canvas);

18、 46.su.addBranchGraph(sceneBg); 47. 48. 49.publicvoidcreateSceneGroup() 50. 51.sceneBg=newBranchGroup(); 52.bounds=newBoundingSphere(newPoint3d(0,0,0),BOUNDSIZE); 53.lightScene(); 54.addBackground(); 55.sceneBg.addChild(newCheckerFloor().getBG(); 56.floatingSphere(); 57.sceneBpile(); 58. 59. 60.priv

19、atevoidlightScene() 61. 62.Color3fwhite=newColor3f(1.0f,1.0f,1.0f); 63.AmbientLightambientLightNode=newAmbientLight(white); 64.ambientLightNode.setInfluencingBounds(bounds); 65.sceneBg.addChild(ambientLightNode); 66. 67.Vector3flightDirection=newVector3f(-1.0f,-1.0f,-1.0f); 68.DirectionalLightlight=

20、newDirectionalLight(white,lightDirection); 69.light.setInfluencingBounds(bounds); 70.sceneBg.addChild(light); 71. 72. 73.privatevoidaddBackground() 74. 75.Backgroundback=newBackground(); 76.back.setApplicationBounds(bounds); 77.back.setColor(0.17f,0.62f,0.92f); 78.sceneBg.addChild(back); 79. 80. 81.

21、privatevoidfloatingSphere() 82. 83.Color3fblack=newColor3f(0.0f,0.0f,0.0f); 84.Color3fblue=newColor3f(0.3f,0.3f,0.8f); 85.Color3fspecular=newColor3f(0.9f,0.9f,0.9f); 86. 87.MaterialblueMat=newMaterial(blue,black,blue,specular,25.0f); 88.blueMat.setLightingEnable(true); 89. 90.AppearanceblueApp=newAp

22、pearance(); 91.blueApp.setMaterial(blueMat); 92. 93.Transform3Dt3d=newTransform3D(); 94.t3d.set(newVector3f(0,4,0); 95.TransformGrouptg=newTransformGroup(t3d); 96.tg.addChild(newSphere(2.0f,blueApp); 97.sceneBg.addChild(tg); 98. 99. 100.privatevoidinitUserPosition() 101. 102.ViewingPlatformvp=su.get

23、ViewingPlatform(); 103.TransformGroupsteerTG=vp.getViewPlatformTransform(); 104. 105.Transform3Dt3d=newTransform3D(); 106.steerTG.getTransform(t3d); 107. 108.t3d.lookAt(newPoint3d(0,5,20),newPoint3d(0,0,0),newVector3d(0,1,0); 109.t3d.invert(); 110. 111.steerTG.setTransform(t3d); 112. 113. 114. 115.privatevoidorbitControls(Canvas3Dcanvas) 116. 117.OrbitBehaviororbit=newOrbitBehavior(canvas,OrbitBehavior.REVERSE_ALL); 118.orbit.setSchedulingBounds(bounds); 119.ViewingPlatformvp=su.getViewingPlatform(); 120

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

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