CONE、SPHERE等。我们可以通过复杂的编程生成这些基本形体,也可以直接调用JAVA3D为我们提供的geometryclasses,利用它生成程序所需要的BOX、COLORCUBE、CONE、SPHERE、CYLINDER。下面是这些基本体的生成方法。
3.2.1平板的生成
UTILITY里BOX的构造函数有:
1.Box():成一个各边尺寸均为2的BOX,要说明的是,BOX、COLORCUBE、SPHERE的坐标原点均在其中心点,CONE、CYLINDER的则在其轴线的中点上。
2.Box(floatxdim,floatydim,Appearanceap):成一个给定尺寸、给定外观属性的BOX,例Box(.5f,.6f,.4f,myApp)
3.Box(floatxdim,floatydim,floatzdim,intprimflags,Appearanceap):生成一个有特定说明的BOX,例如:Box(.4f,.6f,.3f,Primitive.ENABLE_APPEARANCE_MODIFY,ap)表示程序在运行时可以改变其外观属性。
3.2.2立方体的生成
UTILITY里COLORCUBE的构造函数有:
1.ColorCube()
生成一个边长均为2的COLORCUBE
1.ColorCube(doublescale)
将边长均为2的COLORCUBE按比例放大缩小。
3.2.3圆锥的生成
UTILITY里CONE的构造函数有:
1.publicCone()
生成一个底半径为1,高为2的CONE。
2.Cone(floatradius,floatheight)
3.Cone(floatradius,floatheight,intprimflags,Appearanceap)
4.Cone(floatradius,floatheight,intprimflags,intxdivision,intydivision,Appearanceap)
这里,xdivision、ydivision可用来表示圆锥的显示是高精度的显示,或是底精度的显示,缺省时的中等精度时xdivision=15;ydivision=1;我们可利用这两个参数来改变显示的效果,使显示圆锥的三角片更多或更少些。
3.2.4球体的生成
UTILITY里SPHERE的构造函数有:
1.Sphere()
生成一个半径为1的SPHERE。
2.Sphere(floatradius)
3.Sphere(floatradius,Appearanceap)
4.Sphere(floatradius,intprimflags,Appearanceap)
5.Sphere(floatradius,intprimflags,intdivisions)
6.Sphere(floatradius,intprimflags,intdivisions,Appearanceap)
这里,divisions的作用和圆锥的xdivision、ydivision相似。
3.2.5.圆柱体的生成
UTILITY里CYLINDER的构造函数有:
1.Cylinder()
生成一个底半径为1,高为2的CYLINDER。
2.Cylinder(floatradius,floatheight)
3.Cylinder(floatradius,floatheight,Appearanceap)
4.Cylinder(floatradius,floatheight,intprimflags,Appearanceap)
5.Cylinder(floatradius,floatheight,intprimflags,intxdivision,intydivision,Appearanceap)
§3.3点、线、面的生成
3.3.1点的生成
编写JAVA3D程序实际上是编写一个特定的场景图,给出了场景图中带有形体及其属性的一个分支(BranchGroup)和表示观察位置等数据的另一个分支(ViewPlatform)。一般来说,表示观测位置的分支可以用JAVA3D的UTILITY来完成,即createSceneGraph方法的定义。
在这个方法里,程序先定义了一个分支objRoot,然后用数组的形式定义了顶点坐标vert和颜色color,再用PointArray定义了一组点point,并将顶点坐标及颜色赋值给point,由于JAVA3D中的PointArray点是Shape3D的子类,它不能直接放入一个BranchGroup,因而我们还要先定义一个Shape3D对象shape,再将point赋予shape,这样point就可以放入BranchGroup类型的对象objRoot中了。
JAVA3D提供的API中,可用于生成Point的对象有:PointArrayIndexedPointArray
1.PointArray
PointArray的构造函数为:
PointArray(intvertexCount,intvertexFormat);这里,vertexCount表示应生成的点的数目,vertexFormat表示所需要的顶点的格式。
点、线、面几何体所需要的顶点的格式有:
COORDINATES顶点坐标数组
NORMALS顶点法向数组
COLOR_3不带alpha值的颜色数组
COLOR_4带alpha值的颜色数组
TEXTURE_COORDINATE_2二维纹理坐标数组
TEXTURE_COORDINATE_3三维纹理坐标数组
2.IndexedPointArray
IndexedPointArray的构造函数为:
IndexedPointArray(intvertexCount,intvertexFormat,intindexCount);
利用本函数,我们可以从众多的点中,选择特定的点来显示。这里,vertexCount表示顶点坐标数组所提供的点的总个数,indexCount表示最终应生成的点的个数。JAVA3D可以生成任意大小的点,并且可以使点为方点或圆点。
3.3.2直线的生成
利用JAVA3D的一些对象,生成各种直线。可以生成直线的对象有:
1.LineArray
2.LineStripArray
3.IndexedLineArray
4.IndexedLineStripArray
我们可以根据各种不同的情况,生成不同的直线,如给定宽度的直线、虚线等。相应的的方法有:setLineWidth(floatlineWidth)
setLinePattern(intlinePattern)
setLineAntialiasingEnable(booleanstate)
对于线型linePattern有以下数据可选:
intPATTERN_SOLID,intPATTERN_DASH,intPATTERN_DOT,intPATTERN_DASH_DOT
这些内容对所有种类的直线都有效。
3.3.3面的生成
生成平面的对象及其定义
JAVA3D可通过编程显示出面来,面有两种:三角形和四边形,相应的对象为Triangle和Quad。
JAVA3D用于生成平面的对象有:
1.TriangleArray
2.QuadArray
3.TriangleStripArray
4.TriangleFanArray
5.IndexedTriangleArray
6.IndexedTriangleStripArray
7.IndexedTriangleFanArray
§3.4外部复杂形体的调用
利用前面介绍的方法生成我们所需要的基本形体,生成点、线、平面。但有的时候,我们需要用到其它格式的三维形体,如VRML2.0格式的图形文件,AUTOCAD绘出的DWG格式的三维形体,3DSMAX绘制出的复杂形体。对于这些形体,我们可以非常方便地将其用到JAVA3D程序中去。下面我们介绍一些图形格式在JAVA3D中的应用方法。
一.Wavefront的OBJ格式的图形文件的调用
JAVA3D编译环境所带的UTILITY有两个LOADER,一个可用来调用Wavefront软件的OBJ格式的三维图形格式文件,一个可用来调用Lightwave软件的LWS及LWO格式的三维图形格式文件。
为了使JAVA3D能够调用Wavefront的OBJ格式的图形文件,程序的头四行import语句就是用来处理Wavefront的OBJ格式的图形文件,第五行的import语句则是打开外部文件之用。
importcom.sun.j3d.loaders.objectfile.ObjectFile;
importcom.sun.j3d.loaders.ParsingErrorException;
importcom.sun.j3d.loaders.IncorrectFormatException;
importcom.sun.j3d.loaders.Scene;
importjava.io.*;
二.VRML2.0(VRML97)图形文件在JAVA3D中的应用简介
利用VRML97的LOADER我们可以在JAVA3D程序中方便地调用VRML图形。调用VRML97程序就象调用Wavefront的OBJ一样简单。
三.AUTOCADR14的DWG图形及3DSMAX图形在JAVA3D中的应用。
在三维图形生成过程中,国内目前大量使用AUTOCAD及3DSMAX等软件。对于3DSMAX软件,处理起来非常方便3DSMAX可以将其图形直接输出成VRML97格式。对于AUTOCADR14来说,目前还不太方便,需借助第三方软件转换成JAVA3D支持格式。
§3.5背景变换的实现方法
3.5.1灯光
光用于照亮场景中的几何对象。有几种不同的光类型,它们都是抽象Light类的子类。所有光都有一个颜色值,即开/关位,以及一个描述它照亮的场景区域的绑定对象。在现实世界里,周围的对象被几个不同的光源照亮。从窗户射进的阳光和屋顶的灯光一起照亮了屋内的一切。两种光都会影响屋内对象的颜色和外观。在Java3D中,可以通过使用多个光源来模拟实际的光照效果。
光的类型
环境光:在场景中AmbientLight无处不在。它不发自某个特
上一篇:
java+课程设计+扫雷(论文和程序)
下一篇:
试题库管理系统毕业论文