基于Java3D的摆钟设计.doc_第1页
基于Java3D的摆钟设计.doc_第2页
基于Java3D的摆钟设计.doc_第3页
基于Java3D的摆钟设计.doc_第4页
基于Java3D的摆钟设计.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

目 录设计的需求分析2实际题目2要解决的问题2问题的功能说明2软件系统结构2Java 3D功能描述2场景图描述3用户界面3关键技术4三维物体建模技术.5程序运行结果6摆动状态6结论7设计的需求分析实际题目 本课题的题目为:基于Java 3D的摆钟设计要解决的问题 本课题的核心是解决钟摆运动的问题。但是相对于核心代码的实现,基础场景的布置,三角形面片的设计以及纹理的映射等也是十分重要的,下面将详细说明本课题需要解决的问题:l 背景图映射问题。l 摆钟各部分运动的实现问题。l 纹理映射的实现问题。l 环境光设置问题。问题的功能说明(1) 背景图映射问题。一般的场景中,我们只是通过简单的调用方法对背景进行单一着色,比如:Background bg = new Background(bgColor);这样的背景会略显单调,所以,本科中首先要解决的问题是在场景背景中映射图片,使得背景更加生动且逼真。(2) 摆钟各部分运动的实现。本场景中,实现的主要过程是钟摆的周期性摆动以及各指针的正常旋转。(3) 纹理映射的实现。本课题实现的场景中,表盘以及背景墙需要采用不同的纹理映射,实现不同的效果,其中背景墙需要特定的花纹,而表盘则采用已设计好的图案。(4) 聚光灯效果。场景中添加环境光束,使得物体呈现不同的视觉效果,软件系统结构Java 3D功能描述本课题使用的核心技术是Java 3D。Java 3D是Java语言在三维图形领域的扩展,是一组应用编程接口(API)。利用Java 3D提供的API,编程人员可以编写出相对较多的逼真且操作性强的一些三维图像或者游戏。其功能详细介绍如下: 生成简单或复杂的形体(也可以调用现有的三维形体) 使形体具有颜色、透明效果、贴图。 在三维环境中生成灯光、移动灯光。 具有行为的处理判断能力(键盘、鼠标、定时等)。 生成雾、背景、声音。 使形体变形、移动、生成三维动画。 编写非常复杂的应用程序,用于各种领域如 VR(虚拟现实)。场景图描述Java 3D场景图结构。Java 3D采用场景结构图的场景组织模式。场景图是一种DAG图,类似于一种属性结构,即一些具有方向性的不对称图形组成的树状结构。我们在一个 Java3D 应用程序看到的逼真三维场景从程序的角度看来,实际就是由 Java3D 定义的一系列的对象,这些对象不是杂乱无序,对象之间也不是毫无关系。如果想让三维图像正常显示,必须在这两点上遵循 Java3D 场景图的规定。如下图 1,Java3D 场景图的树结构由各种各样的对象组成,其中,场景图中线和线的交汇点称为节点(Node),这些节点都是 Java3D 类的实例(Instance of Class),节点之间的线表示各个实例之间的关系。图1:Java 3D场景图 本课题的场景图中,按照上述的Java 3D场景图的描述,进行场景设置,其中,Virtual Universe采用默认值。并且没有采用观察者模式。用户界面如下图2所示,为用户的初始化界面,由于开始状态是动态效果图,本图只是某一时刻的截图。图2 用户界面图关键技术三维物体建模技术/ 时针设计 Appearance ap = new Appearance(); ap.setMaterial(new Material(); Shape3D shapeHour = new Shape3D(createGeometry(0.4, 0.02, 0.02), ap); TransformGroup spinHour = new TransformGroup(); spinHour.addChild(shapeHour); spinHour.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); root.addChild(spinHour); / 分针设计 Shape3D shapeMin = new Shape3D(createGeometry(0.5, 0.02, 0.02), ap); TransformGroup spinMin = new TransformGroup(); spinMin.addChild(shapeMin); spinMin.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);root.addChild(spinMin); / 秒针设计 Shape3D shapeSec = new Shape3D(createGeometry(0.5, 0.01, 0.01), ap); TransformGroup spinSec = new TransformGroup(); spinSec.addChild(shapeSec); spinSec.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); root.addChild(spinSec);/ 钟摆设计 Cylinder rod = new Cylinder(0.01f,1f,Cylinder.GENERATE_NORMALS,apFace); Transform3D trPend = new Transform3D(); trPend.setTranslation(new Vector3d(0,-0.5,-0.01); TransformGroup tgPend = new TransformGroup(trPend); Sphere mass = new Sphere(0.2f,Sphere.GENERATE_NORMALS,30); Transform3D trMass = new Transform3D(); trMass.setScale(new Vector3d(1,1,0.2); trMass.setTranslation(new Vector3d(0,-0.5,0); TransformGroup tgMass = new TransformGroup(trMass); tgMass.addChild(mass); tgPend.addChild(tgMass); TransformGroup tgSwing = new TransformGroup(); tgSwing.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); tgPend.addChild(rod); tgSwing.addChild(tgPend); root.addChild(tgSwing); Alpha alpha = new Alpha(-1,Alpha.INCREASING_ENABLE|Alpha.DECREASING_ENABLE,0,0,500,0,0,500,0,0); Transform3D trAxis = new Transform3D(); trAxis.rotX(Math.PI/2); RotationInterpolator swing = new RotationInterpolator(alpha, tgSwing, trAxis,(float)(-Math.PI/6), (float)(Math.PI/6); tgPend.addChild(swing); swing.setSchedulingBounds(bounds);程序运行结果摆动状态 摆动状态下,和用户所看到的初始界面一样。由于摆动时,界面中的钟摆和各指针都是转动的,所以此时截取的是其

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论