00000008.htm
来自「水木清华BBS」· HTM 代码 · 共 553 行 · 第 1/3 页
HTM
553 行
<HTML><HEAD> <TITLE>BBS水木清华站∶精华区</TITLE></HEAD><BODY><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER>发信人: vrml (3d), 信区: Java <BR>标 题: JAVA3D学习系列(8)--线的生成 <BR>发信站: BBS 水木清华站 (Thu Apr 8 10:38:11 1999) <BR> <BR> JAVA3D学习系列(8)-----直线的生成 <BR> <BR> <BR> 汕头大学机电系 张杰(<A HREF="mailto:jzhang@mailserv.stu.edu.cn)">jzhang@mailserv.stu.edu.cn)</A> <BR> <BR> <BR> <BR> <BR> 我们可以利用JAVA3D的一些对象,生成各种直线。 <BR>可以生成直线的对象有: <BR>1. LineArray <BR> LineArray(int vertexCount, int vertexFormat) <BR> <BR>2. LineStripArray <BR> LineStripArray(int vertexCount ,int vertexFormat, <BR> int[] stripVertexCounts ) <BR> <BR>3. IndexedLineArray <BR> IndexedLineArray(int vertexCount, int vertexFormat, <BR> int indexCount ) <BR> <BR>4. IndexedLineStripArray <BR> IndexedLineStripArray( int vertexCount, int vertexFormat, <BR> int indexCount, int stripIndexCounts[]) <BR> <BR>一. 利用LineArray生成直线 <BR> LineArray对象的定义如下: <BR> LineArray(int vertexCount, int vertexFormat) <BR> 这里: <BR> vertexCount表示顶点的个数(必须为偶数) <BR> vertexFormat表示顶点的格式(第七讲有介绍) <BR> <BR> 由下面的程序我们得知,Line1.java和前面介绍的 <BR>Point4.java几乎完全一样,lineShape1.java和 <BR>pointShape.java也相差不多。运行Line1.java我们获得 <BR>了三条直线,由此得知,LineArray的作用是生成多条直线, <BR>顶点坐标数组的每一对数据构成一条直线。 <BR> 在编写LineArray生成的直线时,要注意,顶点及颜色 <BR>的个数必须相等且为偶数,此数目必须赋值于vertexCount,也即 <BR>程序中的vertexCount必须为偶数且不能少于顶点的个数。 <BR> <BR> -------------------------- 第一条 <BR> <BR> ---------------- 第二条 <BR> <BR> -------------------------- 第三条 <BR> <BR> 我们可以根据各种不同的情况,生成不同的直线,如 <BR>给定宽度的直线、虚线等。相应的的方法有: <BR> setLineWidth(float lineWidth) <BR> setLinePattern(int linePattern) <BR> setLineAntialiasingEnable(boolean state) <BR> 对于线型linePattern有以下数据可选: <BR> int PATTERN_SOLID <BR> int PATTERN_DASH <BR> int PATTERN_DOT <BR> int PATTERN_DASH_DOT <BR> 这些内容对所有种类的直线都有效。 <BR> <BR> 前面我们利用PointArray生成了六个点,这里,我们 <BR>将前面的pointShape.java稍微变化一下,则同样的六个点生 <BR>成了三条直线,所用的两个程序为: <BR>//lineShape1.java <BR> <BR>import javax.media.j3d.*; <BR> <BR>public class lineShape1 extends Shape3D { <BR> <BR> private float vert[] = { <BR> .8f, 0.8f,0.0f, <BR> -0.8f, 0.8f,0.0f, <BR> 0.5f, 0.0f,0.0f, <BR> -0.5f, 0.0f,0.0f, <BR> -0.8f,-0.8f,0.0f, <BR> 0.8f,-0.8f,0.0f, <BR> }; <BR> <BR> private float color[] = { <BR> 0.0f,0.5f,1.0f, <BR> 0.5f,0.0f,1.0f, <BR> 0.0f,0.8f,2.0f, <BR> 1.0f,0.0f,0.3f, <BR> 0.0f,1.0f,0.3f, <BR> 0.3f,0.8f,0.0f, <BR> }; <BR> <BR> public lineShape1() { <BR> LineArray line = new LineArray(6, <BR> LineArray.COORDINATES|LineArray.COLOR_3); <BR> line.setCoordinates(0,vert); <BR> line.setColors(0,color); <BR> LineAttributes la = new LineAttributes(); <BR> la.setLineWidth(5.0f); <BR> la.setLineAntialiasingEnable(true); <BR> Appearance ap = new Appearance(); <BR> ap.setLineAttributes(la); <BR> this.setGeometry(line); <BR> this.setAppearance(ap); <BR> } <BR>} <BR>//end of lineShape1.java <BR>------------------------------------ <BR>//Line1.java ---using LineArray object <BR> <BR>import java.applet.Applet; <BR>import java.awt.BorderLayout; <BR>import com.sun.j3d.utils.applet.MainFrame; <BR>import com.sun.j3d.utils.universe.*; <BR>import javax.media.j3d.*; <BR>import javax.vecmath.*; <BR> <BR>public class Line1 extends Applet { <BR> <BR> private BranchGroup createSceneGraph() { <BR> BranchGroup objRoot = new BranchGroup(); <BR> Shape3D shape = new lineShape1(); <BR> objRoot.addChild(shape); <BR> objRoot.compile(); <BR> return objRoot; <BR> } <BR> <BR> public Line1() { <BR> setLayout(new BorderLayout()); <BR> Canvas3D c = new Canvas3D(null); <BR> add("Center", c); <BR> BranchGroup scene = createSceneGraph(); <BR> SimpleUniverse u = new SimpleUniverse(c); <BR> u.getViewingPlatform().setNominalViewingTransform(); <BR> u.addBranchGraph(scene); <BR> } <BR> <BR> public static void main(String[] args) { <BR> new MainFrame(new Line1(), 400,400); <BR> } <BR>} <BR> <BR>//end of Line1.java <BR> <BR> <BR> <BR>二. 利用LineStripArray生成直线 <BR> LineStripArray可用来生成多条折线段 <BR> LineStripArray对象的定义如下: <BR> LineStripArray(int vertexCount ,int vertexFormat, <BR> int[] stripVertexCounts ) <BR> 这里: <BR> vertexCount表示顶点的个数(必须为偶数) <BR> vertexFormat表示顶点的格式(第七讲有介绍) <BR> stripVertexCounts为一数组,数组里的每一个数值表示 <BR> 每条折线段所拥有的顶点数目。 <BR> 下面我们利用lineShape1.java同样的顶点坐标数组及 <BR>颜色数组,用LineStripArray对象生成直线。程序也是两个: <BR>lineShape2.java、Line2.java,并使生成的直线绕着Y轴旋转, <BR>直线线型为虚线,线宽为30个像素。 <BR>//lineShape2.java <BR> <BR>import javax.media.j3d.*; <BR> <BR>public class lineShape2 extends Shape3D { <BR> int StripCount[] = new int[1]; <BR> <BR> private float vert[] = { <BR> .8f, 0.8f,0.0f, <BR> -0.8f, 0.8f,0.0f, <BR> 0.5f, 0.0f,0.0f, <BR> -0.5f, 0.0f,0.0f, <BR> -0.8f,-0.8f,0.0f, <BR> 0.8f,-0.8f,0.0f, <BR> }; <BR> <BR> private float color[] = { <BR>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?