00000008.htm

来自「水木清华BBS」· HTM 代码 · 共 553 行 · 第 1/3 页

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

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?