首页 | 博客群 | 公社 | 专栏 | 论坛 | 图片 | 资讯 | 注册 | 帮助 | 博客联播 | 随机访问
Java 3D API官方教程:2.5.3 GeometryStripArray类的子类[翻译]- -| 回首页 | 2005年索引 | - -用C语言操作Sqlite

Java 3D API官方教程:2.5.3节续(翻译)

关键词Java    3D    API    教程                                          

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. Point3f coords[] = new Point3f[totalN];

7. int stripCounts[] = {N+1, N+1, N+1, N+1};

8. float r = 0.6f;

9. float w = 0.4f;

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 Point3f(0.0f, 0.0f, w);

16. coords[1*(N+1)] = new Point3f(0.0f, 0.0f, 0.0f);

17. coords[2*(N+1)] = new Point3f(0.0f, 0.0f, 0.0f);

18. coords[3*(N+1)] = new Point3f(0.0f, 0.0f, -w);

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 Point3f(x, y, w);

25. coords[1*(N+1)+n+1] = new Point3f(x, y, w);

26. coords[2*(N+1)+N-n] = new Point3f(x, y, -w);

27. coords[3*(N+1)+n+1] = new Point3f(x, y, -w);

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所示.从行2326, 3639,并且行46指定了每一个顶点的颜色值。还有更多已知能力如灯光,纹理和材质属性可设置可视对象的表面属性。这此主题没有包含在本教程模块中,灯光和纹理是教程模块2的话题。

1. private Geometry yoyoGeometry() {

2.

3. TriangleFanArray tfa;

4. int N = 17;

5. int totalN = 4*(N+1);

6. Point3f coords[] = new Point3f[totalN];

7. Color3f colors[] = new Color3f[totalN];

8. Color3f red = new Color3f(1.0f, 0.0f, 0.0f);

9. Color3f yellow = new Color3f(0.7f, 0.5f, 0.0f);

10. int stripCounts[] = {N+1, N+1, N+1, N+1};

11. float r = 0.6f;

12. float w = 0.4f;

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 Point3f(0.0f, 0.0f, w);

19. coords[1*(N+1)] = new Point3f(0.0f, 0.0f, 0.0f);

20. coords[2*(N+1)] = new Point3f(0.0f, 0.0f, 0.0f);

21. coords[3*(N+1)] = new Point3f(0.0f, 0.0f, -w);

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 Point3f(x, y, w);

32. coords[1*(N+1)+N-n] = new Point3f(x, y, w);

33. coords[2*(N+1)+n+1] = new Point3f(x, y, -w);

34. coords[3*(N+1)+N-n] = new Point3f(x, y, -w);

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外部图形每一个三角形的前表面。关于前表面、后表面以及为什么将其设置成为不同样子在2.6.4节中有详细介绍。

【作者: wuxingblog】【访问统计:】【2005年10月5日 星期三 23:36】【注册】【打印

搜索

Google

Trackback

你可以使用这个链接引用该篇文章 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类[翻译]

回复

- 评论人:Ben   2008-04-08 09:09:56   

The Fans only have 17 vertices? Where is the 18th came from?

验证码:   
评论内容: