2017年11月9日 星期四

JavaFX 3D - Heptagonal Dodecahedron (Type A) (C4-Symmetric Form 1)

以下是以JavaFX 8的TriangleMesh類別建構之Heptagonal Dodecahedron (Type A) (C4-Symmetric Form 1),屬於Higher Genus Toroidal Solid之一。

The Higher Genus Toroidal Solids are a collection of toroidal solids. A toroidal solid is an orientable polyhedron without self-intersections that has genus greater than zero, meaning that it contains one or more holes. An orientable polyhedron's genus (G) is related to the number of vertices (V), faces (F), and edges (E) as:

V + F − E = 2 − 2 * G

float  C0 = length *   6.0f;
float  C1 = length *  21.0f;
float  C2 = length *  42.0f;
float  C3 = length *  63.0f;
float  C4 = length *  84.0f;
float  C5 = length *  98.0f;
float  C6 = length * 102.0f;
float  C7 = length * 126.0f;
float  C8 = length * 168.0f;
float  C9 = length * 195.0f;
float C10 = length * 210.0f;

// 建立TriangleMesh
TriangleMesh trianglemesh = new TriangleMesh();

// 設定頂點座標
trianglemesh.getPoints().addAll(
   C10,  C10,  C10,
  -C10, -C10, -C10,
    C8,   C8,   C8,
    C7,   C7,   C7,
  -C10,  C10,  C10,
   C10, -C10,  C10,
   C10,  C10, -C10,
  -C10,  -C3,  C10,
   C10, -C10,  -C3,
   -C3,  C10, -C10,
   -C5, -C10,  C10,
   C10,  -C5, -C10,
  -C10,  C10,  -C5,
    C4,   C4,  C10,
   C10,   C4,   C4,
    C4,  C10,   C4,
   -C2,  -C8,  C10,
   C10,  -C2,  -C8,
   -C8,  C10,  -C2,
  -C10,   C8, -C10,
  -C10, -C10,   C8,
    C8, -C10, -C10,
  -C10,   C8,  -C1,
   -C1, -C10,   C8,
    C8,  -C1, -C10,
    C0,  -C6,   C9,
    C9,   C0,  -C6,
   -C6,   C9,   C0
);

// 設定貼圖座標
trianglemesh.getTexCoords().addAll(
  0.0f, 0.0f, // 0
  0.5f, 0.0f, // 1
  1.0f, 0.0f, // 2
  0.0f, 0.5f, // 3
  0.5f, 0.5f, // 4
  1.0f, 0.5f, // 5
  0.0f, 1.0f, // 6
  0.5f, 1.0f, // 7
  1.0f, 1.0f  // 8
);

// 設定各三角形的面
trianglemesh.getFaces().addAll(
   0, 1,  4, 5,  7, 2,  // Yellow
   0, 1,  7, 5, 13, 2,  // Yellow
   0, 1, 13, 5, 16, 2,  // Yellow
   0, 1, 16, 5,  5, 2,  // Yellow
  16, 1, 10, 5,  5, 2,  // Yellow
   0, 1,  5, 5,  8, 2,  // Yellow
   0, 1,  8, 5, 14, 2,  // Yellow
   0, 1, 14, 5, 17, 2,  // Yellow
   0, 1, 17, 5,  6, 2,  // Yellow
  17, 1, 11, 5,  6, 2,  // Yellow
   0, 1,  6, 5,  9, 2,  // Yellow
   0, 1,  9, 5, 15, 2,  // Yellow
   0, 1, 15, 5, 18, 2,  // Yellow
   0, 1, 18, 5,  4, 2,  // Yellow
  18, 1, 12, 5,  4, 2,  // Yellow
   1, 0, 19, 3, 24, 1,  // Red
   1, 0, 24, 3,  9, 1,  // Red
   1, 0,  9, 3,  6, 1,  // Red
   1, 0,  6, 3, 11, 1,  // Red
   1, 0, 11, 3, 21, 1,  // Red
   1, 0, 21, 3, 23, 1,  // Red
   1, 0, 23, 3,  8, 1,  // Red
   1, 0,  8, 3,  5, 1,  // Red
   1, 0,  5, 3, 10, 1,  // Red
   1, 0, 10, 3, 20, 1,  // Red
   1, 0, 20, 3, 22, 1,  // Red
   1, 0, 22, 3,  7, 1,  // Red
   1, 0,  7, 3,  4, 1,  // Red
   1, 0,  4, 3, 12, 1,  // Red
   1, 0, 12, 3, 19, 1,  // Red
   2, 3, 13, 6,  7, 7,  // Green
   2, 3,  7, 6, 22, 7,  // Green
   2, 3, 22, 6, 27, 7,  // Green
   2, 3, 27, 6, 18, 7,  // Green
   2, 3, 18, 6, 15, 7,  // Green
   2, 3, 15, 6,  9, 7,  // Green
   2, 3,  9, 6, 24, 7,  // Green
   2, 3, 24, 6, 26, 7,  // Green
   2, 3, 26, 6, 17, 7,  // Green
   2, 3, 17, 6, 14, 7,  // Green
   2, 3, 14, 6,  8, 7,  // Green
   2, 3,  8, 6, 23, 7,  // Green
   2, 3, 23, 6, 25, 7,  // Green
   2, 3, 25, 6, 16, 7,  // Green
   2, 3, 16, 6, 13, 7,  // Green
   3, 7, 25, 8, 23, 5,  // Blue
   3, 7, 23, 8, 21, 5,  // Blue
   3, 7, 21, 8, 11, 5,  // Blue
   3, 7, 11, 8, 17, 5,  // Blue
   3, 7, 17, 8, 26, 5,  // Blue
   3, 7, 26, 8, 24, 5,  // Blue
   3, 7, 24, 8, 19, 5,  // Blue
   3, 7, 19, 8, 12, 5,  // Blue
   3, 7, 12, 8, 18, 5,  // Blue
   3, 7, 18, 8, 27, 5,  // Blue
   3, 7, 27, 8, 22, 5,  // Blue
   3, 7, 22, 8, 20, 5,  // Blue
   3, 7, 20, 8, 10, 5,  // Blue
   3, 7, 10, 8, 16, 5,  // Blue
   3, 7, 16, 8, 25, 5   // Blue
);

// 設定各面的平滑參數
trianglemesh.getFaceSmoothingGroups().addAll(
  0, 0, 0, 0, 0,
  0, 0, 0, 0, 0,
  0, 0, 0, 0, 0,
  0, 0, 0, 0, 0,
  0, 0, 0, 0, 0,
  0, 0, 0, 0, 0,
  0, 0, 0, 0, 0,
  0, 0, 0, 0, 0,
  0, 0, 0, 0, 0,
  0, 0, 0, 0, 0,
  0, 0, 0, 0, 0,
  0, 0, 0, 0, 0
);

// 建立MeshView
MeshView meshview;

meshview = new MeshView(createMesh(0.5f));
...
【參考資料】

[1] Java Official Web Site:http://www.oracle.com/technetwork/java/index.html
[2] JavaFX:http://www.oracle.com/technetwork/java/javafx
[3] JavaFX 8.0 API Specification.
[4] Java Platform, Standard Edition 8 API Specification.
[5] JDK 8 Certified System Configurations.
[6] H. M. Cundy, A. P. Rollett, Mathematical Models, Tarquin Publications, 1981.
[7] G. Sellers, R. S. Wright, N. Haemel, OpenGL SuperBible: Comprehensive Tutorial and Reference (6th Edition), Addison-Wesley Professional, 2013.
[8] 黃嘉輝, JavaFX 8技術手冊, ISBN: 9789863474050, 碁峰資訊, 2014.

© Chia-Hui Huang

沒有留言:

張貼留言