YoyoApp.java程序中的Yo-Yo对象显示了如何用TriangleFanArray对象来构建yo-yo的图形模型。TriangleFanArray包含了四个独立的扇面。两个外部面(圆盘面)以及两个内部的面(锥). 仅需用一个TriangleFanArray对象来表示这四个面。(注:Triangulator面和相关类在第3章有更详细的解释。)
图2-15显示TriangleFanArray的三种渲染形式. 第一个视图显示的是默认的渲染成为白色填充的多边形的方式。尽管如此,其很难看到细节,尤其是顶点的位置。为了更好地显示三角形的状况,其它两个视图显示用线连接了顶点的TriangleFanArray对象。如想知道如何像线一样渲染多边形,请看2.6节中PolygonAttributes类的介绍。
代码段2-7,方法yoyoGeometry()构建并返回所需的TriangleFanArray. 第15-18计算了所有四个扇面的中点。所有扇面有18个顶点。这在20-28行计算。第30-32行构造了空的TriangleFanArray对象。 然后第34 行是将上述计算好的坐标数据(从15-28行的数据)存入对象中。
1. private Geometry yoyoGeometry() {
2.
3. TriangleFanArray tfa;
4. int N = 17;
5. int totalN = 4*(N+1);
6. Point
7. int stripCounts[] = {N+1, N+1, N+1, N+1};
8. float r =
9. float w =
10. int n;
11. double a;
12. float x, y;
13.
14. // set the central points for four triangle fan strips
15. coords[0*(N+1)] = new Point
16. coords[1*(N+1)] = new Point
17. coords[2*(N+1)] = new Point
18. coords[3*(N+1)] = new Point
19.
20. for (a = 0,n = 0; n < N; a = 2.0*Math.PI/(N-1) * ++n){
21. x = (float) (r * Math.cos(a));
22. y = (float) (r * Math.sin(a));
23.
24. coords[0*(N+1)+N-n] = new Point
25. coords[1*(N+1)+n+1] = new Point
26. coords[2*(N+1)+N-n] = new Point
27. coords[3*(N+1)+n+1] = new Point
28. }
29.
30. tfa = new TriangleFanArray (totalN,
31. TriangleFanArray.COORDINATES,
32. stripCounts);
33.
34. tfa.setCoordinates(0, coords);
35.
36. return tfa;
37.} // end of method yoyoGeometry in class Yoyo
代码段 2-7 方法yoyoGeometry()构造TriangleFanArray 对象
所有白色的yo-yo 仅仅只是开始,图2-16显示了一个相似的对象,但是在每一个顶点上加上了颜色。修改了的方法yoyoGeometry() 包含了TriangleFanArray 对象的颜色。这修改的方法如代友段2-8所示.从行23到26, 36到39,并且行46指定了每一个顶点的颜色值。还有更多已知能力如灯光,纹理和材质属性可设置可视对象的表面属性。这此主题没有包含在本教程模块中,灯光和纹理是教程模块2的话题。
1. private Geometry yoyoGeometry() {
2.
3. TriangleFanArray tfa;
4. int N = 17;
5. int totalN = 4*(N+1);
6. Point
7. Color
8. Color
9. Color
10. int stripCounts[] = {N+1, N+1, N+1, N+1};
11. float r =
12. float w =
13. int n;
14. double a;
15. float x, y;
16.
17. // set the central points for four triangle fan strips
18. coords[0*(N+1)] = new Point
19. coords[1*(N+1)] = new Point
20. coords[2*(N+1)] = new Point
21. coords[3*(N+1)] = new Point
22.
23. colors[0*(N+1)] = red;
24. colors[1*(N+1)] = yellow;
25. colors[2*(N+1)] = yellow;
26. colors[3*(N+1)] = red;
27.
28. for(a = 0,n = 0; n < N; a = 2.0*Math.PI/(N-1) * ++n){
29. x = (float) (r * Math.cos(a));
30. y = (float) (r * Math.sin(a));
31. coords[0*(N+1)+n+1] = new Point
32. coords[1*(N+1)+N-n] = new Point
33. coords[2*(N+1)+n+1] = new Point
34. coords[3*(N+1)+N-n] = new Point
35.
36. colors[0*(N+1)+N-n] = red;
37. colors[1*(N+1)+n+1] = yellow;
38. colors[2*(N+1)+N-n] = yellow;
39. colors[3*(N+1)+n+1] = red;
40. }
41. tfa = new TriangleFanArray (totalN,
42. TriangleFanArray.COORDINATES|TriangleFanArray.COLOR_3,
43. stripCounts);
44.
45. tfa.setCoordinates(0, coords);
46. tfa.setColors(0,colors);
47.
48. return tfa;
49. } // end of method yoyoGeometry in class Yoyo
代码段 2-8 修改了的yoyoGeometry()方法,在其中加入了颜色设置
细致的读者可能注意到了从第36行到39行的不同.这些代码用于构造yo-yo外部图形每一个三角形的前表面。关于前表面、后表面以及为什么将其设置成为不同样子在
【作者: wuxingblog】【访问统计:】【2005年10月5日 星期三 23:36】【注册】【打印】
你可以使用这个链接引用该篇文章 http://publishblog.blogchina.com/blog/tb.b?diaryID=3134151
| Java 3D API:2.5.2 GeometryArray的子类[翻译] |
| Java 3D API官方教程:2.5.1节续 |
| Java 3D API官方教程:2.4.3 矢量类[翻译] |
| Java 3D API官方教程:2.5.3 GeometryStripArray类的子类[翻译] |
| Java 3D API官方教程2.5 Geometry类[翻译] |