13#define ANONYMOUS anonymous
17static const gml::dvec3 teapotData[32][4][4] = {
18 {{{1.40, 0.00, 2.40}, {1.40, -0.78, 2.40}, {0.78, -1.40, 2.40}, {0.00, -1.40, 2.40}},
19 {{1.34, 0.00, 2.53}, {1.34, -0.75, 2.53}, {0.75, -1.34, 2.53}, {0.00, -1.34, 2.53}},
20 {{1.44, 0.00, 2.53}, {1.44, -0.81, 2.53}, {0.81, -1.44, 2.53}, {0.00, -1.44, 2.53}},
21 {{1.50, 0.00, 2.40}, {1.50, -0.84, 2.40}, {0.84, -1.50, 2.40}, {0.00, -1.50, 2.40}}},
22 {{{0.00, -1.40, 2.40}, {-0.78, -1.40, 2.40}, {-1.40, -0.78, 2.40}, {-1.40, 0.00, 2.40}},
23 {{0.00, -1.34, 2.53}, {-0.75, -1.34, 2.53}, {-1.34, -0.75, 2.53}, {-1.34, 0.00, 2.53}},
24 {{0.00, -1.44, 2.53}, {-0.81, -1.44, 2.53}, {-1.44, -0.81, 2.53}, {-1.44, 0.00, 2.53}},
25 {{0.00, -1.50, 2.40}, {-0.84, -1.50, 2.40}, {-1.50, -0.84, 2.40}, {-1.50, 0.00, 2.40}}},
26 {{{-1.40, 0.00, 2.40}, {-1.40, 0.78, 2.40}, {-0.78, 1.40, 2.40}, {0.00, 1.40, 2.40}},
27 {{-1.34, 0.00, 2.53}, {-1.34, 0.75, 2.53}, {-0.75, 1.34, 2.53}, {0.00, 1.34, 2.53}},
28 {{-1.44, 0.00, 2.53}, {-1.44, 0.81, 2.53}, {-0.81, 1.44, 2.53}, {0.00, 1.44, 2.53}},
29 {{-1.50, 0.00, 2.40}, {-1.50, 0.84, 2.40}, {-0.84, 1.50, 2.40}, {0.00, 1.50, 2.40}}},
30 {{{0.00, 1.40, 2.40}, {0.78, 1.40, 2.40}, {1.40, 0.78, 2.40}, {1.40, 0.00, 2.40}},
31 {{0.00, 1.34, 2.53}, {0.75, 1.34, 2.53}, {1.34, 0.75, 2.53}, {1.34, 0.00, 2.53}},
32 {{0.00, 1.44, 2.53}, {0.81, 1.44, 2.53}, {1.44, 0.81, 2.53}, {1.44, 0.00, 2.53}},
33 {{0.00, 1.50, 2.40}, {0.84, 1.50, 2.40}, {1.50, 0.84, 2.40}, {1.50, 0.00, 2.40}}},
34 {{{1.50, 0.00, 2.40}, {1.50, -0.84, 2.40}, {0.84, -1.50, 2.40}, {0.00, -1.50, 2.40}},
35 {{1.75, 0.00, 1.88}, {1.75, -0.98, 1.88}, {0.98, -1.75, 1.88}, {0.00, -1.75, 1.88}},
36 {{2.00, 0.00, 1.35}, {2.00, -1.12, 1.35}, {1.12, -2.00, 1.35}, {0.00, -2.00, 1.35}},
37 {{2.00, 0.00, 0.90}, {2.00, -1.12, 0.90}, {1.12, -2.00, 0.90}, {0.00, -2.00, 0.90}}},
38 {{{0.00, -1.50, 2.40}, {-0.84, -1.50, 2.40}, {-1.50, -0.84, 2.40}, {-1.50, 0.00, 2.40}},
39 {{0.00, -1.75, 1.88}, {-0.98, -1.75, 1.88}, {-1.75, -0.98, 1.88}, {-1.75, 0.00, 1.88}},
40 {{0.00, -2.00, 1.35}, {-1.12, -2.00, 1.35}, {-2.00, -1.12, 1.35}, {-2.00, 0.00, 1.35}},
41 {{0.00, -2.00, 0.90}, {-1.12, -2.00, 0.90}, {-2.00, -1.12, 0.90}, {-2.00, 0.00, 0.90}}},
42 {{{-1.50, 0.00, 2.40}, {-1.50, 0.84, 2.40}, {-0.84, 1.50, 2.40}, {0.00, 1.50, 2.40}},
43 {{-1.75, 0.00, 1.88}, {-1.75, 0.98, 1.88}, {-0.98, 1.75, 1.88}, {0.00, 1.75, 1.88}},
44 {{-2.00, 0.00, 1.35}, {-2.00, 1.12, 1.35}, {-1.12, 2.00, 1.35}, {0.00, 2.00, 1.35}},
45 {{-2.00, 0.00, 0.90}, {-2.00, 1.12, 0.90}, {-1.12, 2.00, 0.90}, {0.00, 2.00, 0.90}}},
46 {{{0.00, 1.50, 2.40}, {0.84, 1.50, 2.40}, {1.50, 0.84, 2.40}, {1.50, 0.00, 2.40}},
47 {{0.00, 1.75, 1.88}, {0.98, 1.75, 1.88}, {1.75, 0.98, 1.88}, {1.75, 0.00, 1.88}},
48 {{0.00, 2.00, 1.35}, {1.12, 2.00, 1.35}, {2.00, 1.12, 1.35}, {2.00, 0.00, 1.35}},
49 {{0.00, 2.00, 0.90}, {1.12, 2.00, 0.90}, {2.00, 1.12, 0.90}, {2.00, 0.00, 0.90}}},
50 {{{2.00, 0.00, 0.90}, {2.00, -1.12, 0.90}, {1.12, -2.00, 0.90}, {0.00, -2.00, 0.90}},
51 {{2.00, 0.00, 0.45}, {2.00, -1.12, 0.45}, {1.12, -2.00, 0.45}, {0.00, -2.00, 0.45}},
52 {{1.50, 0.00, 0.23}, {1.50, -0.84, 0.23}, {0.84, -1.50, 0.23}, {0.00, -1.50, 0.23}},
53 {{1.50, 0.00, 0.15}, {1.50, -0.84, 0.15}, {0.84, -1.50, 0.15}, {0.00, -1.50, 0.15}}},
54 {{{0.00, -2.00, 0.90}, {-1.12, -2.00, 0.90}, {-2.00, -1.12, 0.90}, {-2.00, 0.00, 0.90}},
55 {{0.00, -2.00, 0.45}, {-1.12, -2.00, 0.45}, {-2.00, -1.12, 0.45}, {-2.00, 0.00, 0.45}},
56 {{0.00, -1.50, 0.23}, {-0.84, -1.50, 0.23}, {-1.50, -0.84, 0.23}, {-1.50, 0.00, 0.23}},
57 {{0.00, -1.50, 0.15}, {-0.84, -1.50, 0.15}, {-1.50, -0.84, 0.15}, {-1.50, 0.00, 0.15}}},
58 {{{-2.00, 0.00, 0.90}, {-2.00, 1.12, 0.90}, {-1.12, 2.00, 0.90}, {0.00, 2.00, 0.90}},
59 {{-2.00, 0.00, 0.45}, {-2.00, 1.12, 0.45}, {-1.12, 2.00, 0.45}, {0.00, 2.00, 0.45}},
60 {{-1.50, 0.00, 0.23}, {-1.50, 0.84, 0.23}, {-0.84, 1.50, 0.23}, {0.00, 1.50, 0.23}},
61 {{-1.50, 0.00, 0.15}, {-1.50, 0.84, 0.15}, {-0.84, 1.50, 0.15}, {0.00, 1.50, 0.15}}},
62 {{{0.00, 2.00, 0.90}, {1.12, 2.00, 0.90}, {2.00, 1.12, 0.90}, {2.00, 0.00, 0.90}},
63 {{0.00, 2.00, 0.45}, {1.12, 2.00, 0.45}, {2.00, 1.12, 0.45}, {2.00, 0.00, 0.45}},
64 {{0.00, 1.50, 0.23}, {0.84, 1.50, 0.23}, {1.50, 0.84, 0.23}, {1.50, 0.00, 0.23}},
65 {{0.00, 1.50, 0.15}, {0.84, 1.50, 0.15}, {1.50, 0.84, 0.15}, {1.50, 0.00, 0.15}}},
66 {{{-1.60, 0.00, 2.03}, {-1.60, -0.30, 2.03}, {-1.50, -0.30, 2.25}, {-1.50, 0.00, 2.25}},
67 {{-2.30, 0.00, 2.03}, {-2.30, -0.30, 2.03}, {-2.50, -0.30, 2.25}, {-2.50, 0.00, 2.25}},
68 {{-2.70, 0.00, 2.03}, {-2.70, -0.30, 2.03}, {-3.00, -0.30, 2.25}, {-3.00, 0.00, 2.25}},
69 {{-2.70, 0.00, 1.80}, {-2.70, -0.30, 1.80}, {-3.00, -0.30, 1.80}, {-3.00, 0.00, 1.80}}},
70 {{{-1.50, 0.00, 2.25}, {-1.50, 0.30, 2.25}, {-1.60, 0.30, 2.03}, {-1.60, 0.00, 2.03}},
71 {{-2.50, 0.00, 2.25}, {-2.50, 0.30, 2.25}, {-2.30, 0.30, 2.03}, {-2.30, 0.00, 2.03}},
72 {{-3.00, 0.00, 2.25}, {-3.00, 0.30, 2.25}, {-2.70, 0.30, 2.03}, {-2.70, 0.00, 2.03}},
73 {{-3.00, 0.00, 1.80}, {-3.00, 0.30, 1.80}, {-2.70, 0.30, 1.80}, {-2.70, 0.00, 1.80}}},
74 {{{-2.70, 0.00, 1.80}, {-2.70, -0.30, 1.80}, {-3.00, -0.30, 1.80}, {-3.00, 0.00, 1.80}},
75 {{-2.70, 0.00, 1.58}, {-2.70, -0.30, 1.58}, {-3.00, -0.30, 1.35}, {-3.00, 0.00, 1.35}},
76 {{-2.50, 0.00, 1.13}, {-2.50, -0.30, 1.13}, {-2.65, -0.30, 0.94}, {-2.65, 0.00, 0.94}},
77 {{-2.00, 0.00, 0.90}, {-2.00, -0.30, 0.90}, {-1.90, -0.30, 0.60}, {-1.90, 0.00, 0.60}}},
78 {{{-3.00, 0.00, 1.80}, {-3.00, 0.30, 1.80}, {-2.70, 0.30, 1.80}, {-2.70, 0.00, 1.80}},
79 {{-3.00, 0.00, 1.35}, {-3.00, 0.30, 1.35}, {-2.70, 0.30, 1.58}, {-2.70, 0.00, 1.58}},
80 {{-2.65, 0.00, 0.94}, {-2.65, 0.30, 0.94}, {-2.50, 0.30, 1.13}, {-2.50, 0.00, 1.13}},
81 {{-1.90, 0.00, 0.60}, {-1.90, 0.30, 0.60}, {-2.00, 0.30, 0.90}, {-2.00, 0.00, 0.90}}},
82 {{{1.70, 0.00, 1.43}, {1.70, -0.66, 1.43}, {1.70, -0.66, 0.60}, {1.70, 0.00, 0.60}},
83 {{2.60, 0.00, 1.43}, {2.60, -0.66, 1.43}, {3.10, -0.66, 0.83}, {3.10, 0.00, 0.83}},
84 {{2.30, 0.00, 2.10}, {2.30, -0.25, 2.10}, {2.40, -0.25, 2.03}, {2.40, 0.00, 2.03}},
85 {{2.70, 0.00, 2.40}, {2.70, -0.25, 2.40}, {3.30, -0.25, 2.40}, {3.30, 0.00, 2.40}}},
86 {{{1.70, 0.00, 0.60}, {1.70, 0.66, 0.60}, {1.70, 0.66, 1.43}, {1.70, 0.00, 1.43}},
87 {{3.10, 0.00, 0.83}, {3.10, 0.66, 0.83}, {2.60, 0.66, 1.43}, {2.60, 0.00, 1.43}},
88 {{2.40, 0.00, 2.03}, {2.40, 0.25, 2.03}, {2.30, 0.25, 2.10}, {2.30, 0.00, 2.10}},
89 {{3.30, 0.00, 2.40}, {3.30, 0.25, 2.40}, {2.70, 0.25, 2.40}, {2.70, 0.00, 2.40}}},
90 {{{2.70, 0.00, 2.40}, {2.70, -0.25, 2.40}, {3.30, -0.25, 2.40}, {3.30, 0.00, 2.40}},
91 {{2.80, 0.00, 2.48}, {2.80, -0.25, 2.48}, {3.53, -0.25, 2.49}, {3.53, 0.00, 2.49}},
92 {{2.90, 0.00, 2.48}, {2.90, -0.15, 2.48}, {3.45, -0.15, 2.51}, {3.45, 0.00, 2.51}},
93 {{2.80, 0.00, 2.40}, {2.80, -0.15, 2.40}, {3.20, -0.15, 2.40}, {3.20, 0.00, 2.40}}},
94 {{{3.30, 0.00, 2.40}, {3.30, 0.25, 2.40}, {2.70, 0.25, 2.40}, {2.70, 0.00, 2.40}},
95 {{3.53, 0.00, 2.49}, {3.53, 0.25, 2.49}, {2.80, 0.25, 2.48}, {2.80, 0.00, 2.48}},
96 {{3.45, 0.00, 2.51}, {3.45, 0.15, 2.51}, {2.90, 0.15, 2.48}, {2.90, 0.00, 2.48}},
97 {{3.20, 0.00, 2.40}, {3.20, 0.15, 2.40}, {2.80, 0.15, 2.40}, {2.80, 0.00, 2.40}}},
98 {{{0.00, 0.00, 3.15}, {0.00, 0.00, 3.15}, {0.00, 0.00, 3.15}, {0.00, 0.00, 3.15}},
99 {{0.80, 0.00, 3.15}, {0.80, -0.45, 3.15}, {0.45, -0.80, 3.15}, {0.00, -0.80, 3.15}},
100 {{0.00, 0.00, 2.85}, {0.00, 0.00, 2.85}, {0.00, 0.00, 2.85}, {0.00, 0.00, 2.85}},
101 {{0.20, 0.00, 2.70}, {0.20, -0.11, 2.70}, {0.11, -0.20, 2.70}, {0.00, -0.20, 2.70}}},
102 {{{0.00, 0.00, 3.15}, {0.00, 0.00, 3.15}, {0.00, 0.00, 3.15}, {0.00, 0.00, 3.15}},
103 {{0.00, -0.80, 3.15}, {-0.45, -0.80, 3.15}, {-0.80, -0.45, 3.15}, {-0.80, 0.00, 3.15}},
104 {{0.00, 0.00, 2.85}, {0.00, 0.00, 2.85}, {0.00, 0.00, 2.85}, {0.00, 0.00, 2.85}},
105 {{0.00, -0.20, 2.70}, {-0.11, -0.20, 2.70}, {-0.20, -0.11, 2.70}, {-0.20, 0.00, 2.70}}},
106 {{{0.00, 0.00, 3.15}, {0.00, 0.00, 3.15}, {0.00, 0.00, 3.15}, {0.00, 0.00, 3.15}},
107 {{-0.80, 0.00, 3.15}, {-0.80, 0.45, 3.15}, {-0.45, 0.80, 3.15}, {0.00, 0.80, 3.15}},
108 {{0.00, 0.00, 2.85}, {0.00, 0.00, 2.85}, {0.00, 0.00, 2.85}, {0.00, 0.00, 2.85}},
109 {{-0.20, 0.00, 2.70}, {-0.20, 0.11, 2.70}, {-0.11, 0.20, 2.70}, {0.00, 0.20, 2.70}}},
110 {{{0.00, 0.00, 3.15}, {0.00, 0.00, 3.15}, {0.00, 0.00, 3.15}, {0.00, 0.00, 3.15}},
111 {{0.00, 0.80, 3.15}, {0.45, 0.80, 3.15}, {0.80, 0.45, 3.15}, {0.80, 0.00, 3.15}},
112 {{0.00, 0.00, 2.85}, {0.00, 0.00, 2.85}, {0.00, 0.00, 2.85}, {0.00, 0.00, 2.85}},
113 {{0.00, 0.20, 2.70}, {0.11, 0.20, 2.70}, {0.20, 0.11, 2.70}, {0.20, 0.00, 2.70}}},
114 {{{0.20, 0.00, 2.70}, {0.20, -0.11, 2.70}, {0.11, -0.20, 2.70}, {0.00, -0.20, 2.70}},
115 {{0.40, 0.00, 2.55}, {0.40, -0.22, 2.55}, {0.22, -0.40, 2.55}, {0.00, -0.40, 2.55}},
116 {{1.30, 0.00, 2.55}, {1.30, -0.73, 2.55}, {0.73, -1.30, 2.55}, {0.00, -1.30, 2.55}},
117 {{1.30, 0.00, 2.40}, {1.30, -0.73, 2.40}, {0.73, -1.30, 2.40}, {0.00, -1.30, 2.40}}},
118 {{{0.00, -0.20, 2.70}, {-0.11, -0.20, 2.70}, {-0.20, -0.11, 2.70}, {-0.20, 0.00, 2.70}},
119 {{0.00, -0.40, 2.55}, {-0.22, -0.40, 2.55}, {-0.40, -0.22, 2.55}, {-0.40, 0.00, 2.55}},
120 {{0.00, -1.30, 2.55}, {-0.73, -1.30, 2.55}, {-1.30, -0.73, 2.55}, {-1.30, 0.00, 2.55}},
121 {{0.00, -1.30, 2.40}, {-0.73, -1.30, 2.40}, {-1.30, -0.73, 2.40}, {-1.30, 0.00, 2.40}}},
122 {{{-0.20, 0.00, 2.70}, {-0.20, 0.11, 2.70}, {-0.11, 0.20, 2.70}, {0.00, 0.20, 2.70}},
123 {{-0.40, 0.00, 2.55}, {-0.40, 0.22, 2.55}, {-0.22, 0.40, 2.55}, {0.00, 0.40, 2.55}},
124 {{-1.30, 0.00, 2.55}, {-1.30, 0.73, 2.55}, {-0.73, 1.30, 2.55}, {0.00, 1.30, 2.55}},
125 {{-1.30, 0.00, 2.40}, {-1.30, 0.73, 2.40}, {-0.73, 1.30, 2.40}, {0.00, 1.30, 2.40}}},
126 {{{0.00, 0.20, 2.70}, {0.11, 0.20, 2.70}, {0.20, 0.11, 2.70}, {0.20, 0.00, 2.70}},
127 {{0.00, 0.40, 2.55}, {0.22, 0.40, 2.55}, {0.40, 0.22, 2.55}, {0.40, 0.00, 2.55}},
128 {{0.00, 1.30, 2.55}, {0.73, 1.30, 2.55}, {1.30, 0.73, 2.55}, {1.30, 0.00, 2.55}},
129 {{0.00, 1.30, 2.40}, {0.73, 1.30, 2.40}, {1.30, 0.73, 2.40}, {1.30, 0.00, 2.40}}},
130 {{{0.00, 0.00, 0.00}, {0.00, 0.00, 0.00}, {0.00, 0.00, 0.00}, {0.00, 0.00, 0.00}},
131 {{1.43, 0.00, 0.00}, {1.43, 0.80, 0.00}, {0.80, 1.43, 0.00}, {0.00, 1.43, 0.00}},
132 {{1.50, 0.00, 0.08}, {1.50, 0.84, 0.08}, {0.84, 1.50, 0.08}, {0.00, 1.50, 0.08}},
133 {{1.50, 0.00, 0.15}, {1.50, 0.84, 0.15}, {0.84, 1.50, 0.15}, {0.00, 1.50, 0.15}}},
134 {{{0.00, 0.00, 0.00}, {0.00, 0.00, 0.00}, {0.00, 0.00, 0.00}, {0.00, 0.00, 0.00}},
135 {{0.00, 1.43, 0.00}, {-0.80, 1.43, 0.00}, {-1.43, 0.80, 0.00}, {-1.43, 0.00, 0.00}},
136 {{0.00, 1.50, 0.08}, {-0.84, 1.50, 0.08}, {-1.50, 0.84, 0.08}, {-1.50, 0.00, 0.08}},
137 {{0.00, 1.50, 0.15}, {-0.84, 1.50, 0.15}, {-1.50, 0.84, 0.15}, {-1.50, 0.00, 0.15}}},
138 {{{0.00, 0.00, 0.00}, {0.00, 0.00, 0.00}, {0.00, 0.00, 0.00}, {0.00, 0.00, 0.00}},
139 {{-1.43, 0.00, 0.00}, {-1.43, -0.80, 0.00}, {-0.80, -1.43, 0.00}, {0.00, -1.43, 0.00}},
140 {{-1.50, 0.00, 0.08}, {-1.50, -0.84, 0.08}, {-0.84, -1.50, 0.08}, {0.00, -1.50, 0.08}},
141 {{-1.50, 0.00, 0.15}, {-1.50, -0.84, 0.15}, {-0.84, -1.50, 0.15}, {0.00, -1.50, 0.15}}},
142 {{{0.00, 0.00, 0.00}, {0.00, 0.00, 0.00}, {0.00, 0.00, 0.00}, {0.00, 0.00, 0.00}},
143 {{0.00, -1.43, 0.00}, {0.80, -1.43, 0.00}, {1.43, -0.80, 0.00}, {1.43, 0.00, 0.00}},
144 {{0.00, -1.50, 0.08}, {0.84, -1.50, 0.08}, {1.50, -0.84, 0.08}, {1.50, 0.00, 0.08}},
145 {{0.00, -1.50, 0.15}, {0.84, -1.50, 0.15}, {1.50, -0.84, 0.15}, {1.50, 0.00, 0.15}}}};
150teapot_mesh_t::triangles_t::triangles_t(
const teapot_mesh_t& mesh) noexcept
153 , patch_mesh_{std::make_shared<bezier_mesh_t<4, 4>>(ANONYMOUS::teapotData[0],
154 gml::ivec2{mesh.segments_, mesh.segments_})}
155 , triangles_{patch_mesh_->triangles()}
167 throw std::out_of_range(
"Done!");
171 const int base = index_ * mesh_t->patch_vertex_count_;
183 throw std::out_of_range(
"Done!");
187 if(triangles_.done())
193 patch_mesh_ = std::make_shared<bezier_mesh_t<4, 4>>(ANONYMOUS::teapotData[index_],
194 gml::ivec2{mesh_t->segments_, mesh_t->segments_});
196 triangles_ = patch_mesh_->triangles();
201teapot_mesh_t::vertices_t::vertices_t(
const teapot_mesh_t& mesh) noexcept
204 , patch_mesh_{std::make_shared<bezier_mesh_t<4, 4>>(ANONYMOUS::teapotData[0],
205 gml::ivec2{mesh.segments_, mesh.segments_})}
206 , vertices_{patch_mesh_->vertices()}
217 return vertices_.generate();
230 patch_mesh_ = std::make_shared<bezier_mesh_t<4, 4>>(ANONYMOUS::teapotData[index_],
231 gml::ivec2{mesh_->segments_, mesh_->segments_});
233 vertices_ = patch_mesh_->vertices();
vertices_t vertices() const noexcept
bool done() const noexcept
triangle_t generate() const
mesh_vertex_t generate() const
bool done() const noexcept
vertices_t vertices() const noexcept
triangles_t triangles() const noexcept
teapot_mesh_t(int segments=8) noexcept
gml::ivec3 vertices
Zero based indices of the triangle vertices in counterclockwise order.
int count(const generator_t &generator) noexcept
Counts the number of steps left in the generator.
const segment_list * segments