├── .gitignore ├── Cargo.toml ├── LICENSE ├── Makefile ├── README.md ├── assets ├── img.png ├── img2.png ├── monkey0.obj ├── monkey1.obj ├── monkey2.obj └── sphere.obj ├── manifest └── src ├── interpolate.rs ├── main.rs ├── model ├── indexed.rs ├── mesh.rs ├── mod.rs └── obj.rs ├── primitive ├── edge.rs ├── matrix.rs ├── mod.rs ├── vector.rs └── vertex.rs ├── render.rs └── texture ├── bitmap.rs └── mod.rs /.gitignore: -------------------------------------------------------------------------------- 1 | Cargo.lock 2 | target 3 | .idea/* 4 | .vscode/* 5 | renderer.iml 6 | out/* 7 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "pixelcannon" 3 | version = "0.1.0" 4 | authors = ["Dustin Bensing "] 5 | 6 | [dependencies] 7 | orbclient = "*" 8 | orbimage = { git = "https://github.com/redox-os/orbimage.git" } 9 | 10 | #[profile.release] 11 | #debug = true 12 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2016 Dustin Bensing 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | default: 2 | cargo build 3 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # pixelcannon 2 | running on redox 3 | 4 | ![pixelcannon](http://i.imgur.com/sMwkomc.gif) 5 | -------------------------------------------------------------------------------- /assets/img.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pythoneer/pixelcannon/7dc2e5195bc758b7fcb78b03f4e1ee7f70dd0ce6/assets/img.png -------------------------------------------------------------------------------- /assets/img2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pythoneer/pixelcannon/7dc2e5195bc758b7fcb78b03f4e1ee7f70dd0ce6/assets/img2.png -------------------------------------------------------------------------------- /assets/monkey0.obj: -------------------------------------------------------------------------------- 1 | # Blender v2.70 (sub 2) OBJ File: '' 2 | # www.blender.org 3 | mtllib monkey0.mtl 4 | o Suzanne 5 | v 0.437500 0.164062 0.765625 6 | v -0.437500 0.164062 0.765625 7 | v 0.500000 0.093750 0.687500 8 | v -0.500000 0.093750 0.687500 9 | v 0.546875 0.054688 0.578125 10 | v -0.546875 0.054688 0.578125 11 | v 0.351562 -0.023438 0.617188 12 | v -0.351562 -0.023438 0.617188 13 | v 0.351562 0.031250 0.718750 14 | v -0.351562 0.031250 0.718750 15 | v 0.351562 0.132812 0.781250 16 | v -0.351562 0.132812 0.781250 17 | v 0.273438 0.164062 0.796875 18 | v -0.273438 0.164062 0.796875 19 | v 0.203125 0.093750 0.742188 20 | v -0.203125 0.093750 0.742188 21 | v 0.156250 0.054688 0.648438 22 | v -0.156250 0.054688 0.648438 23 | v 0.078125 0.242188 0.656250 24 | v -0.078125 0.242188 0.656250 25 | v 0.140625 0.242188 0.742188 26 | v -0.140625 0.242188 0.742188 27 | v 0.242188 0.242188 0.796875 28 | v -0.242188 0.242188 0.796875 29 | v 0.273438 0.328125 0.796875 30 | v -0.273438 0.328125 0.796875 31 | v 0.203125 0.390625 0.742188 32 | v -0.203125 0.390625 0.742188 33 | v 0.156250 0.437500 0.648438 34 | v -0.156250 0.437500 0.648438 35 | v 0.351562 0.515625 0.617188 36 | v -0.351562 0.515625 0.617188 37 | v 0.351562 0.453125 0.718750 38 | v -0.351562 0.453125 0.718750 39 | v 0.351562 0.359375 0.781250 40 | v -0.351562 0.359375 0.781250 41 | v 0.437500 0.328125 0.765625 42 | v -0.437500 0.328125 0.765625 43 | v 0.500000 0.390625 0.687500 44 | v -0.500000 0.390625 0.687500 45 | v 0.546875 0.437500 0.578125 46 | v -0.546875 0.437500 0.578125 47 | v 0.625000 0.242188 0.562500 48 | v -0.625000 0.242188 0.562500 49 | v 0.562500 0.242188 0.671875 50 | v -0.562500 0.242188 0.671875 51 | v 0.468750 0.242188 0.757812 52 | v -0.468750 0.242188 0.757812 53 | v 0.476562 0.242188 0.773438 54 | v -0.476562 0.242188 0.773438 55 | v 0.445312 0.335938 0.781250 56 | v -0.445312 0.335938 0.781250 57 | v 0.351562 0.375000 0.804688 58 | v -0.351562 0.375000 0.804688 59 | v 0.265625 0.335938 0.820312 60 | v -0.265625 0.335938 0.820312 61 | v 0.226562 0.242188 0.820312 62 | v -0.226562 0.242188 0.820312 63 | v 0.265625 0.156250 0.820312 64 | v -0.265625 0.156250 0.820312 65 | v 0.351562 0.242188 0.828125 66 | v -0.351562 0.242188 0.828125 67 | v 0.351562 0.117188 0.804688 68 | v -0.351562 0.117188 0.804688 69 | v 0.445312 0.156250 0.781250 70 | v -0.445312 0.156250 0.781250 71 | v 0.000000 0.429688 0.742188 72 | v 0.000000 0.351562 0.820312 73 | v 0.000000 -0.679688 0.734375 74 | v 0.000000 -0.320312 0.781250 75 | v 0.000000 -0.187500 0.796875 76 | v 0.000000 -0.773438 0.718750 77 | v 0.000000 0.406250 0.601562 78 | v 0.000000 0.570312 0.570312 79 | v 0.000000 0.898438 -0.546875 80 | v 0.000000 0.562500 -0.851562 81 | v 0.000000 0.070312 -0.828125 82 | v 0.000000 -0.382812 -0.351562 83 | v 0.203125 -0.187500 0.562500 84 | v -0.203125 -0.187500 0.562500 85 | v 0.312500 -0.437500 0.570312 86 | v -0.312500 -0.437500 0.570312 87 | v 0.351562 -0.695312 0.570312 88 | v -0.351562 -0.695312 0.570312 89 | v 0.367188 -0.890625 0.531250 90 | v -0.367188 -0.890625 0.531250 91 | v 0.328125 -0.945312 0.523438 92 | v -0.328125 -0.945312 0.523438 93 | v 0.179688 -0.968750 0.554688 94 | v -0.179688 -0.968750 0.554688 95 | v 0.000000 -0.984375 0.578125 96 | v 0.437500 -0.140625 0.531250 97 | v -0.437500 -0.140625 0.531250 98 | v 0.632812 -0.039062 0.539062 99 | v -0.632812 -0.039062 0.539062 100 | v 0.828125 0.148438 0.445312 101 | v -0.828125 0.148438 0.445312 102 | v 0.859375 0.429688 0.593750 103 | v -0.859375 0.429688 0.593750 104 | v 0.710938 0.484375 0.625000 105 | v -0.710938 0.484375 0.625000 106 | v 0.492188 0.601562 0.687500 107 | v -0.492188 0.601562 0.687500 108 | v 0.320312 0.757812 0.734375 109 | v -0.320312 0.757812 0.734375 110 | v 0.156250 0.718750 0.757812 111 | v -0.156250 0.718750 0.757812 112 | v 0.062500 0.492188 0.750000 113 | v -0.062500 0.492188 0.750000 114 | v 0.164062 0.414062 0.773438 115 | v -0.164062 0.414062 0.773438 116 | v 0.125000 0.304688 0.765625 117 | v -0.125000 0.304688 0.765625 118 | v 0.203125 0.093750 0.742188 119 | v -0.203125 0.093750 0.742188 120 | v 0.375000 0.015625 0.703125 121 | v -0.375000 0.015625 0.703125 122 | v 0.492188 0.062500 0.671875 123 | v -0.492188 0.062500 0.671875 124 | v 0.625000 0.187500 0.648438 125 | v -0.625000 0.187500 0.648438 126 | v 0.640625 0.296875 0.648438 127 | v -0.640625 0.296875 0.648438 128 | v 0.601562 0.375000 0.664062 129 | v -0.601562 0.375000 0.664062 130 | v 0.429688 0.437500 0.718750 131 | v -0.429688 0.437500 0.718750 132 | v 0.250000 0.468750 0.757812 133 | v -0.250000 0.468750 0.757812 134 | v 0.000000 -0.765625 0.734375 135 | v 0.109375 -0.718750 0.734375 136 | v -0.109375 -0.718750 0.734375 137 | v 0.117188 -0.835938 0.710938 138 | v -0.117188 -0.835938 0.710938 139 | v 0.062500 -0.882812 0.695312 140 | v -0.062500 -0.882812 0.695312 141 | v 0.000000 -0.890625 0.687500 142 | v 0.000000 -0.195312 0.750000 143 | v 0.000000 -0.140625 0.742188 144 | v 0.101562 -0.148438 0.742188 145 | v -0.101562 -0.148438 0.742188 146 | v 0.125000 -0.226562 0.750000 147 | v -0.125000 -0.226562 0.750000 148 | v 0.085938 -0.289062 0.742188 149 | v -0.085938 -0.289062 0.742188 150 | v 0.398438 -0.046875 0.671875 151 | v -0.398438 -0.046875 0.671875 152 | v 0.617188 0.054688 0.625000 153 | v -0.617188 0.054688 0.625000 154 | v 0.726562 0.203125 0.601562 155 | v -0.726562 0.203125 0.601562 156 | v 0.742188 0.375000 0.656250 157 | v -0.742188 0.375000 0.656250 158 | v 0.687500 0.414062 0.726562 159 | v -0.687500 0.414062 0.726562 160 | v 0.437500 0.546875 0.796875 161 | v -0.437500 0.546875 0.796875 162 | v 0.312500 0.640625 0.835938 163 | v -0.312500 0.640625 0.835938 164 | v 0.203125 0.617188 0.851562 165 | v -0.203125 0.617188 0.851562 166 | v 0.101562 0.429688 0.843750 167 | v -0.101562 0.429688 0.843750 168 | v 0.125000 -0.101562 0.812500 169 | v -0.125000 -0.101562 0.812500 170 | v 0.210938 -0.445312 0.710938 171 | v -0.210938 -0.445312 0.710938 172 | v 0.250000 -0.703125 0.687500 173 | v -0.250000 -0.703125 0.687500 174 | v 0.265625 -0.820312 0.664062 175 | v -0.265625 -0.820312 0.664062 176 | v 0.234375 -0.914062 0.632812 177 | v -0.234375 -0.914062 0.632812 178 | v 0.164062 -0.929688 0.632812 179 | v -0.164062 -0.929688 0.632812 180 | v 0.000000 -0.945312 0.640625 181 | v 0.000000 0.046875 0.726562 182 | v 0.000000 0.210938 0.765625 183 | v 0.328125 0.476562 0.742188 184 | v -0.328125 0.476562 0.742188 185 | v 0.164062 0.140625 0.750000 186 | v -0.164062 0.140625 0.750000 187 | v 0.132812 0.210938 0.757812 188 | v -0.132812 0.210938 0.757812 189 | v 0.117188 -0.687500 0.734375 190 | v -0.117188 -0.687500 0.734375 191 | v 0.078125 -0.445312 0.750000 192 | v -0.078125 -0.445312 0.750000 193 | v 0.000000 -0.445312 0.750000 194 | v 0.000000 -0.328125 0.742188 195 | v 0.093750 -0.273438 0.781250 196 | v -0.093750 -0.273438 0.781250 197 | v 0.132812 -0.226562 0.796875 198 | v -0.132812 -0.226562 0.796875 199 | v 0.109375 -0.132812 0.781250 200 | v -0.109375 -0.132812 0.781250 201 | v 0.039062 -0.125000 0.781250 202 | v -0.039062 -0.125000 0.781250 203 | v 0.000000 -0.203125 0.828125 204 | v 0.046875 -0.148438 0.812500 205 | v -0.046875 -0.148438 0.812500 206 | v 0.093750 -0.156250 0.812500 207 | v -0.093750 -0.156250 0.812500 208 | v 0.109375 -0.226562 0.828125 209 | v -0.109375 -0.226562 0.828125 210 | v 0.078125 -0.250000 0.804688 211 | v -0.078125 -0.250000 0.804688 212 | v 0.000000 -0.289062 0.804688 213 | v 0.257812 -0.312500 0.554688 214 | v -0.257812 -0.312500 0.554688 215 | v 0.164062 -0.242188 0.710938 216 | v -0.164062 -0.242188 0.710938 217 | v 0.179688 -0.312500 0.710938 218 | v -0.179688 -0.312500 0.710938 219 | v 0.234375 -0.250000 0.554688 220 | v -0.234375 -0.250000 0.554688 221 | v 0.000000 -0.875000 0.687500 222 | v 0.046875 -0.867188 0.687500 223 | v -0.046875 -0.867188 0.687500 224 | v 0.093750 -0.820312 0.710938 225 | v -0.093750 -0.820312 0.710938 226 | v 0.093750 -0.742188 0.726562 227 | v -0.093750 -0.742188 0.726562 228 | v 0.000000 -0.781250 0.656250 229 | v 0.093750 -0.750000 0.664062 230 | v -0.093750 -0.750000 0.664062 231 | v 0.093750 -0.812500 0.640625 232 | v -0.093750 -0.812500 0.640625 233 | v 0.046875 -0.851562 0.632812 234 | v -0.046875 -0.851562 0.632812 235 | v 0.000000 -0.859375 0.632812 236 | v 0.171875 0.218750 0.781250 237 | v -0.171875 0.218750 0.781250 238 | v 0.187500 0.156250 0.773438 239 | v -0.187500 0.156250 0.773438 240 | v 0.335938 0.429688 0.757812 241 | v -0.335938 0.429688 0.757812 242 | v 0.273438 0.421875 0.773438 243 | v -0.273438 0.421875 0.773438 244 | v 0.421875 0.398438 0.773438 245 | v -0.421875 0.398438 0.773438 246 | v 0.562500 0.351562 0.695312 247 | v -0.562500 0.351562 0.695312 248 | v 0.585938 0.289062 0.687500 249 | v -0.585938 0.289062 0.687500 250 | v 0.578125 0.195312 0.679688 251 | v -0.578125 0.195312 0.679688 252 | v 0.476562 0.101562 0.718750 253 | v -0.476562 0.101562 0.718750 254 | v 0.375000 0.062500 0.742188 255 | v -0.375000 0.062500 0.742188 256 | v 0.226562 0.109375 0.781250 257 | v -0.226562 0.109375 0.781250 258 | v 0.179688 0.296875 0.781250 259 | v -0.179688 0.296875 0.781250 260 | v 0.210938 0.375000 0.781250 261 | v -0.210938 0.375000 0.781250 262 | v 0.234375 0.359375 0.757812 263 | v -0.234375 0.359375 0.757812 264 | v 0.195312 0.296875 0.757812 265 | v -0.195312 0.296875 0.757812 266 | v 0.242188 0.125000 0.757812 267 | v -0.242188 0.125000 0.757812 268 | v 0.375000 0.085938 0.726562 269 | v -0.375000 0.085938 0.726562 270 | v 0.460938 0.117188 0.703125 271 | v -0.460938 0.117188 0.703125 272 | v 0.546875 0.210938 0.671875 273 | v -0.546875 0.210938 0.671875 274 | v 0.554688 0.281250 0.671875 275 | v -0.554688 0.281250 0.671875 276 | v 0.531250 0.335938 0.679688 277 | v -0.531250 0.335938 0.679688 278 | v 0.414062 0.390625 0.750000 279 | v -0.414062 0.390625 0.750000 280 | v 0.281250 0.398438 0.765625 281 | v -0.281250 0.398438 0.765625 282 | v 0.335938 0.406250 0.750000 283 | v -0.335938 0.406250 0.750000 284 | v 0.203125 0.171875 0.750000 285 | v -0.203125 0.171875 0.750000 286 | v 0.195312 0.226562 0.750000 287 | v -0.195312 0.226562 0.750000 288 | v 0.109375 0.460938 0.609375 289 | v -0.109375 0.460938 0.609375 290 | v 0.195312 0.664062 0.617188 291 | v -0.195312 0.664062 0.617188 292 | v 0.335938 0.687500 0.593750 293 | v -0.335938 0.687500 0.593750 294 | v 0.484375 0.554688 0.554688 295 | v -0.484375 0.554688 0.554688 296 | v 0.679688 0.453125 0.492188 297 | v -0.679688 0.453125 0.492188 298 | v 0.796875 0.406250 0.460938 299 | v -0.796875 0.406250 0.460938 300 | v 0.773438 0.164062 0.375000 301 | v -0.773438 0.164062 0.375000 302 | v 0.601562 0.000000 0.414062 303 | v -0.601562 0.000000 0.414062 304 | v 0.437500 -0.093750 0.468750 305 | v -0.437500 -0.093750 0.468750 306 | v 0.000000 0.898438 0.289062 307 | v 0.000000 0.984375 -0.078125 308 | v 0.000000 -0.195312 -0.671875 309 | v 0.000000 -0.460938 0.187500 310 | v 0.000000 -0.976562 0.460938 311 | v 0.000000 -0.804688 0.343750 312 | v 0.000000 -0.570312 0.320312 313 | v 0.000000 -0.484375 0.281250 314 | v 0.851562 0.234375 0.054688 315 | v -0.851562 0.234375 0.054688 316 | v 0.859375 0.320312 -0.046875 317 | v -0.859375 0.320312 -0.046875 318 | v 0.773438 0.265625 -0.437500 319 | v -0.773438 0.265625 -0.437500 320 | v 0.460938 0.437500 -0.703125 321 | v -0.460938 0.437500 -0.703125 322 | v 0.734375 -0.046875 0.070312 323 | v -0.734375 -0.046875 0.070312 324 | v 0.593750 -0.125000 -0.164062 325 | v -0.593750 -0.125000 -0.164062 326 | v 0.640625 -0.007812 -0.429688 327 | v -0.640625 -0.007812 -0.429688 328 | v 0.335938 0.054688 -0.664062 329 | v -0.335938 0.054688 -0.664062 330 | v 0.234375 -0.351562 0.406250 331 | v -0.234375 -0.351562 0.406250 332 | v 0.179688 -0.414062 0.257812 333 | v -0.179688 -0.414062 0.257812 334 | v 0.289062 -0.710938 0.382812 335 | v -0.289062 -0.710938 0.382812 336 | v 0.250000 -0.500000 0.390625 337 | v -0.250000 -0.500000 0.390625 338 | v 0.328125 -0.914062 0.398438 339 | v -0.328125 -0.914062 0.398438 340 | v 0.140625 -0.757812 0.367188 341 | v -0.140625 -0.757812 0.367188 342 | v 0.125000 -0.539062 0.359375 343 | v -0.125000 -0.539062 0.359375 344 | v 0.164062 -0.945312 0.437500 345 | v -0.164062 -0.945312 0.437500 346 | v 0.218750 -0.281250 0.429688 347 | v -0.218750 -0.281250 0.429688 348 | v 0.210938 -0.226562 0.468750 349 | v -0.210938 -0.226562 0.468750 350 | v 0.203125 -0.171875 0.500000 351 | v -0.203125 -0.171875 0.500000 352 | v 0.210938 -0.390625 0.164062 353 | v -0.210938 -0.390625 0.164062 354 | v 0.296875 -0.312500 -0.265625 355 | v -0.296875 -0.312500 -0.265625 356 | v 0.343750 -0.148438 -0.539062 357 | v -0.343750 -0.148438 -0.539062 358 | v 0.453125 0.867188 -0.382812 359 | v -0.453125 0.867188 -0.382812 360 | v 0.453125 0.929688 -0.070312 361 | v -0.453125 0.929688 -0.070312 362 | v 0.453125 0.851562 0.234375 363 | v -0.453125 0.851562 0.234375 364 | v 0.460938 0.523438 0.429688 365 | v -0.460938 0.523438 0.429688 366 | v 0.726562 0.406250 0.335938 367 | v -0.726562 0.406250 0.335938 368 | v 0.632812 0.453125 0.281250 369 | v -0.632812 0.453125 0.281250 370 | v 0.640625 0.703125 0.054688 371 | v -0.640625 0.703125 0.054688 372 | v 0.796875 0.562500 0.125000 373 | v -0.796875 0.562500 0.125000 374 | v 0.796875 0.617188 -0.117188 375 | v -0.796875 0.617188 -0.117188 376 | v 0.640625 0.750000 -0.195312 377 | v -0.640625 0.750000 -0.195312 378 | v 0.640625 0.679688 -0.445312 379 | v -0.640625 0.679688 -0.445312 380 | v 0.796875 0.539062 -0.359375 381 | v -0.796875 0.539062 -0.359375 382 | v 0.617188 0.328125 -0.585938 383 | v -0.617188 0.328125 -0.585938 384 | v 0.484375 0.023438 -0.546875 385 | v -0.484375 0.023438 -0.546875 386 | v 0.820312 0.328125 -0.203125 387 | v -0.820312 0.328125 -0.203125 388 | v 0.406250 -0.171875 0.148438 389 | v -0.406250 -0.171875 0.148438 390 | v 0.429688 -0.195312 -0.210938 391 | v -0.429688 -0.195312 -0.210938 392 | v 0.890625 0.406250 -0.234375 393 | v -0.890625 0.406250 -0.234375 394 | v 0.773438 -0.140625 -0.125000 395 | v -0.773438 -0.140625 -0.125000 396 | v 1.039062 -0.101562 -0.328125 397 | v -1.039062 -0.101562 -0.328125 398 | v 1.281250 0.054688 -0.429688 399 | v -1.281250 0.054688 -0.429688 400 | v 1.351562 0.320312 -0.421875 401 | v -1.351562 0.320312 -0.421875 402 | v 1.234375 0.507812 -0.421875 403 | v -1.234375 0.507812 -0.421875 404 | v 1.023438 0.476562 -0.312500 405 | v -1.023438 0.476562 -0.312500 406 | v 1.015625 0.414062 -0.289062 407 | v -1.015625 0.414062 -0.289062 408 | v 1.187500 0.437500 -0.390625 409 | v -1.187500 0.437500 -0.390625 410 | v 1.265625 0.289062 -0.406250 411 | v -1.265625 0.289062 -0.406250 412 | v 1.210938 0.078125 -0.406250 413 | v -1.210938 0.078125 -0.406250 414 | v 1.031250 -0.039062 -0.304688 415 | v -1.031250 -0.039062 -0.304688 416 | v 0.828125 -0.070312 -0.132812 417 | v -0.828125 -0.070312 -0.132812 418 | v 0.921875 0.359375 -0.218750 419 | v -0.921875 0.359375 -0.218750 420 | v 0.945312 0.304688 -0.289062 421 | v -0.945312 0.304688 -0.289062 422 | v 0.882812 -0.023438 -0.210938 423 | v -0.882812 -0.023438 -0.210938 424 | v 1.039062 0.000000 -0.367188 425 | v -1.039062 0.000000 -0.367188 426 | v 1.187500 0.093750 -0.445312 427 | v -1.187500 0.093750 -0.445312 428 | v 1.234375 0.250000 -0.445312 429 | v -1.234375 0.250000 -0.445312 430 | v 1.171875 0.359375 -0.437500 431 | v -1.171875 0.359375 -0.437500 432 | v 1.023438 0.343750 -0.359375 433 | v -1.023438 0.343750 -0.359375 434 | v 0.843750 0.289062 -0.210938 435 | v -0.843750 0.289062 -0.210938 436 | v 0.835938 0.171875 -0.273438 437 | v -0.835938 0.171875 -0.273438 438 | v 0.757812 0.093750 -0.273438 439 | v -0.757812 0.093750 -0.273438 440 | v 0.820312 0.085938 -0.273438 441 | v -0.820312 0.085938 -0.273438 442 | v 0.843750 0.015625 -0.273438 443 | v -0.843750 0.015625 -0.273438 444 | v 0.812500 -0.015625 -0.273438 445 | v -0.812500 -0.015625 -0.273438 446 | v 0.726562 0.000000 -0.070312 447 | v -0.726562 0.000000 -0.070312 448 | v 0.718750 -0.023438 -0.171875 449 | v -0.718750 -0.023438 -0.171875 450 | v 0.718750 0.039062 -0.187500 451 | v -0.718750 0.039062 -0.187500 452 | v 0.796875 0.203125 -0.210938 453 | v -0.796875 0.203125 -0.210938 454 | v 0.890625 0.242188 -0.265625 455 | v -0.890625 0.242188 -0.265625 456 | v 0.890625 0.234375 -0.320312 457 | v -0.890625 0.234375 -0.320312 458 | v 0.812500 -0.015625 -0.320312 459 | v -0.812500 -0.015625 -0.320312 460 | v 0.851562 0.015625 -0.320312 461 | v -0.851562 0.015625 -0.320312 462 | v 0.828125 0.078125 -0.320312 463 | v -0.828125 0.078125 -0.320312 464 | v 0.765625 0.093750 -0.320312 465 | v -0.765625 0.093750 -0.320312 466 | v 0.843750 0.171875 -0.320312 467 | v -0.843750 0.171875 -0.320312 468 | v 1.039062 0.328125 -0.414062 469 | v -1.039062 0.328125 -0.414062 470 | v 1.187500 0.343750 -0.484375 471 | v -1.187500 0.343750 -0.484375 472 | v 1.257812 0.242188 -0.492188 473 | v -1.257812 0.242188 -0.492188 474 | v 1.210938 0.085938 -0.484375 475 | v -1.210938 0.085938 -0.484375 476 | v 1.046875 0.000000 -0.421875 477 | v -1.046875 0.000000 -0.421875 478 | v 0.882812 -0.015625 -0.265625 479 | v -0.882812 -0.015625 -0.265625 480 | v 0.953125 0.289062 -0.343750 481 | v -0.953125 0.289062 -0.343750 482 | v 0.890625 0.109375 -0.328125 483 | v -0.890625 0.109375 -0.328125 484 | v 0.937500 0.062500 -0.335938 485 | v -0.937500 0.062500 -0.335938 486 | v 1.000000 0.125000 -0.367188 487 | v -1.000000 0.125000 -0.367188 488 | v 0.960938 0.171875 -0.351562 489 | v -0.960938 0.171875 -0.351562 490 | v 1.015625 0.234375 -0.375000 491 | v -1.015625 0.234375 -0.375000 492 | v 1.054688 0.187500 -0.382812 493 | v -1.054688 0.187500 -0.382812 494 | v 1.109375 0.210938 -0.390625 495 | v -1.109375 0.210938 -0.390625 496 | v 1.085938 0.273438 -0.390625 497 | v -1.085938 0.273438 -0.390625 498 | v 1.023438 0.437500 -0.484375 499 | v -1.023438 0.437500 -0.484375 500 | v 1.250000 0.468750 -0.546875 501 | v -1.250000 0.468750 -0.546875 502 | v 1.367188 0.296875 -0.500000 503 | v -1.367188 0.296875 -0.500000 504 | v 1.312500 0.054688 -0.531250 505 | v -1.312500 0.054688 -0.531250 506 | v 1.039062 -0.085938 -0.492188 507 | v -1.039062 -0.085938 -0.492188 508 | v 0.789062 -0.125000 -0.328125 509 | v -0.789062 -0.125000 -0.328125 510 | v 0.859375 0.382812 -0.382812 511 | v -0.859375 0.382812 -0.382812 512 | vt 0.483733 0.873740 513 | vt 0.497204 0.887643 514 | vt 0.482459 0.909160 515 | vt 0.456183 0.883047 516 | vt 0.608888 0.859902 517 | vt 0.583069 0.870298 518 | vt 0.574185 0.855859 519 | vt 0.592212 0.831770 520 | vt 0.464411 0.922537 521 | vt 0.431848 0.889457 522 | vt 0.636000 0.848242 523 | vt 0.614138 0.813087 524 | vt 0.145669 0.965366 525 | vt 0.145270 0.929769 526 | vt 0.168046 0.923193 527 | vt 0.168046 0.969275 528 | vt 0.636000 0.898838 529 | vt 0.609028 0.898732 530 | vt 0.517890 0.886131 531 | vt 0.519405 0.908377 532 | vt 0.582929 0.892184 533 | vt 0.985049 0.382212 534 | vt 0.982037 0.401567 535 | vt 0.957949 0.401692 536 | vt 0.964616 0.364703 537 | vt 0.593165 0.925236 538 | vt 0.574185 0.906456 539 | vt 0.931495 0.400647 540 | vt 0.940528 0.352569 541 | vt 0.615624 0.934125 542 | vt 0.963326 0.434932 543 | vt 0.939883 0.442797 544 | vt 0.357021 0.900728 545 | vt 0.379083 0.896048 546 | vt 0.401539 0.923983 547 | vt 0.384331 0.936043 548 | vt 0.985049 0.418765 549 | vt 0.405197 0.888050 550 | vt 0.416695 0.902886 551 | vt 0.061748 0.904613 552 | vt 0.061088 0.884162 553 | vt 0.077470 0.881777 554 | vt 0.078989 0.918353 555 | vt 0.381054 0.857958 556 | vt 0.405374 0.866399 557 | vt 0.101751 0.878001 558 | vt 0.101751 0.925690 559 | vt 0.357916 0.850907 560 | vt 0.076829 0.847947 561 | vt 0.100968 0.834238 562 | vt 0.387113 0.817518 563 | vt 0.403064 0.831889 564 | vt 0.517740 0.836290 565 | vt 0.498529 0.837055 566 | vt 0.483354 0.816995 567 | vt 0.519405 0.816243 568 | vt 0.416695 0.853029 569 | vt 0.483184 0.852106 570 | vt 0.457089 0.844854 571 | vt 0.029741 0.882058 572 | vt 0.051589 0.881481 573 | vt 0.055836 0.900444 574 | vt 0.037748 0.916421 575 | vt 0.431698 0.839616 576 | vt 0.466372 0.803858 577 | vt 0.001530 0.881693 578 | vt 0.011741 0.926132 579 | vt 0.003629 0.834238 580 | vt 0.030399 0.845458 581 | vt 0.052360 0.861061 582 | vt 0.479523 0.923150 583 | vt 0.475581 0.941075 584 | vt 0.471092 0.941524 585 | vt 0.475553 0.922537 586 | vt 0.054771 0.881952 587 | vt 0.055836 0.860119 588 | vt 0.479523 0.962174 589 | vt 0.473779 0.965561 590 | vt 0.056294 0.965668 591 | vt 0.062928 0.964996 592 | vt 0.071404 0.980925 593 | vt 0.067433 0.982793 594 | vt 0.061501 0.866590 595 | vt 0.056056 0.884368 596 | vt 0.056188 0.864207 597 | vt 0.056056 0.943011 598 | vt 0.061921 0.944757 599 | vt 0.056997 0.907408 600 | vt 0.066307 0.925690 601 | vt 0.071404 0.929854 602 | vt 0.750260 0.014811 603 | vt 0.742484 0.033157 604 | vt 0.737548 0.032217 605 | vt 0.745450 0.011307 606 | vt 0.934301 0.100314 607 | vt 0.940219 0.099728 608 | vt 0.943518 0.117812 609 | vt 0.937858 0.121002 610 | vt 0.750260 0.051417 611 | vt 0.745199 0.053041 612 | vt 0.937341 0.078983 613 | vt 0.943518 0.081001 614 | vt 0.026549 0.965061 615 | vt 0.027911 0.945402 616 | vt 0.031987 0.946081 617 | vt 0.031987 0.968620 618 | vt 0.934301 0.032482 619 | vt 0.938394 0.032691 620 | vt 0.945368 0.050171 621 | vt 0.940476 0.052250 622 | vt 0.027650 0.926785 623 | vt 0.031694 0.926132 624 | vt 0.942359 0.012324 625 | vt 0.945368 0.013987 626 | vt 0.781859 0.030060 627 | vt 0.765436 0.057422 628 | vt 0.751694 0.041476 629 | vt 0.010247 0.966610 630 | vt 0.001530 0.950668 631 | vt 0.025201 0.938624 632 | vt 0.789167 0.057422 633 | vt 0.004195 0.926132 634 | vt 0.804262 0.041055 635 | vt 0.836286 0.057422 636 | vt 0.818572 0.055959 637 | vt 0.830081 0.029789 638 | vt 0.804856 0.018711 639 | vt 0.804856 0.040152 640 | vt 0.789893 0.001758 641 | vt 0.805790 0.016118 642 | vt 0.768551 0.001040 643 | vt 0.817947 0.000258 644 | vt 0.751067 0.018125 645 | vt 0.836286 0.001044 646 | vt 0.025201 0.969798 647 | vt 0.938685 0.284035 648 | vt 0.918649 0.287192 649 | vt 0.912169 0.254936 650 | vt 0.928877 0.250210 651 | vt 0.903208 0.219514 652 | vt 0.921773 0.209912 653 | vt 0.947049 0.310210 654 | vt 0.919421 0.300938 655 | vt 0.897363 0.204256 656 | vt 0.916168 0.174855 657 | vt 0.574185 0.616044 658 | vt 0.540792 0.634469 659 | vt 0.534654 0.615150 660 | vt 0.565151 0.605602 661 | vt 0.875490 0.196583 662 | vt 0.904157 0.164979 663 | vt 0.573316 0.660957 664 | vt 0.538986 0.661733 665 | vt 0.853315 0.196618 666 | vt 0.866708 0.162889 667 | vt 0.574185 0.722308 668 | vt 0.537217 0.722570 669 | vt 0.163494 0.772649 670 | vt 0.204706 0.739233 671 | vt 0.216653 0.776066 672 | vt 0.172006 0.805225 673 | vt 0.155032 0.339745 674 | vt 0.197232 0.318852 675 | vt 0.217494 0.340825 676 | vt 0.178419 0.387182 677 | vt 0.701390 0.747467 678 | vt 0.742453 0.747174 679 | vt 0.730701 0.801487 680 | vt 0.667306 0.813087 681 | vt 0.609284 0.012594 682 | vt 0.645060 0.022802 683 | vt 0.645040 0.053041 684 | vt 0.609760 0.053041 685 | vt 0.708640 0.689737 686 | vt 0.737860 0.695452 687 | vt 0.772918 0.534472 688 | vt 0.740682 0.593431 689 | vt 0.724440 0.557676 690 | vt 0.751938 0.525930 691 | vt 0.700131 0.649630 692 | vt 0.742453 0.631638 693 | vt 0.680812 0.596044 694 | vt 0.687065 0.562661 695 | vt 0.668844 0.627813 696 | vt 0.680005 0.596044 697 | vt 0.659693 0.564994 698 | vt 0.675906 0.545427 699 | vt 0.129884 0.393897 700 | vt 0.132592 0.421600 701 | vt 0.098694 0.423948 702 | vt 0.110824 0.406770 703 | vt 0.620485 0.519079 704 | vt 0.631333 0.493027 705 | vt 0.194954 0.388751 706 | vt 0.189750 0.416944 707 | vt 0.575004 0.486255 708 | vt 0.602872 0.467662 709 | vt 0.232396 0.387182 710 | vt 0.245533 0.418224 711 | vt 0.574185 0.448548 712 | vt 0.601732 0.442645 713 | vt 0.133888 0.872507 714 | vt 0.101751 0.864721 715 | vt 0.118250 0.834238 716 | vt 0.145270 0.852655 717 | vt 0.173469 0.833364 718 | vt 0.170158 0.888832 719 | vt 0.145270 0.893384 720 | vt 0.147101 0.843837 721 | vt 0.145270 0.921730 722 | vt 0.120055 0.919840 723 | vt 0.171472 0.909735 724 | vt 0.150682 0.923193 725 | vt 0.138886 0.951801 726 | vt 0.118960 0.940696 727 | vt 0.644418 0.434115 728 | vt 0.636987 0.455847 729 | vt 0.638125 0.414204 730 | vt 0.574185 0.715114 731 | vt 0.613256 0.720523 732 | vt 0.612792 0.744845 733 | vt 0.594041 0.757433 734 | vt 0.639767 0.473806 735 | vt 0.579679 0.689566 736 | vt 0.619163 0.703206 737 | vt 0.745537 0.664463 738 | vt 0.770738 0.681981 739 | vt 0.772785 0.719955 740 | vt 0.742453 0.689566 741 | vt 0.605081 0.673784 742 | vt 0.633569 0.686291 743 | vt 0.748158 0.621954 744 | vt 0.772785 0.614345 745 | vt 0.647564 0.636094 746 | vt 0.660437 0.656926 747 | vt 0.742722 0.602798 748 | vt 0.761770 0.596044 749 | vt 0.675111 0.657541 750 | vt 0.722496 0.531057 751 | vt 0.698508 0.539332 752 | vt 0.687936 0.673348 753 | vt 0.743205 0.495660 754 | vt 0.692387 0.715580 755 | vt 0.747179 0.466192 756 | vt 0.762382 0.471566 757 | vt 0.686367 0.745773 758 | vt 0.719395 0.430604 759 | vt 0.760257 0.397671 760 | vt 0.713310 0.310210 761 | vt 0.744862 0.347050 762 | vt 0.694378 0.348345 763 | vt 0.700993 0.314328 764 | vt 0.706421 0.423998 765 | vt 0.717330 0.389058 766 | vt 0.686215 0.357558 767 | vt 0.649319 0.392650 768 | vt 0.666839 0.421981 769 | vt 0.603364 0.786823 770 | vt 0.625998 0.765307 771 | vt 0.680527 0.392289 772 | vt 0.688581 0.420069 773 | vt 0.631532 0.801827 774 | vt 0.639557 0.774322 775 | vt 0.672224 0.366284 776 | vt 0.895892 0.270592 777 | vt 0.895515 0.257252 778 | vt 0.890010 0.244810 779 | vt 0.888265 0.281258 780 | vt 0.877236 0.232916 781 | vt 0.504275 0.664235 782 | vt 0.504476 0.637367 783 | vt 0.854693 0.231340 784 | vt 0.505530 0.728445 785 | vt 0.506959 0.671036 786 | vt 0.458800 0.682917 787 | vt 0.473424 0.736366 788 | vt 0.450531 0.743957 789 | vt 0.436247 0.687081 790 | vt 0.849253 0.228217 791 | vt 0.513406 0.764203 792 | vt 0.494399 0.759564 793 | vt 0.489477 0.732406 794 | vt 0.478089 0.772916 795 | vt 0.483149 0.678775 796 | vt 0.480184 0.658985 797 | vt 0.459327 0.675325 798 | vt 0.374819 0.974067 799 | vt 0.363786 0.976125 800 | vt 0.366190 0.961537 801 | vt 0.374736 0.957023 802 | vt 0.449252 0.945303 803 | vt 0.438544 0.935034 804 | vt 0.447076 0.932856 805 | vt 0.458791 0.944865 806 | vt 0.971081 0.943134 807 | vt 0.960980 0.943319 808 | vt 0.965726 0.927746 809 | vt 0.975903 0.929344 810 | vt 0.348554 0.937628 811 | vt 0.346502 0.958880 812 | vt 0.337865 0.958522 813 | vt 0.338164 0.940438 814 | vt 0.975903 0.965090 815 | vt 0.964081 0.958794 816 | vt 0.934610 0.073885 817 | vt 0.934301 0.059433 818 | vt 0.944453 0.052250 819 | vt 0.944453 0.073401 820 | vt 0.004208 0.655814 821 | vt 0.015015 0.655003 822 | vt 0.014636 0.672771 823 | vt 0.003123 0.666270 824 | vt 0.395695 0.959139 825 | vt 0.412385 0.963357 826 | vt 0.413123 0.968368 827 | vt 0.400341 0.971054 828 | vt 0.374819 0.936043 829 | vt 0.366096 0.937947 830 | vt 0.466331 0.965740 831 | vt 0.458134 0.968376 832 | vt 0.452581 0.984830 833 | vt 0.444498 0.981794 834 | vt 0.449126 0.968082 835 | vt 0.441725 0.948855 836 | vt 0.021953 0.650622 837 | vt 0.021953 0.668048 838 | vt 0.401420 0.953244 839 | vt 0.416695 0.959327 840 | vt 0.575789 0.940724 841 | vt 0.582799 0.941216 842 | vt 0.582305 0.951455 843 | vt 0.574185 0.955798 844 | vt 0.354476 0.955670 845 | vt 0.357021 0.963850 846 | vt 0.350307 0.970428 847 | vt 0.598211 0.958397 848 | vt 0.594902 0.966062 849 | vt 0.357021 0.939872 850 | vt 0.357021 0.972653 851 | vt 0.362088 0.963131 852 | vt 0.433364 0.942525 853 | vt 0.598211 0.934125 854 | vt 0.400905 0.943339 855 | vt 0.416695 0.936043 856 | vt 0.431698 0.963928 857 | vt 0.437248 0.988640 858 | vt 0.771970 0.918033 859 | vt 0.763013 0.938309 860 | vt 0.742637 0.934415 861 | vt 0.757381 0.892005 862 | vt 0.755879 0.357591 863 | vt 0.760351 0.378521 864 | vt 0.766600 0.953547 865 | vt 0.771970 0.964077 866 | vt 0.772918 0.344103 867 | vt 0.772381 0.348306 868 | vt 0.522709 0.776444 869 | vt 0.535378 0.754739 870 | vt 0.534593 0.771723 871 | vt 0.466331 0.924207 872 | vt 0.455783 0.922537 873 | vt 0.461534 0.772958 874 | vt 0.569019 0.754209 875 | vt 0.228791 0.722894 876 | vt 0.244076 0.760531 877 | vt 0.566360 0.769790 878 | vt 0.241453 0.714352 879 | vt 0.256262 0.751807 880 | vt 0.561216 0.785595 881 | vt 0.519987 0.803858 882 | vt 0.252650 0.677896 883 | vt 0.268064 0.740739 884 | vt 0.864987 0.276458 885 | vt 0.867449 0.256166 886 | vt 0.871309 0.254891 887 | vt 0.869352 0.273542 888 | vt 0.860529 0.234869 889 | vt 0.884626 0.275668 890 | vt 0.355884 0.930869 891 | vt 0.357021 0.937628 892 | vt 0.338547 0.918981 893 | vt 0.344247 0.917568 894 | vt 0.893917 0.265786 895 | vt 0.339327 0.901553 896 | vt 0.344807 0.901035 897 | vt 0.346944 0.889472 898 | vt 0.355613 0.880704 899 | vt 0.357021 0.885399 900 | vt 0.349591 0.891968 901 | vt 0.380868 0.975400 902 | vt 0.381443 0.966853 903 | vt 0.394911 0.966853 904 | vt 0.394336 0.975400 905 | vt 0.889102 0.956265 906 | vt 0.899080 0.956071 907 | vt 0.902929 0.966127 908 | vt 0.892951 0.966321 909 | vt 0.379161 0.950369 910 | vt 0.395695 0.952498 911 | vt 0.889182 0.941779 912 | vt 0.902929 0.939914 913 | vt 0.380574 0.936043 914 | vt 0.394331 0.940496 915 | vt 0.941093 0.657602 916 | vt 0.938665 0.643469 917 | vt 0.951807 0.643573 918 | vt 0.951807 0.660219 919 | vt 0.916742 0.939914 920 | vt 0.916742 0.961183 921 | vt 0.902929 0.965034 922 | vt 0.902929 0.943765 923 | vt 0.882945 0.248653 924 | vt 0.872165 0.228632 925 | vt 0.048968 0.948276 926 | vt 0.031987 0.944145 927 | vt 0.033798 0.934394 928 | vt 0.055836 0.929924 929 | vt 0.033798 0.954235 930 | vt 0.055836 0.969607 931 | vt 0.042477 0.926132 932 | vt 0.916742 0.953396 933 | vt 0.922243 0.939914 934 | vt 0.922243 0.966318 935 | vt 0.005612 0.634450 936 | vt 0.002978 0.617852 937 | vt 0.011416 0.617495 938 | vt 0.015421 0.630207 939 | vt 0.681580 0.350880 940 | vt 0.668409 0.356078 941 | vt 0.012808 0.650622 942 | vt 0.021953 0.640869 943 | vt 0.651444 0.371360 944 | vt 0.650107 0.358147 945 | vt 0.672237 0.430915 946 | vt 0.656340 0.440894 947 | vt 0.624212 0.367675 948 | vt 0.630361 0.355470 949 | vt 0.002978 0.603513 950 | vt 0.014372 0.604002 951 | vt 0.689992 0.339892 952 | vt 0.011222 0.559853 953 | vt 0.021953 0.569172 954 | vt 0.672903 0.741223 955 | vt 0.660612 0.773001 956 | vt 0.652178 0.767225 957 | vt 0.734078 0.488998 958 | vt 0.737108 0.463946 959 | vt 0.677601 0.715315 960 | vt 0.718325 0.518381 961 | vt 0.678561 0.682773 962 | vt 0.697544 0.523457 963 | vt 0.665767 0.670542 964 | vt 0.678530 0.533299 965 | vt 0.681968 0.520745 966 | vt 0.428403 0.665098 967 | vt 0.436247 0.669973 968 | vt 0.431350 0.689749 969 | vt 0.423687 0.679329 970 | vt 0.654559 0.495207 971 | vt 0.663859 0.485588 972 | vt 0.419698 0.629532 973 | vt 0.434916 0.629238 974 | vt 0.651190 0.471422 975 | vt 0.428330 0.612923 976 | vt 0.436247 0.605602 977 | vt 0.649372 0.456627 978 | vt 0.615695 0.345893 979 | vt 0.606196 0.354604 980 | vt 0.599354 0.340925 981 | vt 0.609815 0.335378 982 | vt 0.660975 0.447571 983 | vt 0.655075 0.458001 984 | vt 0.970591 0.529147 985 | vt 0.963758 0.534111 986 | vt 0.958940 0.516280 987 | vt 0.963850 0.516240 988 | vt 0.656412 0.471214 989 | vt 0.961227 0.501445 990 | vt 0.966076 0.503057 991 | vt 0.421221 0.708030 992 | vt 0.433254 0.689749 993 | vt 0.436247 0.693890 994 | vt 0.427129 0.709383 995 | vt 0.963472 0.486975 996 | vt 0.968936 0.487925 997 | vt 0.420642 0.743638 998 | vt 0.428641 0.741817 999 | vt 0.985982 0.456752 1000 | vt 0.990926 0.463814 1001 | vt 0.423147 0.757798 1002 | vt 0.430635 0.754757 1003 | vt 0.021953 0.553168 1004 | vt 0.015860 0.559853 1005 | vt 0.006543 0.548890 1006 | vt 0.013371 0.543869 1007 | vt 0.431752 0.771621 1008 | vt 0.436247 0.764438 1009 | vt 0.000062 0.528048 1010 | vt 0.008201 0.528086 1011 | vt 0.712712 0.513671 1012 | vt 0.729303 0.488339 1013 | vt 0.005546 0.497937 1014 | vt 0.011691 0.499520 1015 | vt 0.731512 0.466816 1016 | vt 0.017961 0.479341 1017 | vt 0.021953 0.484200 1018 | vt 0.717896 0.431644 1019 | vt 0.714920 0.438200 1020 | vt 0.431698 0.860347 1021 | vt 0.426896 0.864000 1022 | vt 0.418822 0.831664 1023 | vt 0.425183 0.832047 1024 | vt 0.704673 0.426812 1025 | vt 0.701698 0.433368 1026 | vt 0.422633 0.817610 1027 | vt 0.428994 0.817993 1028 | vt 0.672826 0.436741 1029 | vt 0.979311 0.542943 1030 | vt 0.974794 0.547640 1031 | vt 0.689578 0.425682 1032 | vt 0.688741 0.434342 1033 | vt 0.990926 0.548709 1034 | vt 0.986011 0.556215 1035 | vt 0.423853 0.803858 1036 | vt 0.431698 0.807080 1037 | vt 0.200762 0.888761 1038 | vt 0.203495 0.915342 1039 | vt 0.293527 0.862276 1040 | vt 0.258198 0.859422 1041 | vt 0.260707 0.838994 1042 | vt 0.291885 0.833364 1043 | vt 0.203495 0.838739 1044 | vt 0.280353 0.904714 1045 | vt 0.243535 0.906316 1046 | vt 0.830173 0.310210 1047 | vt 0.807109 0.290038 1048 | vt 0.830255 0.261016 1049 | vt 0.849253 0.280201 1050 | vt 0.293527 0.935468 1051 | vt 0.257063 0.943713 1052 | vt 0.790582 0.236739 1053 | vt 0.815695 0.215469 1054 | vt 0.175394 0.443830 1055 | vt 0.223125 0.445109 1056 | vt 0.768474 0.180831 1057 | vt 0.797054 0.165238 1058 | vt 0.124507 0.449715 1059 | vt 0.751067 0.147910 1060 | vt 0.784520 0.137932 1061 | vt 0.096738 0.452803 1062 | vt 0.787137 0.092996 1063 | vt 0.807782 0.094991 1064 | vt 0.974425 0.169894 1065 | vt 0.955971 0.161965 1066 | vt 0.974892 0.100502 1067 | vt 0.996051 0.119108 1068 | vt 0.293527 0.255940 1069 | vt 0.244370 0.302379 1070 | vt 0.232434 0.273408 1071 | vt 0.279798 0.241802 1072 | vt 0.971707 0.223418 1073 | vt 0.947049 0.221060 1074 | vt 0.197640 0.301008 1075 | vt 0.976191 0.262412 1076 | vt 0.962228 0.268495 1077 | vt 0.044728 0.335009 1078 | vt 0.052842 0.318232 1079 | vt 0.090014 0.298910 1080 | vt 0.073536 0.335005 1081 | vt 0.001847 0.804336 1082 | vt 0.011334 0.764804 1083 | vt 0.033204 0.762314 1084 | vt 0.034640 0.793833 1085 | vt 0.086637 0.747568 1086 | vt 0.023829 0.742802 1087 | vt 0.071973 0.724504 1088 | vt 0.084134 0.781914 1089 | vt 0.133299 0.746326 1090 | vt 0.117561 0.712859 1091 | vt 0.131750 0.779837 1092 | vt 0.944939 0.699211 1093 | vt 0.950761 0.667049 1094 | vt 0.977541 0.673398 1095 | vt 0.972700 0.705748 1096 | vt 0.947049 0.237429 1097 | vt 0.938144 0.199598 1098 | vt 0.942852 0.728085 1099 | vt 0.971430 0.738767 1100 | vt 0.636000 0.943893 1101 | vt 0.636000 0.972151 1102 | vt 0.612705 0.964577 1103 | vt 0.610841 0.934125 1104 | vt 0.938665 0.743275 1105 | vt 0.977541 0.767896 1106 | vt 0.129032 0.811852 1107 | vt 0.145270 0.821552 1108 | vt 0.135484 0.834238 1109 | vt 0.081385 0.817107 1110 | vt 0.888396 0.346059 1111 | vt 0.897215 0.310210 1112 | vt 0.931495 0.331933 1113 | vt 0.931495 0.370054 1114 | vt 0.203107 0.833364 1115 | vt 0.145270 0.832756 1116 | vt 0.239184 0.807247 1117 | vt 0.056387 0.699098 1118 | vt 0.012148 0.723110 1119 | vt 0.033768 0.825172 1120 | vt 0.100656 0.677896 1121 | vt 0.122200 0.321778 1122 | vt 0.102666 0.332577 1123 | vt 0.001530 0.834238 1124 | vt 0.888706 0.390319 1125 | vt 0.927850 0.396278 1126 | vt 0.261931 0.788433 1127 | vt 0.897224 0.415251 1128 | vt 0.924603 0.411687 1129 | vt 0.917738 0.425362 1130 | vt 0.899497 0.428019 1131 | vt 0.274856 0.762410 1132 | vt 0.271157 0.775635 1133 | vt 0.901629 0.442797 1134 | vt 0.912245 0.438166 1135 | vt 0.279700 0.750605 1136 | vt 0.151105 0.325005 1137 | vt 0.996051 0.309805 1138 | vt 0.986603 0.310210 1139 | vt 0.021614 0.029050 1140 | vt 0.090978 0.051399 1141 | vt 0.076278 0.097625 1142 | vt 0.000000 0.088398 1143 | vt 0.378714 0.386763 1144 | vt 0.403790 0.435138 1145 | vt 0.342513 0.498954 1146 | vt 0.307664 0.437800 1147 | vt 0.072433 0.173546 1148 | vt 0.005223 0.174609 1149 | vt 0.358860 0.335688 1150 | vt 0.294178 0.371671 1151 | vt 0.089290 0.275514 1152 | vt 0.046951 0.296121 1153 | vt 0.666489 0.259699 1154 | vt 0.751067 0.242110 1155 | vt 0.746814 0.310210 1156 | vt 0.648892 0.309036 1157 | vt 0.647477 0.266803 1158 | vt 0.632803 0.310210 1159 | vt 0.131658 0.320385 1160 | vt 0.293527 0.833364 1161 | vt 0.279120 0.814863 1162 | vt 0.214364 0.200058 1163 | vt 0.271232 0.164012 1164 | vt 0.700949 0.114387 1165 | vt 0.616851 0.125314 1166 | vt 0.624896 0.070624 1167 | vt 0.688108 0.053154 1168 | vt 0.421166 0.583177 1169 | vt 0.333085 0.605602 1170 | vt 0.293527 0.521711 1171 | vt 0.484376 0.486816 1172 | vt 0.579197 0.182101 1173 | vt 0.515577 0.258942 1174 | vt 0.482281 0.213534 1175 | vt 0.537832 0.127473 1176 | vt 0.209070 0.611452 1177 | vt 0.212931 0.537065 1178 | vt 0.293527 0.530823 1179 | vt 0.287466 0.619902 1180 | vt 0.426616 0.168590 1181 | vt 0.455514 0.059968 1182 | vt 0.523533 0.000000 1183 | vt 0.579197 0.044944 1184 | vt 0.313572 0.128151 1185 | vt 0.359759 0.019288 1186 | vt 0.569794 0.524094 1187 | vt 0.491821 0.605602 1188 | vt 0.817430 0.133484 1189 | vt 0.841053 0.147528 1190 | vt 0.100440 0.481558 1191 | vt 0.119750 0.497779 1192 | vt 0.860235 0.557227 1193 | vt 0.871320 0.574246 1194 | vt 0.820428 0.600361 1195 | vt 0.789147 0.566496 1196 | vt 0.104498 0.539662 1197 | vt 0.148572 0.566298 1198 | vt 0.446548 0.269264 1199 | vt 0.419029 0.310210 1200 | vt 0.391444 0.274201 1201 | vt 0.416629 0.232203 1202 | vt 0.100159 0.598279 1203 | vt 0.142452 0.626144 1204 | vt 0.343826 0.239709 1205 | vt 0.369033 0.196480 1206 | vt 0.073056 0.647722 1207 | vt 0.116246 0.677896 1208 | vt 0.293527 0.227057 1209 | vt 0.297702 0.175589 1210 | vt 0.566821 0.475658 1211 | vt 0.498466 0.435724 1212 | vt 0.521818 0.388992 1213 | vt 0.574185 0.422798 1214 | vt 0.180665 0.677896 1215 | vt 0.772918 0.501745 1216 | vt 0.859188 0.503119 1217 | vt 0.166554 0.470126 1218 | vt 0.841669 0.199668 1219 | vt 0.872101 0.390586 1220 | vt 0.780144 0.399065 1221 | vt 0.801631 0.312106 1222 | vt 0.888396 0.310210 1223 | vt 1.000000 0.643469 1224 | vt 0.958940 0.618673 1225 | vt 0.961558 0.586771 1226 | vt 1.000000 0.558018 1227 | vt 0.963209 0.844037 1228 | vt 0.960980 0.815952 1229 | vt 0.997639 0.778730 1230 | vt 0.997639 0.857304 1231 | vt 0.771970 0.818406 1232 | vt 0.771970 0.892005 1233 | vt 0.742453 0.884171 1234 | vt 0.756873 0.822718 1235 | vt 0.219911 0.427375 1236 | vt 0.253213 0.444475 1237 | vt 0.710679 0.045188 1238 | vt 0.703339 0.021847 1239 | vt 0.737548 0.016171 1240 | vt 0.737548 0.053041 1241 | vt 0.849253 0.057422 1242 | vt 0.035895 0.532570 1243 | vt 0.053957 0.455684 1244 | vt 0.888396 0.636946 1245 | vt 0.862298 0.643469 1246 | vt 0.043676 0.561452 1247 | vt 0.350382 0.299491 1248 | vt 0.332619 0.269307 1249 | vt 0.042157 0.597623 1250 | vt 0.772918 0.914821 1251 | vt 0.818848 0.936473 1252 | vt 0.818848 0.991848 1253 | vt 0.777951 0.971609 1254 | vt 0.025361 0.646677 1255 | vt 0.115978 0.167985 1256 | vt 0.150400 0.242459 1257 | vt 0.741608 0.199285 1258 | vt 0.666923 0.192385 1259 | vt 0.157424 0.164144 1260 | vt 0.741074 0.157264 1261 | vt 0.599767 0.168334 1262 | vt 0.141762 0.323519 1263 | vt 0.604848 0.236951 1264 | vt 0.591259 0.229906 1265 | vt 0.848944 0.057422 1266 | vt 0.836286 0.004108 1267 | vt 0.848944 0.002835 1268 | vt 0.579197 0.223036 1269 | vt 0.214656 0.060260 1270 | vt 0.155529 0.094526 1271 | vt 0.122607 0.073123 1272 | vt 0.183023 0.029160 1273 | vt 0.429279 0.398014 1274 | vt 0.456050 0.359884 1275 | vt 0.160941 0.000000 1276 | vt 0.402573 0.332039 1277 | vt 0.443391 0.317440 1278 | vt 0.296005 0.764482 1279 | vt 0.293527 0.724460 1280 | vt 0.306530 0.723033 1281 | vt 0.307505 0.753561 1282 | vt 0.431698 0.897382 1283 | vt 0.418659 0.893229 1284 | vt 0.421992 0.864000 1285 | vt 0.431698 0.876255 1286 | vt 0.324577 0.797962 1287 | vt 0.316183 0.817518 1288 | vt 0.935779 0.158239 1289 | vt 0.934301 0.121641 1290 | vt 0.946881 0.121002 1291 | vt 0.946881 0.162889 1292 | vt 0.364443 0.797150 1293 | vt 0.368363 0.817518 1294 | vt 0.319772 0.864935 1295 | vt 0.297605 0.837035 1296 | vt 0.299447 0.817518 1297 | vt 0.333396 0.851685 1298 | vt 0.401310 0.764263 1299 | vt 0.414755 0.776735 1300 | vt 0.320710 0.916427 1301 | vt 0.333396 0.916541 1302 | vt 0.402554 0.708153 1303 | vt 0.416695 0.705301 1304 | vt 0.930290 0.531181 1305 | vt 0.927397 0.585630 1306 | vt 0.919238 0.599908 1307 | vt 0.916784 0.528845 1308 | vt 0.382207 0.649410 1309 | vt 0.390093 0.631134 1310 | vt 0.958940 0.474912 1311 | vt 0.950468 0.456752 1312 | vt 0.396538 0.720921 1313 | vt 0.380347 0.673075 1314 | vt 0.091606 0.971713 1315 | vt 0.089101 0.925690 1316 | vt 0.101751 0.936917 1317 | vt 0.101751 0.990241 1318 | vt 0.759932 0.772164 1319 | vt 0.749855 0.774102 1320 | vt 0.755422 0.731873 1321 | vt 0.768171 0.719955 1322 | vt 0.295232 0.946546 1323 | vt 0.310691 0.914101 1324 | vt 0.303002 0.956617 1325 | vt 0.768171 0.818406 1326 | vt 0.756389 0.809231 1327 | vt 0.311268 0.875513 1328 | vt 0.974185 0.351696 1329 | vt 0.959152 0.338191 1330 | vt 0.960521 0.310210 1331 | vt 0.974185 0.314410 1332 | vt 0.293527 0.855260 1333 | vt 0.324061 0.755161 1334 | vt 0.339586 0.791912 1335 | vt 0.913131 0.153684 1336 | vt 0.908516 0.114163 1337 | vt 0.929622 0.104053 1338 | vt 0.934301 0.151414 1339 | vt 0.321710 0.729110 1340 | vt 0.905004 0.088907 1341 | vt 0.922105 0.075559 1342 | vt 0.191416 0.147267 1343 | vt 0.205863 0.166050 1344 | vt 0.744595 0.119511 1345 | vt 0.723233 0.112469 1346 | vt 0.366529 0.605602 1347 | vt 0.360464 0.639719 1348 | vt 0.654277 0.000927 1349 | vt 0.672419 0.010924 1350 | vt 0.672419 0.053041 1351 | vt 0.645060 0.028566 1352 | vt 0.274542 0.133725 1353 | vt 0.000000 0.397328 1354 | vt 0.021953 0.387182 1355 | vt 0.021953 0.459367 1356 | vt 0.004883 0.479341 1357 | vt 0.300780 0.699911 1358 | vt 0.311672 0.700624 1359 | vt 0.429402 0.921263 1360 | vt 0.421258 0.916803 1361 | vt 0.993378 0.872622 1362 | vt 0.990683 0.882759 1363 | vt 0.968423 0.881308 1364 | vt 0.968060 0.857304 1365 | vt 0.075122 0.966132 1366 | vt 0.076387 0.995751 1367 | vt 0.934449 0.817013 1368 | vt 0.915260 0.786641 1369 | vt 0.928294 0.778730 1370 | vt 0.937719 0.808236 1371 | vt 0.431698 0.966615 1372 | vt 0.422831 0.966053 1373 | vt 0.417658 0.930553 1374 | vt 0.427180 0.934484 1375 | vt 0.908790 0.808958 1376 | vt 0.917100 0.819620 1377 | vt 0.932022 0.334835 1378 | vt 0.953714 0.310210 1379 | vt 0.959152 0.332593 1380 | vt 0.948448 0.334951 1381 | vt 0.227980 0.101619 1382 | vt 0.231953 0.113312 1383 | vt 0.198563 0.137763 1384 | vt 0.204227 0.112591 1385 | vt 0.854667 0.027458 1386 | vt 0.885888 0.048124 1387 | vt 0.875215 0.063754 1388 | vt 0.855186 0.047563 1389 | vt 0.323812 0.682889 1390 | vt 0.335878 0.693419 1391 | vt 0.327722 0.709924 1392 | vt 0.904497 0.058412 1393 | vt 0.892975 0.074246 1394 | vt 0.251624 0.102850 1395 | vt 0.253931 0.101584 1396 | vt 0.031427 0.596543 1397 | vt 0.023884 0.590908 1398 | vt 0.865304 0.012324 1399 | vt 0.934301 0.039390 1400 | vt 0.610841 0.963435 1401 | vt 0.601360 0.955166 1402 | vt 0.262963 0.080633 1403 | vt 0.247537 0.094035 1404 | vt 0.241120 0.083271 1405 | vt 0.256754 0.070323 1406 | vt 0.883936 0.081628 1407 | vt 0.895332 0.097679 1408 | vt 0.224701 0.091405 1409 | vt 0.869282 0.071684 1410 | vt 0.200948 0.102378 1411 | vt 0.849253 0.055493 1412 | vt 0.703562 0.016171 1413 | vt 0.703339 0.002063 1414 | vt 0.713716 0.001317 1415 | vt 0.713022 0.016171 1416 | vt 0.946481 0.346067 1417 | vt 0.958624 0.343825 1418 | vt 0.935782 0.823794 1419 | vt 0.920083 0.825636 1420 | vt 0.931495 0.346067 1421 | vt 0.609505 0.010696 1422 | vt 0.609284 0.000233 1423 | vt 0.620178 0.000000 1424 | vt 0.620178 0.011776 1425 | vt 0.431698 0.926442 1426 | vt 0.421091 0.921263 1427 | vt 0.982017 0.888920 1428 | vt 0.960980 0.887602 1429 | vt 0.663881 0.928252 1430 | vt 0.673423 0.932945 1431 | vt 0.660625 0.942646 1432 | vt 0.651549 0.939092 1433 | vt 0.274440 0.058702 1434 | vt 0.269522 0.048070 1435 | vt 0.899528 0.124439 1436 | vt 0.293527 0.034556 1437 | vt 0.289371 0.025573 1438 | vt 0.905246 0.162889 1439 | vt 0.344966 0.853354 1440 | vt 0.357021 0.880704 1441 | vt 0.348580 0.878081 1442 | vt 0.334799 0.852255 1443 | vt 0.831558 0.943619 1444 | vt 0.820814 0.949161 1445 | vt 0.820314 0.920375 1446 | vt 0.831558 0.914821 1447 | vt 0.357021 0.818877 1448 | vt 0.347766 0.817518 1449 | vt 0.663880 0.813087 1450 | vt 0.673423 0.821089 1451 | vt 0.651310 0.842026 1452 | vt 0.643281 0.834617 1453 | vt 0.742453 0.778190 1454 | vt 0.743599 0.736162 1455 | vt 0.650186 0.886154 1456 | vt 0.639791 0.880343 1457 | vt 0.993378 0.919441 1458 | vt 0.986068 0.927746 1459 | vt 0.935206 0.845888 1460 | vt 0.920227 0.841019 1461 | vt 0.956942 0.039027 1462 | vt 0.962305 0.018648 1463 | vt 0.974649 0.027050 1464 | vt 0.969966 0.041457 1465 | vt 0.929000 0.867011 1466 | vt 0.914769 0.862679 1467 | vt 0.959154 0.058506 1468 | vt 0.970088 0.062299 1469 | vt 0.921794 0.884922 1470 | vt 0.907647 0.881482 1471 | vt 0.960884 0.077405 1472 | vt 0.972675 0.080937 1473 | vt 0.922755 0.898111 1474 | vt 0.907056 0.899953 1475 | vt 0.956353 0.089247 1476 | vt 0.968697 0.097649 1477 | vt 0.890760 0.899419 1478 | vt 0.889102 0.871847 1479 | vt 0.986674 0.083408 1480 | vt 0.986232 0.100502 1481 | vt 0.893742 0.852381 1482 | vt 0.887169 0.113194 1483 | vt 0.875140 0.098533 1484 | vt 0.901947 0.837683 1485 | vt 0.985152 0.046814 1486 | vt 0.986400 0.065131 1487 | vt 0.910122 0.815739 1488 | vt 0.986674 0.021163 1489 | vt 0.417951 0.772037 1490 | vt 0.436247 0.771621 1491 | vt 0.436247 0.799658 1492 | vt 0.425190 0.781098 1493 | vt 0.947049 0.019023 1494 | vt 0.964147 0.007286 1495 | vt 0.960980 0.869573 1496 | vt 0.945129 0.820200 1497 | vt 0.217839 0.926364 1498 | vt 0.214899 0.905790 1499 | vt 0.243535 0.903338 1500 | vt 0.215794 0.949057 1501 | vt 0.960980 0.915134 1502 | vt 0.209001 0.887835 1503 | vt 0.243535 0.857317 1504 | vt 0.933057 0.939914 1505 | vt 0.207326 0.873752 1506 | vt 0.222500 0.833364 1507 | vt 0.904029 0.936121 1508 | vt 0.703339 0.042635 1509 | vt 0.689914 0.049294 1510 | vt 0.678713 0.024813 1511 | vt 0.703339 0.009141 1512 | vt 0.554663 0.932600 1513 | vt 0.574185 0.994378 1514 | vt 0.531810 0.972900 1515 | vt 0.519405 0.916582 1516 | vt 0.914698 0.473935 1517 | vt 0.888396 0.540316 1518 | vt 0.558561 0.862816 1519 | vt 0.539226 0.849981 1520 | vt 0.900093 0.612777 1521 | vt 0.574185 0.808566 1522 | vt 0.557887 0.803858 1523 | vt 0.958940 0.637387 1524 | vt 0.940851 0.643469 1525 | vt 0.898028 0.727083 1526 | vt 0.896231 0.679797 1527 | vt 0.911419 0.668920 1528 | vt 0.923487 0.711171 1529 | vt 0.609284 0.053041 1530 | vt 0.590116 0.050781 1531 | vt 0.579197 0.000000 1532 | vt 0.609284 0.002600 1533 | vt 0.902121 0.767896 1534 | vt 0.938665 0.751958 1535 | vt 0.797903 0.914821 1536 | vt 0.772918 0.896897 1537 | vt 0.777430 0.840404 1538 | vt 0.811423 0.861236 1539 | vt 0.889102 0.943467 1540 | vt 0.882821 0.979402 1541 | vt 0.843239 0.983274 1542 | vt 0.852963 0.944445 1543 | vt 0.786270 0.802183 1544 | vt 0.816738 0.814308 1545 | vt 0.896231 0.724411 1546 | vt 0.775015 0.714769 1547 | vt 0.772918 0.643469 1548 | vt 0.888326 0.677579 1549 | vt 0.889102 0.778730 1550 | vt 0.889102 0.850144 1551 | vt 0.894766 0.778730 1552 | vt 0.795963 0.778730 1553 | vt 0.689426 0.908692 1554 | vt 0.702320 0.813087 1555 | vt 0.742453 0.827271 1556 | vt 0.742453 0.948116 1557 | vt 0.673423 0.852823 1558 | vt 0.889102 0.917606 1559 | vt 0.798681 0.782055 1560 | vt 0.850365 0.800948 1561 | vt 0.250453 0.056628 1562 | vt 0.173712 0.121486 1563 | vt 0.466763 0.310210 1564 | vt 0.557838 0.391383 1565 | vt 0.172141 0.941654 1566 | vt 0.203495 0.923193 1567 | vt 0.203495 0.971111 1568 | vt 0.168550 0.983695 1569 | vt 0.479523 0.952511 1570 | vt 0.519405 0.922537 1571 | vt 0.519405 0.990559 1572 | vt 0.487881 1.000000 1573 | vn 0.664993 -0.200752 0.719363 1574 | vn -0.664993 -0.200752 0.719363 1575 | vn 0.829427 -0.303581 0.468924 1576 | vn -0.829427 -0.303581 0.468924 1577 | vn 0.415548 -0.793320 0.444931 1578 | vn -0.415548 -0.793320 0.444931 1579 | vn 0.359950 -0.508895 0.781960 1580 | vn -0.359950 -0.508895 0.781960 1581 | vn -0.078666 -0.539423 0.838353 1582 | vn 0.078666 -0.539423 0.838353 1583 | vn -0.269627 -0.841296 0.468532 1584 | vn 0.269627 -0.841296 0.468532 1585 | vn -0.770656 -0.335204 0.541966 1586 | vn 0.770656 -0.335204 0.541966 1587 | vn -0.468941 -0.194045 0.861650 1588 | vn 0.468941 -0.194045 0.861650 1589 | vn -0.476731 0.190693 0.858116 1590 | vn 0.476731 0.190693 0.858116 1591 | vn -0.767202 0.326404 0.552142 1592 | vn 0.767202 0.326404 0.552142 1593 | vn -0.251928 0.817333 0.518169 1594 | vn 0.251928 0.817333 0.518169 1595 | vn -0.094933 0.569597 0.816423 1596 | vn 0.094933 0.569597 0.816423 1597 | vn 0.366742 0.537015 0.759680 1598 | vn -0.366742 0.537015 0.759680 1599 | vn 0.414055 0.767219 0.489830 1600 | vn -0.414055 0.767219 0.489830 1601 | vn 0.827747 0.295247 0.477141 1602 | vn -0.827747 0.295247 0.477141 1603 | vn 0.671345 0.197092 0.714459 1604 | vn -0.671345 0.197092 0.714459 1605 | vn 0.811107 0.324443 -0.486664 1606 | vn -0.811107 0.324443 -0.486664 1607 | vn 0.205152 0.820610 -0.533396 1608 | vn -0.205152 0.820610 -0.533396 1609 | vn -0.422314 0.780641 -0.460706 1610 | vn 0.422314 0.780641 -0.460706 1611 | vn -0.824061 0.322458 -0.465773 1612 | vn 0.824061 0.322458 -0.465773 1613 | vn -0.813733 -0.348743 -0.464991 1614 | vn 0.813733 -0.348743 -0.464991 1615 | vn -0.422314 -0.780641 -0.460706 1616 | vn 0.422314 -0.780641 -0.460706 1617 | vn 0.205152 -0.820610 -0.533396 1618 | vn -0.205152 -0.820610 -0.533396 1619 | vn 0.799477 -0.350990 -0.487486 1620 | vn -0.799477 -0.350990 -0.487486 1621 | vn 0.400039 -0.062344 0.914375 1622 | vn -0.400039 -0.062344 0.914375 1623 | vn 0.306938 -0.175393 0.935429 1624 | vn -0.306938 -0.175393 0.935429 1625 | vn 0.094512 -0.183464 0.978473 1626 | vn -0.094512 -0.183464 0.978473 1627 | vn -0.062353 -0.028342 0.997652 1628 | vn 0.062353 -0.028342 0.997652 1629 | vn -0.062357 0.025982 0.997716 1630 | vn 0.062357 0.025982 0.997716 1631 | vn 0.099561 0.172922 0.979891 1632 | vn -0.099561 0.172922 0.979891 1633 | vn 0.303571 0.165584 0.938310 1634 | vn -0.303571 0.165584 0.938310 1635 | vn 0.400163 0.057166 0.914659 1636 | vn -0.400163 0.057166 0.914659 1637 | vn 0.123091 -0.861640 0.492366 1638 | vn -0.123091 -0.861640 0.492366 1639 | vn 0.218986 -0.864715 0.452010 1640 | vn -0.218986 -0.864715 0.452010 1641 | vn 0.590198 -0.455038 0.666788 1642 | vn -0.590198 -0.455038 0.666788 1643 | vn 0.768894 -0.050585 0.637372 1644 | vn -0.768894 -0.050585 0.637372 1645 | vn 0.779649 0.089960 0.619721 1646 | vn -0.779649 0.089960 0.619721 1647 | vn 0.324141 -0.818765 0.473874 1648 | vn -0.324141 -0.818765 0.473874 1649 | vn 0.385730 -0.662891 0.641707 1650 | vn -0.385730 -0.662891 0.641707 1651 | vn 0.689468 -0.419306 0.590607 1652 | vn -0.689468 -0.419306 0.590607 1653 | vn 0.658751 -0.363449 0.658751 1654 | vn -0.658751 -0.363449 0.658751 1655 | vn 0.546548 0.370702 0.750910 1656 | vn -0.546548 0.370702 0.750910 1657 | vn 0.506447 0.646433 0.570645 1658 | vn -0.506447 0.646433 0.570645 1659 | vn 0.609244 0.516701 0.601532 1660 | vn -0.609244 0.516701 0.601532 1661 | vn -0.044065 0.660979 0.749110 1662 | vn 0.044065 0.660979 0.749110 1663 | vn -0.724614 0.318742 0.611014 1664 | vn 0.724614 0.318742 0.611014 1665 | vn -0.588034 0.555366 0.588034 1666 | vn 0.588034 0.555366 0.588034 1667 | vn 0.536054 -0.390872 0.748241 1668 | vn -0.536054 -0.390872 0.748241 1669 | vn 0.220695 -0.468977 0.855193 1670 | vn -0.220695 -0.468977 0.855193 1671 | vn -0.079395 -0.532117 0.842940 1672 | vn 0.079395 -0.532117 0.842940 1673 | vn -0.082465 -0.657461 0.748963 1674 | vn 0.082465 -0.657461 0.748963 1675 | vn 0.045703 -0.566712 0.822647 1676 | vn -0.045703 -0.566712 0.822647 1677 | vn 0.278428 -0.213040 0.936532 1678 | vn -0.278428 -0.213040 0.936532 1679 | vn 0.381303 -0.182362 0.906285 1680 | vn -0.381303 -0.182362 0.906285 1681 | vn 0.335744 -0.287781 0.896916 1682 | vn -0.335744 -0.287781 0.896916 1683 | vn 0.376240 0.060276 0.924559 1684 | vn -0.376240 0.060276 0.924559 1685 | vn -0.135216 0.267974 0.953890 1686 | vn 0.135216 0.267974 0.953890 1687 | vn 0.396091 -0.432099 0.810186 1688 | vn -0.396091 -0.432099 0.810186 1689 | vn 0.185557 -0.247409 0.950977 1690 | vn -0.185557 -0.247409 0.950977 1691 | vn 0.009907 -0.194836 0.980786 1692 | vn -0.009907 -0.194836 0.980786 1693 | vn 0.072066 -0.696637 0.713795 1694 | vn -0.072066 -0.696637 0.713795 1695 | vn 0.186336 -0.572317 0.798582 1696 | vn -0.186336 -0.572317 0.798582 1697 | vn 0.315685 -0.270843 0.909388 1698 | vn -0.315685 -0.270843 0.909388 1699 | vn 0.306302 -0.026481 0.951566 1700 | vn -0.306302 -0.026481 0.951566 1701 | vn 0.326550 -0.130620 0.936111 1702 | vn -0.326550 -0.130620 0.936111 1703 | vn -0.013675 0.057434 0.998256 1704 | vn 0.013675 0.057434 0.998256 1705 | vn -0.002626 -0.065647 0.997839 1706 | vn 0.002626 -0.065647 0.997839 1707 | vn 0.000000 0.000000 1.000000 1708 | vn 0.817393 -0.574384 -0.044183 1709 | vn -0.817393 -0.574384 -0.044183 1710 | vn 0.949363 0.229685 -0.214372 1711 | vn -0.949363 0.229685 -0.214372 1712 | vn 0.082479 0.907265 -0.412393 1713 | vn -0.082479 0.907265 -0.412393 1714 | vn -0.883624 0.355481 0.304698 1715 | vn 0.883624 0.355481 0.304698 1716 | vn 0.420706 -0.879659 0.221827 1717 | vn -0.420706 -0.879659 0.221827 1718 | vn 0.287348 -0.574696 0.766261 1719 | vn -0.287348 -0.574696 0.766261 1720 | vn -0.654224 0.601886 0.457957 1721 | vn 0.654224 0.601886 0.457957 1722 | vn 0.105227 0.789200 0.605054 1723 | vn -0.105227 0.789200 0.605054 1724 | vn 0.758175 0.291606 0.583212 1725 | vn -0.758175 0.291606 0.583212 1726 | vn 0.388922 -0.713024 0.583383 1727 | vn -0.388922 -0.713024 0.583383 1728 | vn 0.046274 0.231372 0.971764 1729 | vn -0.046274 0.231372 0.971764 1730 | vn 0.033480 -0.401765 0.915131 1731 | vn -0.033480 -0.401765 0.915131 1732 | vn -0.445163 -0.161016 0.880854 1733 | vn 0.445163 -0.161016 0.880854 1734 | vn -0.218218 -0.436436 0.872872 1735 | vn 0.218218 -0.436436 0.872872 1736 | vn 0.434064 -0.129046 0.891591 1737 | vn -0.434064 -0.129046 0.891591 1738 | vn 0.300753 0.050125 0.952384 1739 | vn -0.300753 0.050125 0.952384 1740 | vn 0.812285 0.301039 0.499568 1741 | vn -0.812285 0.301039 0.499568 1742 | vn 0.875310 0.257444 0.409336 1743 | vn -0.875310 0.257444 0.409336 1744 | vn 0.938484 0.160113 0.305959 1745 | vn -0.938484 0.160113 0.305959 1746 | vn 0.223706 -0.653910 0.722743 1747 | vn -0.223706 -0.653910 0.722743 1748 | vn -0.153610 -0.199693 0.967743 1749 | vn 0.153610 -0.199693 0.967743 1750 | vn -0.273275 -0.102478 0.956462 1751 | vn 0.273275 -0.102478 0.956462 1752 | vn -0.097590 0.195180 0.975900 1753 | vn 0.097590 0.195180 0.975900 1754 | vn -0.158235 0.949410 0.271260 1755 | vn 0.158235 0.949410 0.271260 1756 | vn -0.693430 0.708183 0.132784 1757 | vn 0.693430 0.708183 0.132784 1758 | vn -1.000000 0.000000 0.000000 1759 | vn 1.000000 0.000000 0.000000 1760 | vn 0.305141 -0.944953 0.118119 1761 | vn -0.305141 -0.944953 0.118119 1762 | vn 0.029814 -0.298142 0.954056 1763 | vn -0.029814 -0.298142 0.954056 1764 | vn 0.135293 -0.347895 0.927720 1765 | vn -0.135293 -0.347895 0.927720 1766 | vn -0.508542 -0.275460 0.815786 1767 | vn 0.508542 -0.275460 0.815786 1768 | vn -0.384277 -0.041921 0.922265 1769 | vn 0.384277 -0.041921 0.922265 1770 | vn -0.208288 0.037385 0.977353 1771 | vn 0.208288 0.037385 0.977353 1772 | vn -0.572078 -0.476731 0.667424 1773 | vn 0.572078 -0.476731 0.667424 1774 | vn -0.136922 -0.753071 0.643534 1775 | vn 0.136922 -0.753071 0.643534 1776 | vn 0.408843 -0.607070 0.681405 1777 | vn -0.408843 -0.607070 0.681405 1778 | vn 0.574030 -0.413022 0.707038 1779 | vn -0.574030 -0.413022 0.707038 1780 | vn 0.566534 -0.096843 0.818328 1781 | vn -0.566534 -0.096843 0.818328 1782 | vn 0.570336 0.118000 0.812892 1783 | vn -0.570336 0.118000 0.812892 1784 | vn 0.482289 0.562117 0.671879 1785 | vn -0.482289 0.562117 0.671879 1786 | vn 0.260407 0.611390 0.747255 1787 | vn -0.260407 0.611390 0.747255 1788 | vn 0.163956 0.360704 0.918156 1789 | vn -0.163956 0.360704 0.918156 1790 | vn -0.017820 0.249479 0.968216 1791 | vn 0.017820 0.249479 0.968216 1792 | vn 0.327339 -0.416613 0.848105 1793 | vn -0.327339 -0.416613 0.848105 1794 | vn 0.281070 -0.260994 0.923516 1795 | vn -0.281070 -0.260994 0.923516 1796 | vn -0.254193 -0.651368 0.714916 1797 | vn 0.254193 -0.651368 0.714916 1798 | vn -0.026016 -0.845512 0.533323 1799 | vn 0.026016 -0.845512 0.533323 1800 | vn -0.351808 -0.260599 0.899066 1801 | vn 0.351808 -0.260599 0.899066 1802 | vn -0.352308 -0.011010 0.935819 1803 | vn 0.352308 -0.011010 0.935819 1804 | vn -0.131654 0.460788 0.877691 1805 | vn 0.131654 0.460788 0.877691 1806 | vn -0.034219 0.615947 0.787044 1807 | vn 0.034219 0.615947 0.787044 1808 | vn 0.360263 0.583626 0.727731 1809 | vn -0.360263 0.583626 0.727731 1810 | vn 0.498784 0.529958 0.685828 1811 | vn -0.498784 0.529958 0.685828 1812 | vn 0.666667 -0.333333 0.666667 1813 | vn -0.666667 -0.333333 0.666667 1814 | vn 0.816466 -0.073116 0.572745 1815 | vn -0.816466 -0.073116 0.572745 1816 | vn 0.784010 0.116150 0.609785 1817 | vn -0.784010 0.116150 0.609785 1818 | vn -0.530629 0.811076 -0.246147 1819 | vn 0.530629 0.811076 -0.246147 1820 | vn -0.851109 0.369480 -0.372958 1821 | vn 0.851109 0.369480 -0.372958 1822 | vn -0.244586 0.867516 -0.433121 1823 | vn 0.244586 0.867516 -0.433121 1824 | vn 0.592382 0.746506 -0.303006 1825 | vn -0.592382 0.746506 -0.303006 1826 | vn 0.368548 0.875767 -0.311777 1827 | vn -0.368548 0.875767 -0.311777 1828 | vn 0.282140 0.915128 -0.287988 1829 | vn -0.282140 0.915128 -0.287988 1830 | vn 0.856131 0.134021 -0.499077 1831 | vn -0.856131 0.134021 -0.499077 1832 | vn 0.534226 -0.723276 -0.437577 1833 | vn -0.534226 -0.723276 -0.437577 1834 | vn 0.384903 -0.813053 -0.436800 1835 | vn -0.384903 -0.813053 -0.436800 1836 | vn 0.233519 -0.580553 -0.780017 1837 | vn -0.233519 -0.580553 -0.780017 1838 | vn 0.244866 -0.058301 -0.967802 1839 | vn -0.244866 -0.058301 -0.967802 1840 | vn 0.116271 -0.453458 -0.883661 1841 | vn -0.116271 -0.453458 -0.883661 1842 | vn 0.115196 -0.983594 -0.138826 1843 | vn -0.115196 -0.983594 -0.138826 1844 | vn 0.118366 -0.966916 -0.225972 1845 | vn -0.118366 -0.966916 -0.225972 1846 | vn 0.959736 -0.008508 -0.280774 1847 | vn -0.959736 -0.008508 -0.280774 1848 | vn 0.931868 0.162851 -0.324194 1849 | vn -0.931868 0.162851 -0.324194 1850 | vn 0.162606 0.020695 -0.986474 1851 | vn -0.162606 0.020695 -0.986474 1852 | vn -0.018766 -0.217687 -0.975838 1853 | vn 0.018766 -0.217687 -0.975838 1854 | vn 0.753776 -0.292605 -0.588391 1855 | vn -0.753776 -0.292605 -0.588391 1856 | vn 0.919601 0.137940 -0.367840 1857 | vn -0.919601 0.137940 -0.367840 1858 | vn 0.929736 0.312729 -0.194399 1859 | vn -0.929736 0.312729 -0.194399 1860 | vn 0.912018 0.337641 -0.232856 1861 | vn -0.912018 0.337641 -0.232856 1862 | vn 0.940691 0.333793 -0.060690 1863 | vn -0.940691 0.333793 -0.060690 1864 | vn 0.176090 -0.880451 -0.440225 1865 | vn -0.176090 -0.880451 -0.440225 1866 | vn 0.370784 -0.473270 -0.799083 1867 | vn -0.370784 -0.473270 -0.799083 1868 | vn 0.310668 -0.828449 -0.466002 1869 | vn -0.310668 -0.828449 -0.466002 1870 | vn 0.279339 -0.951529 -0.128692 1871 | vn -0.279339 -0.951529 -0.128692 1872 | vn 0.313873 -0.932108 -0.180715 1873 | vn -0.313873 -0.932108 -0.180715 1874 | vn 0.976161 -0.208341 -0.060864 1875 | vn -0.976161 -0.208341 -0.060864 1876 | vn 0.826725 -0.506592 0.244727 1877 | vn -0.826725 -0.506592 0.244727 1878 | vn 0.344853 -0.115800 -0.931486 1879 | vn -0.344853 -0.115800 -0.931486 1880 | vn 0.120261 0.964406 0.235495 1881 | vn -0.120261 0.964406 0.235495 1882 | vn 0.127513 0.974405 -0.185137 1883 | vn -0.127513 0.974405 -0.185137 1884 | vn 0.349226 0.594697 -0.724138 1885 | vn -0.349226 0.594697 -0.724138 1886 | vn 0.415251 0.898100 -0.144855 1887 | vn -0.415251 0.898100 -0.144855 1888 | vn 0.184540 0.703559 0.686258 1889 | vn -0.184540 0.703559 0.686258 1890 | vn 0.605564 0.779377 0.160824 1891 | vn -0.605564 0.779377 0.160824 1892 | vn 0.703301 0.680614 -0.205264 1893 | vn -0.703301 0.680614 -0.205264 1894 | vn 0.667944 0.200725 -0.716631 1895 | vn -0.667944 0.200725 -0.716631 1896 | vn 0.494774 0.434231 -0.752756 1897 | vn -0.494774 0.434231 -0.752756 1898 | vn 0.642323 0.745924 -0.176121 1899 | vn -0.642323 0.745924 -0.176121 1900 | vn 0.718225 0.678788 0.152966 1901 | vn -0.718225 0.678788 0.152966 1902 | vn 0.738828 0.397240 0.544366 1903 | vn -0.738828 0.397240 0.544366 1904 | vn 0.342772 0.926056 -0.157888 1905 | vn -0.342772 0.926056 -0.157888 1906 | vn 0.226983 0.574030 0.786746 1907 | vn -0.226983 0.574030 0.786746 1908 | vn -0.172189 0.104638 -0.979491 1909 | vn 0.172189 0.104638 -0.979491 1910 | vn 0.042460 0.914953 0.401319 1911 | vn -0.042460 0.914953 0.401319 1912 | vn -0.161572 0.184654 0.969432 1913 | vn 0.161572 0.184654 0.969432 1914 | vn 0.979149 0.197308 0.048332 1915 | vn -0.979149 0.197308 0.048332 1916 | vn 0.946968 0.091845 0.307922 1917 | vn -0.946968 0.091845 0.307922 1918 | vn 0.979450 0.190536 -0.066136 1919 | vn -0.979450 0.190536 -0.066136 1920 | vn 0.993775 0.031195 -0.106953 1921 | vn -0.993775 0.031195 -0.106953 1922 | vn 0.711563 -0.700836 0.050060 1923 | vn -0.711563 -0.700836 0.050060 1924 | vn 0.372160 -0.924300 0.084651 1925 | vn -0.372160 -0.924300 0.084651 1926 | vn 0.446529 -0.864434 0.231010 1927 | vn -0.446529 -0.864434 0.231010 1928 | vn 0.606579 -0.757778 0.240489 1929 | vn -0.606579 -0.757778 0.240489 1930 | vn 0.732489 -0.636817 0.240675 1931 | vn -0.732489 -0.636817 0.240675 1932 | vn 0.263732 -0.449896 0.853252 1933 | vn -0.263732 -0.449896 0.853252 1934 | vn 0.556817 -0.318051 -0.767332 1935 | vn -0.556817 -0.318051 -0.767332 1936 | vn 0.500431 -0.280730 -0.818999 1937 | vn -0.500431 -0.280730 -0.818999 1938 | vn 0.318954 -0.849389 -0.420485 1939 | vn -0.318954 -0.849389 -0.420485 1940 | vn 0.719759 -0.635561 -0.279303 1941 | vn -0.719759 -0.635561 -0.279303 1942 | vn 0.497205 -0.440774 -0.747333 1943 | vn -0.497205 -0.440774 -0.747333 1944 | vn 0.350559 0.380715 0.855666 1945 | vn -0.350559 0.380715 0.855666 1946 | vn 0.456551 0.171485 0.873014 1947 | vn -0.456551 0.171485 0.873014 1948 | vn 0.258262 0.105487 0.960298 1949 | vn -0.258262 0.105487 0.960298 1950 | vn 0.245528 -0.080238 0.966063 1951 | vn -0.245528 -0.080238 0.966063 1952 | vn 0.464292 -0.059909 0.883653 1953 | vn -0.464292 -0.059909 0.883653 1954 | vn 0.622462 -0.304514 0.720981 1955 | vn -0.622462 -0.304514 0.720981 1956 | vn 0.450021 0.658959 0.602706 1957 | vn -0.450021 0.658959 0.602706 1958 | vn -0.266664 0.830868 0.488415 1959 | vn 0.266664 0.830868 0.488415 1960 | vn -0.828395 0.229130 0.511137 1961 | vn 0.828395 0.229130 0.511137 1962 | vn -0.525061 -0.356645 0.772732 1963 | vn 0.525061 -0.356645 0.772732 1964 | vn 0.454637 -0.566521 0.687284 1965 | vn -0.454637 -0.566521 0.687284 1966 | vn 0.699601 -0.449743 0.555239 1967 | vn -0.699601 -0.449743 0.555239 1968 | vn 0.722010 -0.682652 -0.112644 1969 | vn -0.722010 -0.682652 -0.112644 1970 | vn -0.191904 0.285975 0.938824 1971 | vn 0.191904 0.285975 0.938824 1972 | vn 0.904808 -0.373365 -0.204748 1973 | vn -0.904808 -0.373365 -0.204748 1974 | vn 0.103418 0.155126 0.982467 1975 | vn -0.103418 0.155126 0.982467 1976 | vn 0.084056 0.931826 0.353037 1977 | vn -0.084056 0.931826 0.353037 1978 | vn 0.644606 -0.088302 0.759399 1979 | vn -0.644606 -0.088302 0.759399 1980 | vn 0.430935 0.474029 0.767848 1981 | vn -0.430935 0.474029 0.767848 1982 | vn 0.803235 -0.484711 0.346222 1983 | vn -0.803235 -0.484711 0.346222 1984 | vn 0.581122 -0.412797 0.701353 1985 | vn -0.581122 -0.412797 0.701353 1986 | vn 0.591001 -0.430482 0.682205 1987 | vn -0.591001 -0.430482 0.682205 1988 | vn 0.981815 -0.180394 -0.059145 1989 | vn -0.981815 -0.180394 -0.059145 1990 | vn 0.910486 -0.396502 -0.117482 1991 | vn -0.910486 -0.396502 -0.117482 1992 | vn 0.997202 -0.018131 -0.072524 1993 | vn -0.997202 -0.018131 -0.072524 1994 | vn 0.731310 -0.654330 0.192450 1995 | vn -0.731310 -0.654330 0.192450 1996 | vn 0.786718 -0.607919 0.107280 1997 | vn -0.786718 -0.607919 0.107280 1998 | vn 0.702247 -0.702247 0.117041 1999 | vn -0.702247 -0.702247 0.117041 2000 | vn 0.184048 0.981587 -0.051124 2001 | vn -0.184048 0.981587 -0.051124 2002 | vn 0.935190 0.330067 0.128359 2003 | vn -0.935190 0.330067 0.128359 2004 | vn 0.663348 -0.746267 0.055279 2005 | vn -0.663348 -0.746267 0.055279 2006 | vn -0.008522 0.997018 0.076694 2007 | vn 0.008522 0.997018 0.076694 2008 | vn 0.623691 -0.706066 0.335381 2009 | vn -0.623691 -0.706066 0.335381 2010 | vn 0.273312 -0.892535 0.358722 2011 | vn -0.273312 -0.892535 0.358722 2012 | vn -0.832769 -0.508041 -0.219977 2013 | vn 0.832769 -0.508041 -0.219977 2014 | vn -0.833909 0.237721 -0.498081 2015 | vn 0.833909 0.237721 -0.498081 2016 | vn -0.565464 0.784726 -0.253882 2017 | vn 0.565464 0.784726 -0.253882 2018 | vn -0.055965 0.996172 0.067158 2019 | vn 0.055965 0.996172 0.067158 2020 | vn 0.144498 0.022230 0.989255 2021 | vn -0.144498 0.022230 0.989255 2022 | vn 0.327452 0.064498 0.942664 2023 | vn -0.327452 0.064498 0.942664 2024 | vn 0.312667 0.023161 0.949580 2025 | vn -0.312667 0.023161 0.949580 2026 | vn 0.170988 0.027358 0.984893 2027 | vn -0.170988 0.027358 0.984893 2028 | vn 0.348658 0.284880 0.892906 2029 | vn -0.348658 0.284880 0.892906 2030 | vn 0.400582 -0.034336 0.915617 2031 | vn -0.400582 -0.034336 0.915617 2032 | vn 0.257194 -0.060280 0.964478 2033 | vn -0.257194 -0.060280 0.964478 2034 | vn 0.063697 -0.010616 0.997913 2035 | vn -0.063697 -0.010616 0.997913 2036 | vn -0.363700 0.703936 0.610078 2037 | vn 0.363700 0.703936 0.610078 2038 | vn 0.629882 0.035457 0.775881 2039 | vn -0.629882 0.035457 0.775881 2040 | vn 0.447210 -0.200243 0.871726 2041 | vn -0.447210 -0.200243 0.871726 2042 | vn 0.507163 -0.214062 0.834843 2043 | vn -0.507163 -0.214062 0.834843 2044 | vn 0.525823 0.261934 0.809259 2045 | vn -0.525823 0.261934 0.809259 2046 | vn 0.297964 0.580246 0.757979 2047 | vn -0.297964 0.580246 0.757979 2048 | vn 0.093038 -0.992403 -0.080501 2049 | vn -0.093038 -0.992403 -0.080501 2050 | vn 0.500580 -0.865653 0.007971 2051 | vn -0.500580 -0.865653 0.007971 2052 | vn 0.928516 -0.249696 0.274791 2053 | vn -0.928516 -0.249696 0.274791 2054 | vn 0.839260 0.542416 -0.037780 2055 | vn -0.839260 0.542416 -0.037780 2056 | vn -0.235535 0.936744 -0.258908 2057 | vn 0.235535 0.936744 -0.258908 2058 | vn -0.449919 0.883769 -0.128548 2059 | vn 0.449919 0.883769 -0.128548 2060 | vn -0.538364 -0.009753 -0.842656 2061 | vn 0.538364 -0.009753 -0.842656 2062 | vn -0.191040 -0.024097 -0.981286 2063 | vn 0.191040 -0.024097 -0.981286 2064 | vn 0.404624 0.026581 -0.914097 2065 | vn -0.404624 0.026581 -0.914097 2066 | vn -0.781868 0.623133 0.019678 2067 | vn 0.781868 0.623133 0.019678 2068 | vn 0.542773 -0.206254 -0.814160 2069 | vn -0.542773 -0.206254 -0.814160 2070 | vn -0.247398 -0.923066 -0.294522 2071 | vn 0.247398 -0.923066 -0.294522 2072 | usemtl None 2073 | s off 2074 | f 47/1/1 1/2/1 3/3/1 45/4/1 2075 | f 4/5/2 2/6/2 48/7/2 46/8/2 2076 | f 45/4/3 3/3/3 5/9/3 43/10/3 2077 | f 6/11/4 4/5/4 46/8/4 44/12/4 2078 | f 3/13/5 9/14/5 7/15/5 5/16/5 2079 | f 8/17/6 10/18/6 4/5/6 6/11/6 2080 | f 1/2/7 11/19/7 9/20/7 3/3/7 2081 | f 10/18/8 12/21/8 2/6/8 4/5/8 2082 | f 11/22/9 13/23/9 15/24/9 9/25/9 2083 | f 16/26/10 14/27/10 12/21/10 10/18/10 2084 | f 9/25/11 15/24/11 17/28/11 7/29/11 2085 | f 18/30/12 16/26/12 10/18/12 8/17/12 2086 | f 15/24/13 21/31/13 19/32/13 17/28/13 2087 | f 20/33/14 22/34/14 16/35/14 18/36/14 2088 | f 13/23/15 23/37/15 21/31/15 15/24/15 2089 | f 22/34/16 24/38/16 14/39/16 16/35/16 2090 | f 23/40/17 25/41/17 27/42/17 21/43/17 2091 | f 28/44/18 26/45/18 24/38/18 22/34/18 2092 | f 21/43/19 27/42/19 29/46/19 19/47/19 2093 | f 30/48/20 28/44/20 22/34/20 20/33/20 2094 | f 27/42/21 33/49/21 31/50/21 29/46/21 2095 | f 32/51/22 34/52/22 28/44/22 30/48/22 2096 | f 25/53/23 35/54/23 33/55/23 27/56/23 2097 | f 34/52/24 36/57/24 26/45/24 28/44/24 2098 | f 35/54/25 37/58/25 39/59/25 33/55/25 2099 | f 40/60/26 38/61/26 36/62/26 34/63/26 2100 | f 33/55/27 39/59/27 41/64/27 31/65/27 2101 | f 42/66/28 40/60/28 34/63/28 32/67/28 2102 | f 39/59/29 45/4/29 43/10/29 41/64/29 2103 | f 44/68/30 46/69/30 40/60/30 42/66/30 2104 | f 37/58/31 47/1/31 45/4/31 39/59/31 2105 | f 46/69/32 48/70/32 38/61/32 40/60/32 2106 | f 47/71/33 37/72/33 51/73/33 49/74/33 2107 | f 52/75/34 38/61/34 48/70/34 50/76/34 2108 | f 37/72/35 35/77/35 53/78/35 51/73/35 2109 | f 54/79/36 36/80/36 38/81/36 52/82/36 2110 | f 35/83/37 25/41/37 55/84/37 53/85/37 2111 | f 56/86/38 26/87/38 36/80/38 54/79/38 2112 | f 25/41/39 23/40/39 57/88/39 55/84/39 2113 | f 58/89/40 24/90/40 26/87/40 56/86/40 2114 | f 23/91/41 13/92/41 59/93/41 57/94/41 2115 | f 60/95/42 14/96/42 24/97/42 58/98/42 2116 | f 13/92/43 11/99/43 63/100/43 59/93/43 2117 | f 64/101/44 12/102/44 14/96/44 60/95/44 2118 | f 11/103/45 1/104/45 65/105/45 63/106/45 2119 | f 66/107/46 2/108/46 12/109/46 64/110/46 2120 | f 1/104/47 47/111/47 49/112/47 65/105/47 2121 | f 50/113/48 48/114/48 2/108/48 66/107/48 2122 | f 61/115/49 65/116/49 49/117/49 2123 | f 50/118/50 66/119/50 62/120/50 2124 | f 63/121/51 65/116/51 61/115/51 2125 | f 62/120/52 66/119/52 64/122/52 2126 | f 61/115/53 59/123/53 63/121/53 2127 | f 64/124/54 60/125/54 62/126/54 2128 | f 61/115/55 57/127/55 59/123/55 2129 | f 60/125/56 58/128/56 62/126/56 2130 | f 61/115/57 55/129/57 57/127/57 2131 | f 58/128/58 56/130/58 62/126/58 2132 | f 61/115/59 53/131/59 55/129/59 2133 | f 56/130/60 54/132/60 62/126/60 2134 | f 61/115/61 51/133/61 53/131/61 2135 | f 54/132/62 52/134/62 62/126/62 2136 | f 61/115/63 49/117/63 51/133/63 2137 | f 52/135/64 50/118/64 62/120/64 2138 | f 89/136/65 174/137/65 176/138/65 91/139/65 2139 | f 176/138/66 175/140/66 90/141/66 91/139/66 2140 | f 87/142/67 172/143/67 174/137/67 89/136/67 2141 | f 175/140/68 173/144/68 88/145/68 90/141/68 2142 | f 85/146/69 170/147/69 172/148/69 87/149/69 2143 | f 173/144/70 171/150/70 86/151/70 88/145/70 2144 | f 83/152/71 168/153/71 170/147/71 85/146/71 2145 | f 171/150/72 169/154/72 84/155/72 86/151/72 2146 | f 81/156/73 166/157/73 168/153/73 83/152/73 2147 | f 169/158/74 167/159/74 82/160/74 84/161/74 2148 | f 79/162/75 92/163/75 146/164/75 164/165/75 2149 | f 147/166/76 93/167/76 80/168/76 165/169/76 2150 | f 92/170/77 94/171/77 148/172/77 146/173/77 2151 | f 149/174/78 95/175/78 93/167/78 147/166/78 2152 | f 94/176/79 96/177/79 150/178/79 148/179/79 2153 | f 151/180/80 97/181/80 95/175/80 149/174/80 2154 | f 96/177/81 98/182/81 152/183/81 150/178/81 2155 | f 153/184/82 99/185/82 97/181/82 151/180/82 2156 | f 98/182/83 100/186/83 154/187/83 152/183/83 2157 | f 155/188/84 101/189/84 99/190/84 153/191/84 2158 | f 100/186/85 102/192/85 156/193/85 154/187/85 2159 | f 157/194/86 103/195/86 101/189/86 155/188/86 2160 | f 102/192/87 104/196/87 158/197/87 156/193/87 2161 | f 159/198/88 105/199/88 103/195/88 157/194/88 2162 | f 104/196/89 106/200/89 160/201/89 158/197/89 2163 | f 161/202/90 107/203/90 105/204/90 159/205/90 2164 | f 106/206/91 108/207/91 162/208/91 160/209/91 2165 | f 163/210/92 109/211/92 107/203/92 161/202/92 2166 | f 108/207/93 67/212/93 68/213/93 162/208/93 2167 | f 68/214/94 67/215/94 109/211/94 163/210/94 2168 | f 110/216/95 128/217/95 160/201/95 162/218/95 2169 | f 161/219/96 129/220/96 111/221/96 163/222/96 2170 | f 128/217/97 179/223/97 158/197/97 160/201/97 2171 | f 159/224/98 180/225/98 129/220/98 161/219/98 2172 | f 126/226/99 156/227/99 158/228/99 179/229/99 2173 | f 159/224/100 157/230/100 127/231/100 180/225/100 2174 | f 124/232/101 154/233/101 156/227/101 126/226/101 2175 | f 157/230/102 155/234/102 125/235/102 127/231/102 2176 | f 122/236/103 152/237/103 154/233/103 124/232/103 2177 | f 155/234/104 153/184/104 123/238/104 125/235/104 2178 | f 120/239/105 150/178/105 152/183/105 122/240/105 2179 | f 153/184/106 151/180/106 121/241/106 123/238/106 2180 | f 118/242/107 148/179/107 150/178/107 120/239/107 2181 | f 151/180/108 149/174/108 119/243/108 121/241/108 2182 | f 116/244/109 146/245/109 148/179/109 118/242/109 2183 | f 149/174/110 147/166/110 117/246/110 119/243/110 2184 | f 114/247/111 164/248/111 146/245/111 116/244/111 2185 | f 147/249/112 165/250/112 115/251/112 117/252/112 2186 | f 114/247/113 181/253/113 177/254/113 164/248/113 2187 | f 177/254/114 182/255/114 115/251/114 165/250/114 2188 | f 110/216/115 162/218/115 68/256/115 112/257/115 2189 | f 68/258/116 163/222/116 111/221/116 113/259/116 2190 | f 112/257/117 68/256/117 178/260/117 183/261/117 2191 | f 178/262/118 68/258/118 113/259/118 184/263/118 2192 | f 177/254/119 181/253/119 183/261/119 178/260/119 2193 | f 184/264/120 182/255/120 177/254/120 178/260/120 2194 | f 135/265/121 137/266/121 176/138/121 174/137/121 2195 | f 176/138/122 137/266/122 136/267/122 175/140/122 2196 | f 133/268/123 135/265/123 174/137/123 172/143/123 2197 | f 175/140/124 136/267/124 134/269/124 173/144/124 2198 | f 131/270/125 133/271/125 172/148/125 170/147/125 2199 | f 173/144/126 134/269/126 132/272/126 171/150/126 2200 | f 166/157/127 187/273/127 185/274/127 168/153/127 2201 | f 186/275/128 188/276/128 167/277/128 169/278/128 2202 | f 131/270/129 170/147/129 168/153/129 185/274/129 2203 | f 169/154/130 171/150/130 132/272/130 186/279/130 2204 | f 144/280/131 190/281/131 189/282/131 187/273/131 2205 | f 189/282/132 190/281/132 145/283/132 188/276/132 2206 | f 185/274/133 187/273/133 189/282/133 69/284/133 2207 | f 189/282/134 188/276/134 186/275/134 69/284/134 2208 | f 130/285/135 131/270/135 185/274/135 69/284/135 2209 | f 186/275/135 132/286/135 130/285/135 69/284/135 2210 | f 142/287/136 193/288/136 191/289/136 144/290/136 2211 | f 192/291/137 194/292/137 143/293/137 145/294/137 2212 | f 140/295/138 195/296/138 193/297/138 142/298/138 2213 | f 194/299/139 196/300/139 141/301/139 143/302/139 2214 | f 139/303/140 197/304/140 195/296/140 140/295/140 2215 | f 196/305/141 198/306/141 139/307/141 141/308/141 2216 | f 138/309/142 71/310/142 197/311/142 139/312/142 2217 | f 198/313/143 71/314/143 138/315/143 139/316/143 2218 | f 190/317/144 144/290/144 191/289/144 70/318/144 2219 | f 192/291/145 145/294/145 190/319/145 70/320/145 2220 | f 70/320/146 191/321/146 206/322/146 208/323/146 2221 | f 207/324/147 192/291/147 70/320/147 208/323/147 2222 | f 71/310/148 199/325/148 200/326/148 197/311/148 2223 | f 201/327/149 199/328/149 71/314/149 198/313/149 2224 | f 197/329/150 200/330/150 202/331/150 195/332/150 2225 | f 203/333/151 201/334/151 198/335/151 196/300/151 2226 | f 195/332/152 202/331/152 204/336/152 193/337/152 2227 | f 205/338/153 203/333/153 196/300/153 194/299/153 2228 | f 193/288/154 204/339/154 206/340/154 191/289/154 2229 | f 207/324/155 205/341/155 194/292/155 192/291/155 2230 | f 199/342/156 204/336/156 202/331/156 200/330/156 2231 | f 203/343/157 205/344/157 199/328/157 201/327/157 2232 | f 199/345/158 208/323/158 206/322/158 204/346/158 2233 | f 207/324/159 208/323/159 199/345/159 205/341/159 2234 | f 139/347/160 140/348/160 164/349/160 177/350/160 2235 | f 165/250/161 141/351/161 139/352/161 177/254/161 2236 | f 140/348/162 142/353/162 211/354/162 164/349/162 2237 | f 212/355/163 143/356/163 141/351/163 165/250/163 2238 | f 142/357/164 144/280/164 213/358/164 211/359/164 2239 | f 214/360/165 145/294/165 143/293/165 212/361/165 2240 | f 144/280/166 187/273/166 166/157/166 213/358/166 2241 | f 167/277/167 188/276/167 145/283/167 214/362/167 2242 | f 81/156/168 209/363/168 213/358/168 166/157/168 2243 | f 214/364/169 210/365/169 82/160/169 167/159/169 2244 | f 209/363/170 215/366/170 211/359/170 213/358/170 2245 | f 212/367/171 216/368/171 210/365/171 214/364/171 2246 | f 79/369/172 164/370/172 211/359/172 215/366/172 2247 | f 212/367/173 165/371/173 80/372/173 216/368/173 2248 | f 131/373/174 130/374/174 72/375/174 222/376/174 2249 | f 72/375/175 130/374/175 132/272/175 223/377/175 2250 | f 133/268/176 131/373/176 222/376/176 220/378/176 2251 | f 223/379/177 132/380/177 134/381/177 221/382/177 2252 | f 135/265/178 133/268/178 220/378/178 218/383/178 2253 | f 221/382/179 134/381/179 136/384/179 219/385/179 2254 | f 137/386/180 135/387/180 218/388/180 217/389/180 2255 | f 219/385/181 136/384/181 137/386/181 217/389/181 2256 | f 217/390/182 218/391/182 229/392/182 231/393/182 2257 | f 230/394/183 219/395/183 217/396/183 231/397/183 2258 | f 218/391/184 220/398/184 227/399/184 229/392/184 2259 | f 228/400/185 221/401/185 219/395/185 230/394/185 2260 | f 220/398/186 222/402/186 225/403/186 227/399/186 2261 | f 226/404/187 223/405/187 221/406/187 228/407/187 2262 | f 222/408/188 72/409/188 224/410/188 225/411/188 2263 | f 224/412/189 72/375/189 223/377/189 226/413/189 2264 | f 224/414/190 231/415/190 229/416/190 225/417/190 2265 | f 230/418/191 231/415/191 224/414/191 226/419/191 2266 | f 225/417/192 229/416/192 227/420/192 2267 | f 228/421/193 230/422/193 226/423/193 2268 | f 183/424/194 181/425/194 234/426/194 232/427/194 2269 | f 235/428/195 182/255/195 184/264/195 233/429/195 2270 | f 112/430/196 183/424/196 232/427/196 254/431/196 2271 | f 233/429/197 184/264/197 113/432/197 255/433/197 2272 | f 110/216/198 112/257/198 254/434/198 256/435/198 2273 | f 255/433/199 113/432/199 111/436/199 257/437/199 2274 | f 181/425/200 114/438/200 252/439/200 234/426/200 2275 | f 253/440/201 115/251/201 182/255/201 235/428/201 2276 | f 114/438/202 116/441/202 250/442/202 252/439/202 2277 | f 251/443/203 117/246/203 115/444/203 253/445/203 2278 | f 116/244/204 118/242/204 248/446/204 250/447/204 2279 | f 249/448/205 119/243/205 117/246/205 251/443/205 2280 | f 118/242/206 120/239/206 246/449/206 248/446/206 2281 | f 247/450/207 121/241/207 119/243/207 249/448/207 2282 | f 120/239/208 122/240/208 244/451/208 246/449/208 2283 | f 245/452/209 123/238/209 121/241/209 247/450/209 2284 | f 122/240/210 124/453/210 242/454/210 244/451/210 2285 | f 243/455/211 125/456/211 123/457/211 245/458/211 2286 | f 124/453/212 126/459/212 240/460/212 242/454/212 2287 | f 241/461/213 127/462/213 125/456/213 243/455/213 2288 | f 126/459/214 179/223/214 236/463/214 240/460/214 2289 | f 237/464/215 180/465/215 127/462/215 241/461/215 2290 | f 179/223/216 128/217/216 238/466/216 236/463/216 2291 | f 239/467/217 129/468/217 180/469/217 237/470/217 2292 | f 128/217/218 110/216/218 256/435/218 238/466/218 2293 | f 257/437/219 111/436/219 129/468/219 239/467/219 2294 | f 238/466/220 256/435/220 258/471/220 276/472/220 2295 | f 259/473/221 257/474/221 239/475/221 277/476/221 2296 | f 236/463/222 238/466/222 276/472/222 278/477/222 2297 | f 277/476/223 239/475/223 237/478/223 279/479/223 2298 | f 240/480/224 236/481/224 278/482/224 274/483/224 2299 | f 279/479/225 237/478/225 241/484/225 275/485/225 2300 | f 242/486/226 240/480/226 274/483/226 272/487/226 2301 | f 275/485/227 241/484/227 243/488/227 273/489/227 2302 | f 244/490/228 242/486/228 272/487/228 270/491/228 2303 | f 273/492/229 243/493/229 245/494/229 271/495/229 2304 | f 246/496/230 244/490/230 270/491/230 268/497/230 2305 | f 271/495/231 245/494/231 247/498/231 269/499/231 2306 | f 248/446/232 246/449/232 268/500/232 266/501/232 2307 | f 269/499/233 247/498/233 249/502/233 267/503/233 2308 | f 250/447/234 248/446/234 266/501/234 264/504/234 2309 | f 267/503/235 249/502/235 251/505/235 265/506/235 2310 | f 252/507/236 250/447/236 264/504/236 262/508/236 2311 | f 265/509/237 251/510/237 253/511/237 263/512/237 2312 | f 234/513/238 252/507/238 262/508/238 280/514/238 2313 | f 263/512/239 253/511/239 235/515/239 281/516/239 2314 | f 256/435/240 254/434/240 260/517/240 258/471/240 2315 | f 261/518/241 255/519/241 257/474/241 259/473/241 2316 | f 254/434/242 232/520/242 282/521/242 260/517/242 2317 | f 283/522/243 233/523/243 255/519/243 261/518/243 2318 | f 232/520/244 234/513/244 280/514/244 282/521/244 2319 | f 281/516/245 235/515/245 233/524/245 283/525/245 2320 | f 67/212/246 108/207/246 284/526/246 73/527/246 2321 | f 285/528/247 109/529/247 67/530/247 73/531/247 2322 | f 108/207/248 106/206/248 286/532/248 284/526/248 2323 | f 287/533/249 107/534/249 109/529/249 285/528/249 2324 | f 106/535/250 104/536/250 288/537/250 286/538/250 2325 | f 289/539/251 105/540/251 107/534/251 287/533/251 2326 | f 104/536/252 102/541/252 290/542/252 288/537/252 2327 | f 291/543/253 103/195/253 105/199/253 289/544/253 2328 | f 102/541/254 100/545/254 292/546/254 290/542/254 2329 | f 293/547/255 101/189/255 103/195/255 291/543/255 2330 | f 100/545/256 98/548/256 294/549/256 292/546/256 2331 | f 295/550/257 99/190/257 101/189/257 293/547/257 2332 | f 98/548/258 96/551/258 296/552/258 294/549/258 2333 | f 297/553/259 97/554/259 99/555/259 295/556/259 2334 | f 96/557/260 94/558/260 298/559/260 296/560/260 2335 | f 299/561/261 95/562/261 97/554/261 297/553/261 2336 | f 94/558/262 92/163/262 300/563/262 298/559/262 2337 | f 301/564/263 93/565/263 95/562/263 299/561/263 2338 | f 308/566/264 309/567/264 328/568/264 338/569/264 2339 | f 329/570/265 309/571/265 308/572/265 339/573/265 2340 | f 307/574/266 308/572/266 338/575/266 336/576/266 2341 | f 339/573/267 308/572/267 307/574/267 337/577/267 2342 | f 306/578/268 307/574/268 336/576/268 340/579/268 2343 | f 337/577/269 307/574/269 306/578/269 341/580/269 2344 | f 89/581/270 91/582/270 306/583/270 340/584/270 2345 | f 306/585/271 91/139/271 90/141/271 341/586/271 2346 | f 87/587/272 89/581/272 340/584/272 334/588/272 2347 | f 341/589/273 90/590/273 88/591/273 335/592/273 2348 | f 85/593/274 87/587/274 334/588/274 330/594/274 2349 | f 335/595/275 88/596/275 86/597/275 331/598/275 2350 | f 83/599/276 85/600/276 330/601/276 332/602/276 2351 | f 331/603/277 86/604/277 84/161/277 333/605/277 2352 | f 330/606/278 336/576/278 338/575/278 332/607/278 2353 | f 339/573/279 337/577/279 331/598/279 333/608/279 2354 | f 330/606/280 334/609/280 340/579/280 336/576/280 2355 | f 341/580/281 335/595/281 331/598/281 337/577/281 2356 | f 326/610/282 332/611/282 338/569/282 328/568/282 2357 | f 339/573/283 333/608/283 327/612/283 329/570/283 2358 | f 81/613/284 83/599/284 332/602/284 326/614/284 2359 | f 333/605/285 84/161/285 82/160/285 327/615/285 2360 | f 209/616/286 342/617/286 344/618/286 215/619/286 2361 | f 345/620/287 343/621/287 210/365/287 216/368/287 2362 | f 81/613/288 326/614/288 342/617/288 209/616/288 2363 | f 343/621/289 327/615/289 82/160/289 210/365/289 2364 | f 79/622/290 215/619/290 344/618/290 346/623/290 2365 | f 345/620/291 216/368/291 80/372/291 347/624/291 2366 | f 79/162/292 346/625/292 300/563/292 92/163/292 2367 | f 301/564/293 347/626/293 80/627/293 93/565/293 2368 | f 77/628/294 324/629/294 352/630/294 304/631/294 2369 | f 353/632/295 325/633/295 77/634/295 304/635/295 2370 | f 304/631/296 352/630/296 350/636/296 78/637/296 2371 | f 351/638/297 353/632/297 304/635/297 78/639/297 2372 | f 78/637/298 350/636/298 348/640/298 305/641/298 2373 | f 349/642/299 351/643/299 78/644/299 305/645/299 2374 | f 305/641/300 348/640/300 328/568/300 309/567/300 2375 | f 329/646/301 349/642/301 305/645/301 309/647/301 2376 | f 326/610/302 328/568/302 348/640/302 342/648/302 2377 | f 349/649/303 329/650/303 327/615/303 343/621/303 2378 | f 296/560/304 298/559/304 318/651/304 310/652/304 2379 | f 319/653/305 299/654/305 297/655/305 311/656/305 2380 | f 76/657/306 316/658/306 324/659/306 77/634/306 2381 | f 325/633/307 317/660/307 76/657/307 77/634/307 2382 | f 302/661/308 358/662/308 356/663/308 303/664/308 2383 | f 357/665/309 359/666/309 302/667/309 303/668/309 2384 | f 303/664/310 356/663/310 354/669/310 75/670/310 2385 | f 355/671/311 357/672/311 303/664/311 75/670/311 2386 | f 75/670/312 354/669/312 316/673/312 76/674/312 2387 | f 317/660/313 355/675/313 75/676/313 76/657/313 2388 | f 292/546/314 294/549/314 362/677/314 364/678/314 2389 | f 363/679/315 295/550/315 293/547/315 365/680/315 2390 | f 364/681/316 362/682/316 368/683/316 366/684/316 2391 | f 369/685/317 363/679/317 365/680/317 367/686/317 2392 | f 366/687/318 368/688/318 370/689/318 372/690/318 2393 | f 371/691/319 369/685/319 367/686/319 373/692/319 2394 | f 372/690/320 370/689/320 376/693/320 374/694/320 2395 | f 377/695/321 371/691/321 373/692/321 375/696/321 2396 | f 314/697/322 378/698/322 374/694/322 376/693/322 2397 | f 375/699/323 379/700/323 315/701/323 377/702/323 2398 | f 316/673/324 354/669/324 374/694/324 378/698/324 2399 | f 375/699/325 355/675/325 317/660/325 379/700/325 2400 | f 354/669/326 356/663/326 372/690/326 374/694/326 2401 | f 373/692/327 357/665/327 355/703/327 375/696/327 2402 | f 356/663/328 358/662/328 366/687/328 372/690/328 2403 | f 367/686/329 359/666/329 357/665/329 373/692/329 2404 | f 358/704/330 360/705/330 364/681/330 366/684/330 2405 | f 365/680/331 361/706/331 359/666/331 367/686/331 2406 | f 290/542/332 292/546/332 364/678/332 360/707/332 2407 | f 365/680/333 293/547/333 291/543/333 361/706/333 2408 | f 74/708/334 360/705/334 358/704/334 302/709/334 2409 | f 359/710/335 361/711/335 74/708/335 302/709/335 2410 | f 284/712/336 286/713/336 288/714/336 290/715/336 2411 | f 289/716/337 287/717/337 285/718/337 291/719/337 2412 | f 284/720/338 290/721/338 360/722/338 74/723/338 2413 | f 361/706/339 291/543/339 285/724/339 74/725/339 2414 | f 73/726/340 284/727/340 74/728/340 2415 | f 74/728/341 285/729/341 73/726/341 2416 | f 294/549/342 296/552/342 310/730/342 362/677/342 2417 | f 311/731/343 297/732/343 295/550/343 363/679/343 2418 | f 310/733/344 312/734/344 368/683/344 362/682/344 2419 | f 369/685/345 313/735/345 311/731/345 363/679/345 2420 | f 312/736/346 382/737/346 370/689/346 368/688/346 2421 | f 371/691/347 383/738/347 313/735/347 369/685/347 2422 | f 314/739/348 376/740/348 370/741/348 382/742/348 2423 | f 371/691/349 377/695/349 315/743/349 383/738/349 2424 | f 348/640/350 350/636/350 386/744/350 384/745/350 2425 | f 387/746/351 351/643/351 349/642/351 385/747/351 2426 | f 318/651/352 384/745/352 386/744/352 320/748/352 2427 | f 387/746/353 385/747/353 319/653/353 321/749/353 2428 | f 298/559/354 300/563/354 384/745/354 318/651/354 2429 | f 385/747/355 301/750/355 299/654/355 319/653/355 2430 | f 300/563/356 344/751/356 342/648/356 384/745/356 2431 | f 343/752/357 345/753/357 301/750/357 385/747/357 2432 | f 342/648/358 348/640/358 384/745/358 2433 | f 385/747/359 349/642/359 343/752/359 2434 | f 300/754/360 346/755/360 344/756/360 2435 | f 345/753/361 347/757/361 301/750/361 2436 | f 314/758/362 322/759/362 380/760/362 378/761/362 2437 | f 381/762/363 323/763/363 315/701/363 379/700/363 2438 | f 316/764/364 378/761/364 380/760/364 324/629/364 2439 | f 381/762/365 379/700/365 317/660/365 325/633/365 2440 | f 320/748/366 386/744/366 380/760/366 322/759/366 2441 | f 381/762/367 387/765/367 321/766/367 323/763/367 2442 | f 350/636/368 352/630/368 380/760/368 386/744/368 2443 | f 381/762/369 353/632/369 351/638/369 387/765/369 2444 | f 324/629/370 380/760/370 352/630/370 2445 | f 353/632/371 381/762/371 325/633/371 2446 | f 400/767/372 388/768/372 414/769/372 402/770/372 2447 | f 415/771/373 389/772/373 401/773/373 403/774/373 2448 | f 400/767/374 402/770/374 404/775/374 398/776/374 2449 | f 405/777/375 403/778/375 401/779/375 399/780/375 2450 | f 398/776/376 404/775/376 406/781/376 396/782/376 2451 | f 407/783/377 405/784/377 399/785/377 397/786/377 2452 | f 396/782/378 406/781/378 408/787/378 394/788/378 2453 | f 409/789/379 407/783/379 397/786/379 395/790/379 2454 | f 394/788/380 408/787/380 410/791/380 392/792/380 2455 | f 411/793/381 409/794/381 395/795/381 393/796/381 2456 | f 392/792/382 410/791/382 412/797/382 390/798/382 2457 | f 413/799/383 411/793/383 393/796/383 391/800/383 2458 | f 410/791/384 420/801/384 418/802/384 412/797/384 2459 | f 419/803/385 421/804/385 411/805/385 413/806/385 2460 | f 408/807/386 422/808/386 420/809/386 410/810/386 2461 | f 421/811/387 423/812/387 409/789/387 411/813/387 2462 | f 406/814/388 424/815/388 422/808/388 408/807/388 2463 | f 423/812/389 425/816/389 407/783/389 409/789/389 2464 | f 404/817/390 426/818/390 424/819/390 406/820/390 2465 | f 425/816/391 427/821/391 405/784/391 407/783/391 2466 | f 402/770/392 428/822/392 426/823/392 404/775/392 2467 | f 427/824/393 429/825/393 403/826/393 405/827/393 2468 | f 402/770/394 414/769/394 416/828/394 428/822/394 2469 | f 417/829/395 415/830/395 403/826/395 429/825/395 2470 | f 318/651/396 320/748/396 444/831/396 442/832/396 2471 | f 445/833/397 321/749/397 319/653/397 443/834/397 2472 | f 320/835/398 390/798/398 412/797/398 444/836/398 2473 | f 413/837/399 391/838/399 321/839/399 445/840/399 2474 | f 310/652/400 318/651/400 442/832/400 312/841/400 2475 | f 443/842/401 319/843/401 311/844/401 313/845/401 2476 | f 382/846/402 430/847/402 414/769/402 388/768/402 2477 | f 415/771/403 431/848/403 383/849/403 389/772/403 2478 | f 412/850/404 418/851/404 440/852/404 444/853/404 2479 | f 441/854/405 419/803/405 413/806/405 445/855/405 2480 | f 438/856/406 446/857/406 444/858/406 440/859/406 2481 | f 445/860/407 447/861/407 439/862/407 441/863/407 2482 | f 434/864/408 446/857/408 438/856/408 436/865/408 2483 | f 439/866/409 447/867/409 435/868/409 437/869/409 2484 | f 432/870/410 448/871/410 446/872/410 434/873/410 2485 | f 447/874/411 449/875/411 433/876/411 435/877/411 2486 | f 430/847/412 448/878/412 432/879/412 450/880/412 2487 | f 433/876/413 449/875/413 431/881/413 451/882/413 2488 | f 414/769/414 430/847/414 450/880/414 416/828/414 2489 | f 451/882/415 431/881/415 415/830/415 417/829/415 2490 | f 312/841/416 448/871/416 430/883/416 382/884/416 2491 | f 431/885/417 449/886/417 313/735/417 383/738/417 2492 | f 312/841/418 442/832/418 446/872/418 448/871/418 2493 | f 447/874/419 443/887/419 313/888/419 449/875/419 2494 | f 442/832/420 444/831/420 446/872/420 2495 | f 447/889/421 445/890/421 443/592/421 2496 | f 416/891/422 450/892/422 452/893/422 476/894/422 2497 | f 453/895/423 451/882/423 417/829/423 477/896/423 2498 | f 450/892/424 432/870/424 462/897/424 452/893/424 2499 | f 463/898/425 433/876/425 451/882/425 453/895/425 2500 | f 432/870/426 434/873/426 460/899/426 462/897/426 2501 | f 461/900/427 435/877/427 433/876/427 463/898/427 2502 | f 434/901/428 436/902/428 458/903/428 460/904/428 2503 | f 459/905/429 437/869/429 435/868/429 461/906/429 2504 | f 436/865/430 438/856/430 456/907/430 458/908/430 2505 | f 457/909/431 439/866/431 437/869/431 459/905/431 2506 | f 438/910/432 440/911/432 454/912/432 456/913/432 2507 | f 455/914/433 441/863/433 439/862/433 457/915/433 2508 | f 440/852/434 418/851/434 474/916/434 454/917/434 2509 | f 475/918/435 419/919/435 441/920/435 455/921/435 2510 | f 428/922/436 416/891/436 476/894/436 464/923/436 2511 | f 477/896/437 417/829/437 429/825/437 465/924/437 2512 | f 426/925/438 428/922/438 464/923/438 466/926/438 2513 | f 465/924/439 429/825/439 427/824/439 467/927/439 2514 | f 424/928/440 426/929/440 466/930/440 468/931/440 2515 | f 467/932/441 427/933/441 425/934/441 469/935/441 2516 | f 422/936/442 424/928/442 468/931/442 470/937/442 2517 | f 469/938/443 425/939/443 423/940/443 471/941/443 2518 | f 420/809/444 422/808/444 470/942/444 472/943/444 2519 | f 471/941/445 423/940/445 421/944/445 473/945/445 2520 | f 418/851/446 420/946/446 472/947/446 474/916/446 2521 | f 473/945/447 421/944/447 419/919/447 475/918/447 2522 | f 458/908/448 456/907/448 480/948/448 478/949/448 2523 | f 481/950/449 457/951/449 459/952/449 479/953/449 2524 | f 478/949/450 480/948/450 482/954/450 484/955/450 2525 | f 483/956/451 481/950/451 479/953/451 485/957/451 2526 | f 484/955/452 482/954/452 488/958/452 486/959/452 2527 | f 489/960/453 483/956/453 485/957/453 487/961/453 2528 | f 486/959/454 488/958/454 490/962/454 492/963/454 2529 | f 491/964/455 489/960/455 487/961/455 493/965/455 2530 | f 464/966/456 476/967/456 486/959/456 492/963/456 2531 | f 487/961/457 477/968/457 465/969/457 493/965/457 2532 | f 452/970/458 484/955/458 486/959/458 476/967/458 2533 | f 487/971/459 485/972/459 453/895/459 477/896/459 2534 | f 452/970/460 462/973/460 478/949/460 484/955/460 2535 | f 479/953/461 463/974/461 453/975/461 485/957/461 2536 | f 458/908/462 478/949/462 462/973/462 460/976/462 2537 | f 463/974/463 479/953/463 459/952/463 461/977/463 2538 | f 454/978/464 474/979/464 480/980/464 456/981/464 2539 | f 481/950/465 475/982/465 455/983/465 457/951/465 2540 | f 472/984/466 482/954/466 480/948/466 474/985/466 2541 | f 481/986/467 483/987/467 473/988/467 475/989/467 2542 | f 470/990/468 488/958/468 482/954/468 472/984/468 2543 | f 483/987/469 489/991/469 471/992/469 473/988/469 2544 | f 468/993/470 490/962/470 488/958/470 470/990/470 2545 | f 489/991/471 491/994/471 469/995/471 471/992/471 2546 | f 466/996/472 492/963/472 490/962/472 468/993/472 2547 | f 491/997/473 493/998/473 467/999/473 469/1000/473 2548 | f 464/966/474 492/963/474 466/996/474 2549 | f 467/999/475 493/998/475 465/839/475 2550 | f 392/1001/476 390/1002/476 504/1003/476 502/1004/476 2551 | f 505/1005/477 391/800/477 393/796/477 503/1006/477 2552 | f 394/1007/478 392/1001/478 502/1004/478 500/1008/478 2553 | f 503/1006/479 393/796/479 395/795/479 501/1009/479 2554 | f 396/1010/480 394/1007/480 500/1008/480 498/1011/480 2555 | f 501/1009/481 395/795/481 397/1012/481 499/1013/481 2556 | f 398/1014/482 396/1015/482 498/1016/482 496/1017/482 2557 | f 499/1018/483 397/1019/483 399/1020/483 497/1021/483 2558 | f 400/1022/484 398/1014/484 496/1017/484 494/1023/484 2559 | f 497/1024/485 399/1025/485 401/1026/485 495/1027/485 2560 | f 388/1028/486 400/1029/486 494/1030/486 506/1031/486 2561 | f 495/1027/487 401/1026/487 389/1032/487 507/1033/487 2562 | f 494/1034/488 502/1035/488 504/1036/488 506/1037/488 2563 | f 505/1038/489 503/1039/489 495/1027/489 507/1033/489 2564 | f 494/1034/490 496/1040/490 500/1041/490 502/1035/490 2565 | f 501/1042/491 497/1043/491 495/1044/491 503/1045/491 2566 | f 496/1017/492 498/1016/492 500/405/492 2567 | f 501/1042/493 499/1046/493 497/1043/493 2568 | f 314/935/494 382/1047/494 388/1028/494 506/1031/494 2569 | f 389/1032/495 383/1048/495 315/1049/495 507/1033/495 2570 | f 314/758/496 506/1050/496 504/1051/496 322/759/496 2571 | f 505/1052/497 507/1053/497 315/701/497 323/763/497 2572 | f 320/1054/498 322/1055/498 504/1056/498 390/1057/498 2573 | f 505/1058/499 323/1059/499 321/1060/499 391/1061/499 2574 | -------------------------------------------------------------------------------- /assets/sphere.obj: -------------------------------------------------------------------------------- 1 | # Blender v2.70 (sub 2) OBJ File: '' 2 | # www.blender.org 3 | mtllib icosphere.mtl 4 | o Icosphere 5 | v 0.000000 -1.000000 0.000000 6 | v 0.723607 -0.447220 0.525725 7 | v -0.276388 -0.447220 0.850649 8 | v -0.894426 -0.447216 0.000000 9 | v -0.276388 -0.447220 -0.850649 10 | v 0.723607 -0.447220 -0.525725 11 | v 0.276388 0.447220 0.850649 12 | v -0.723607 0.447220 0.525725 13 | v -0.723607 0.447220 -0.525725 14 | v 0.276388 0.447220 -0.850649 15 | v 0.894426 0.447216 0.000000 16 | v 0.000000 1.000000 0.000000 17 | v -0.162456 -0.850654 0.499995 18 | v 0.425323 -0.850654 0.309011 19 | v 0.262869 -0.525738 0.809012 20 | v 0.850648 -0.525736 0.000000 21 | v 0.425323 -0.850654 -0.309011 22 | v -0.525730 -0.850652 0.000000 23 | v -0.688189 -0.525736 0.499997 24 | v -0.162456 -0.850654 -0.499995 25 | v -0.688189 -0.525736 -0.499997 26 | v 0.262869 -0.525738 -0.809012 27 | v 0.951058 0.000000 0.309013 28 | v 0.951058 0.000000 -0.309013 29 | v 0.000000 0.000000 1.000000 30 | v 0.587786 0.000000 0.809017 31 | v -0.951058 0.000000 0.309013 32 | v -0.587786 0.000000 0.809017 33 | v -0.587786 0.000000 -0.809017 34 | v -0.951058 0.000000 -0.309013 35 | v 0.587786 0.000000 -0.809017 36 | v 0.000000 0.000000 -1.000000 37 | v 0.688189 0.525736 0.499997 38 | v -0.262869 0.525738 0.809012 39 | v -0.850648 0.525736 0.000000 40 | v -0.262869 0.525738 -0.809012 41 | v 0.688189 0.525736 -0.499997 42 | v 0.162456 0.850654 0.499995 43 | v 0.525730 0.850652 0.000000 44 | v -0.425323 0.850654 0.309011 45 | v -0.425323 0.850654 -0.309011 46 | v 0.162456 0.850654 -0.499995 47 | vt 0.993094 0.044633 48 | vt 1.182837 0.188349 49 | vt 1.012164 0.220451 50 | vt 0.205712 0.361374 51 | vt 0.182837 0.188349 52 | vt 0.302829 0.305648 53 | vt 0.844769 0.199633 54 | vt 0.647021 0.147283 55 | vt 1.394514 0.138073 56 | vt 0.266057 0.493541 57 | vt 0.014969 0.396603 58 | vt 0.107934 0.356550 59 | vt 0.066907 0.539971 60 | vt 0.825352 0.373391 61 | vt 0.921647 0.363687 62 | vt 0.865495 0.531146 63 | vt 0.625323 0.321356 64 | vt 0.730263 0.318231 65 | vt 0.666924 0.479338 66 | vt 0.410045 0.313270 67 | vt 0.518733 0.279677 68 | vt 0.466020 0.456003 69 | vt 0.166924 0.520662 70 | vt 1.014969 0.396603 71 | vt 1.066907 0.539971 72 | vt 0.966020 0.543997 73 | vt 0.766057 0.506459 74 | vt 0.566907 0.460029 75 | vt 0.365495 0.468854 76 | vt 0.125323 0.678644 77 | vt 0.230263 0.681769 78 | vt 0.147021 0.852717 79 | vt 0.910045 0.686730 80 | vt 1.018733 0.720323 81 | vt 0.894514 0.861927 82 | vt 0.705712 0.638626 83 | vt 0.802829 0.694352 84 | vt 0.682837 0.811651 85 | vt 0.514969 0.603397 86 | vt 0.607934 0.643450 87 | vt 0.512164 0.779549 88 | vt 0.325352 0.626609 89 | vt 0.421647 0.636313 90 | vt 0.344769 0.800367 91 | vt 0.012164 0.220451 92 | vt 0.394514 0.138073 93 | vt 0.018733 0.720323 94 | vt 0.493094 0.955367 95 | vt 1.147021 0.852717 96 | vn 0.000000 -1.000000 0.000000 97 | vn 0.425306 -0.850642 0.309000 98 | vn -0.162450 -0.850642 0.499985 99 | vn 0.723594 -0.447188 0.525712 100 | vn 0.850642 -0.525712 0.000000 101 | vn -0.525712 -0.850642 0.000000 102 | vn -0.162450 -0.850642 -0.499985 103 | vn 0.425306 -0.850642 -0.309000 104 | vn 0.951048 0.000000 0.309000 105 | vn -0.276376 -0.447218 0.850642 106 | vn 0.262856 -0.525712 0.808985 107 | vn 0.000000 0.000000 1.000000 108 | vn -0.894406 -0.447188 0.000000 109 | vn -0.688162 -0.525712 0.499985 110 | vn -0.951048 0.000000 0.309000 111 | vn -0.276376 -0.447218 -0.850642 112 | vn -0.688162 -0.525712 -0.499985 113 | vn -0.587756 0.000000 -0.809015 114 | vn 0.723594 -0.447188 -0.525712 115 | vn 0.262856 -0.525712 -0.808985 116 | vn 0.587756 0.000000 -0.809015 117 | vn 0.587756 0.000000 0.809015 118 | vn -0.587756 0.000000 0.809015 119 | vn -0.951048 0.000000 -0.309000 120 | vn 0.000000 0.000000 -1.000000 121 | vn 0.951048 0.000000 -0.309000 122 | vn 0.276376 0.447218 0.850642 123 | vn 0.688162 0.525712 0.499985 124 | vn 0.162450 0.850642 0.499985 125 | vn -0.723594 0.447188 0.525712 126 | vn -0.262856 0.525712 0.808985 127 | vn -0.425306 0.850642 0.309000 128 | vn -0.723594 0.447188 -0.525712 129 | vn -0.850642 0.525712 0.000000 130 | vn -0.425306 0.850642 -0.309000 131 | vn 0.276376 0.447218 -0.850642 132 | vn -0.262856 0.525712 -0.808985 133 | vn 0.162450 0.850642 -0.499985 134 | vn 0.894406 0.447188 0.000000 135 | vn 0.688162 0.525712 -0.499985 136 | vn 0.525712 0.850642 0.000000 137 | vn 0.000000 1.000000 0.000000 138 | usemtl None 139 | s 1 140 | f 1/1/1 14/2/2 13/3/3 141 | f 2/4/4 14/5/2 16/6/5 142 | f 1/1/1 13/3/3 18/7/6 143 | f 1/1/1 18/7/6 20/8/7 144 | f 1/1/1 20/8/7 17/9/8 145 | f 2/4/4 16/6/5 23/10/9 146 | f 3/11/10 15/12/11 25/13/12 147 | f 4/14/13 19/15/14 27/16/15 148 | f 5/17/16 21/18/17 29/19/18 149 | f 6/20/19 22/21/20 31/22/21 150 | f 2/4/4 23/10/9 26/23/22 151 | f 3/24/10 25/25/12 28/26/23 152 | f 4/14/13 27/16/15 30/27/24 153 | f 5/17/16 29/19/18 32/28/25 154 | f 6/20/19 31/22/21 24/29/26 155 | f 7/30/27 33/31/28 38/32/29 156 | f 8/33/30 34/34/31 40/35/32 157 | f 9/36/33 35/37/34 41/38/35 158 | f 10/39/36 36/40/37 42/41/38 159 | f 11/42/39 37/43/40 39/44/41 160 | f 13/45/3 15/12/11 3/11/10 161 | f 13/45/3 14/5/2 15/12/11 162 | f 14/5/2 2/4/4 15/12/11 163 | f 16/6/5 17/46/8 6/20/19 164 | f 16/6/5 14/5/2 17/46/8 165 | f 14/2/2 1/1/1 17/9/8 166 | f 18/7/6 19/15/14 4/14/13 167 | f 18/7/6 13/3/3 19/15/14 168 | f 13/3/3 3/24/10 19/15/14 169 | f 20/8/7 21/18/17 5/17/16 170 | f 20/8/7 18/7/6 21/18/17 171 | f 18/7/6 4/14/13 21/18/17 172 | f 17/46/8 22/21/20 6/20/19 173 | f 17/46/8 20/8/7 22/21/20 174 | f 20/8/7 5/17/16 22/21/20 175 | f 23/10/9 24/29/26 11/42/39 176 | f 23/10/9 16/6/5 24/29/26 177 | f 16/6/5 6/20/19 24/29/26 178 | f 25/13/12 26/23/22 7/30/27 179 | f 25/13/12 15/12/11 26/23/22 180 | f 15/12/11 2/4/4 26/23/22 181 | f 27/16/15 28/26/23 8/33/30 182 | f 27/16/15 19/15/14 28/26/23 183 | f 19/15/14 3/24/10 28/26/23 184 | f 29/19/18 30/27/24 9/36/33 185 | f 29/19/18 21/18/17 30/27/24 186 | f 21/18/17 4/14/13 30/27/24 187 | f 31/22/21 32/28/25 10/39/36 188 | f 31/22/21 22/21/20 32/28/25 189 | f 22/21/20 5/17/16 32/28/25 190 | f 26/23/22 33/31/28 7/30/27 191 | f 26/23/22 23/10/9 33/31/28 192 | f 23/10/9 11/42/39 33/31/28 193 | f 28/26/23 34/34/31 8/33/30 194 | f 28/26/23 25/25/12 34/34/31 195 | f 25/13/12 7/30/27 34/47/31 196 | f 30/27/24 35/37/34 9/36/33 197 | f 30/27/24 27/16/15 35/37/34 198 | f 27/16/15 8/33/30 35/37/34 199 | f 32/28/25 36/40/37 10/39/36 200 | f 32/28/25 29/19/18 36/40/37 201 | f 29/19/18 9/36/33 36/40/37 202 | f 24/29/26 37/43/40 11/42/39 203 | f 24/29/26 31/22/21 37/43/40 204 | f 31/22/21 10/39/36 37/43/40 205 | f 38/32/29 39/44/41 12/48/42 206 | f 38/32/29 33/31/28 39/44/41 207 | f 33/31/28 11/42/39 39/44/41 208 | f 40/35/32 38/49/29 12/48/42 209 | f 40/35/32 34/34/31 38/49/29 210 | f 34/47/31 7/30/27 38/32/29 211 | f 41/38/35 40/35/32 12/48/42 212 | f 41/38/35 35/37/34 40/35/32 213 | f 35/37/34 8/33/30 40/35/32 214 | f 42/41/38 41/38/35 12/48/42 215 | f 42/41/38 36/40/37 41/38/35 216 | f 36/40/37 9/36/33 41/38/35 217 | f 39/44/41 42/41/38 12/48/42 218 | f 39/44/41 37/43/40 42/41/38 219 | f 37/43/40 10/39/36 42/41/38 220 | -------------------------------------------------------------------------------- /manifest: -------------------------------------------------------------------------------- 1 | name=pixelcannon 2 | binary=/bin/pixelcannon 3 | icon=/ui/icons/apps/preferences-desktop-gaming.png 4 | author=Dustin Bensing 5 | description=3D Renderer 6 | -------------------------------------------------------------------------------- /src/interpolate.rs: -------------------------------------------------------------------------------- 1 | use primitive::vertex::Vertex; 2 | 3 | pub struct Interpolator { 4 | pub tex_coords_x: [f32; 3], 5 | pub tex_coords_y: [f32; 3], 6 | pub one_over_z: [f32; 3], 7 | 8 | pub tex_coords_step_xx: f32, 9 | pub tex_coords_step_xy: f32, 10 | pub tex_coords_step_yx: f32, 11 | pub tex_coords_step_yy: f32, 12 | 13 | pub one_over_step_zx: f32, 14 | pub one_over_step_zy: f32 15 | } 16 | 17 | impl Interpolator { 18 | pub fn new(min_vert: &Vertex, mid_vert: &Vertex, max_vert: &Vertex) -> Interpolator { 19 | let one_over_dx = 1_f32 / 20 | (((mid_vert.pos.x - max_vert.pos.x) * 21 | (min_vert.pos.y - max_vert.pos.y)) - 22 | ((min_vert.pos.x - max_vert.pos.x) * 23 | (mid_vert.pos.y - max_vert.pos.y))); 24 | 25 | let one_over_dy = -one_over_dx; 26 | 27 | let mut _one_over_z = [0f32; 3]; 28 | let mut _tex_coords_x = [0f32; 3]; 29 | let mut _tex_coords_y = [0f32; 3]; 30 | 31 | let mut _tex_coords_step_xx = 0f32; 32 | let mut _tex_coords_step_xy = 0f32; 33 | let mut _tex_coords_step_yx = 0f32; 34 | let mut _tex_coords_step_yy = 0f32; 35 | 36 | let mut _one_over_step_zx = 0f32; 37 | let mut _one_over_step_zy = 0f32; 38 | 39 | _one_over_z[0] = 1.0f32/min_vert.pos.w; 40 | _one_over_z[1] = 1.0f32/mid_vert.pos.w; 41 | _one_over_z[2] = 1.0f32/max_vert.pos.w; 42 | 43 | _tex_coords_x[0] = min_vert.tex_coords.x * _one_over_z[0]; 44 | _tex_coords_x[1] = mid_vert.tex_coords.x * _one_over_z[1]; 45 | _tex_coords_x[2] = max_vert.tex_coords.x * _one_over_z[2]; 46 | 47 | _tex_coords_y[0] = min_vert.tex_coords.y * _one_over_z[0]; 48 | _tex_coords_y[1] = mid_vert.tex_coords.y * _one_over_z[1]; 49 | _tex_coords_y[2] = max_vert.tex_coords.y * _one_over_z[2]; 50 | 51 | _tex_coords_step_xx = Interpolator::calc_step_x(_tex_coords_x, min_vert, mid_vert, max_vert, one_over_dx); 52 | _tex_coords_step_xy = Interpolator::calc_step_y(_tex_coords_x, min_vert, mid_vert, max_vert, one_over_dy); 53 | _tex_coords_step_yx = Interpolator::calc_step_x(_tex_coords_y, min_vert, mid_vert, max_vert, one_over_dx); 54 | _tex_coords_step_yy = Interpolator::calc_step_y(_tex_coords_y, min_vert, mid_vert, max_vert, one_over_dy); 55 | _one_over_step_zx = Interpolator::calc_step_x(_one_over_z, min_vert, mid_vert, max_vert, one_over_dx); 56 | _one_over_step_zy = Interpolator::calc_step_y(_one_over_z, min_vert, mid_vert, max_vert, one_over_dy); 57 | 58 | Interpolator{ 59 | tex_coords_x: _tex_coords_x, 60 | tex_coords_y: _tex_coords_y, 61 | one_over_z: _one_over_z, 62 | 63 | tex_coords_step_xx: _tex_coords_step_xx, 64 | tex_coords_step_xy: _tex_coords_step_xy, 65 | tex_coords_step_yx: _tex_coords_step_yx, 66 | tex_coords_step_yy: _tex_coords_step_yy, 67 | 68 | one_over_step_zx: _one_over_step_zx, 69 | one_over_step_zy: _one_over_step_zy 70 | } 71 | } 72 | 73 | fn calc_step_x(values: [f32; 3], min_vert: &Vertex, mid_vert: &Vertex, max_vert: &Vertex, one_over_dx: f32) -> f32 { 74 | let val = (((values[1] - values[2]) * 75 | (min_vert.pos.y - max_vert.pos.y)) - 76 | ((values[0] - values[2]) * 77 | (mid_vert.pos.y - max_vert.pos.y))) * one_over_dx; 78 | 79 | val 80 | } 81 | 82 | fn calc_step_y(values: [f32; 3], min_vert: &Vertex, mid_vert: &Vertex, max_vert: &Vertex, one_over_dy: f32) -> f32 { 83 | let val = (((values[1] - values[2]) * 84 | (min_vert.pos.x - max_vert.pos.x)) - 85 | ((values[0] - values[2]) * 86 | (mid_vert.pos.x - max_vert.pos.x))) * one_over_dy; 87 | 88 | val 89 | } 90 | } 91 | -------------------------------------------------------------------------------- /src/main.rs: -------------------------------------------------------------------------------- 1 | #![feature(step_by)] 2 | 3 | extern crate orbclient; 4 | extern crate orbimage; 5 | 6 | use orbclient::EventOption; 7 | use orbimage::Image; 8 | 9 | use std::time::Instant; 10 | use std::thread; 11 | 12 | use model::mesh::Mesh; 13 | use primitive::matrix::Matrix4f32; 14 | use render::RenderContext; 15 | use texture::bitmap::BitmapTexture; 16 | 17 | pub mod interpolate; 18 | pub mod model; 19 | pub mod primitive; 20 | pub mod render; 21 | pub mod texture; 22 | 23 | fn main() { 24 | let mut render_context = RenderContext::new(800, 600, "pixelcannon"); 25 | let mut start = Instant::now(); 26 | 27 | let projection = Matrix4f32::new().init_perspective(70.0_f32.to_radians(), render_context.get_width() as f32 / render_context.get_height() as f32, 0.1_f32, 1000_f32); 28 | 29 | let mut basepath = ""; 30 | if cfg!(target_os = "redox") { 31 | basepath = "/apps/pixelcannon/"; 32 | } 33 | 34 | let mesh = Mesh::from_path(basepath.to_string() + "assets/sphere.obj").unwrap(); 35 | 36 | let image = Image::from_path(basepath.to_string() + "assets/img2.png").unwrap(); 37 | let texture = BitmapTexture::from_orbimage(&image); 38 | 39 | let mut trans_x = 0_f32; 40 | let mut trans_y = 0_f32; 41 | let mut trans_z = 4.0_f32; 42 | 43 | let mut rot_x = 0_f32; 44 | let mut rot_y = -0.5_f32; 45 | let mut rot_z = 0_f32; 46 | 47 | let mut move_forward = false; 48 | let mut move_back = false; 49 | let mut move_left = false; 50 | let mut move_right = false; 51 | let mut move_up = false; 52 | let mut move_down = false; 53 | 54 | let mut turn_forward = false; 55 | let mut turn_back = false; 56 | let mut turn_left = false; 57 | let mut turn_right = false; 58 | let mut turn_up = false; 59 | let mut turn_down = false; 60 | 61 | let mut frame_cnt = 0_f32; 62 | let mut counter_duration = 0_f32; 63 | 64 | 'event: loop { 65 | for orbital_event in render_context.events() { 66 | match orbital_event.to_option() { 67 | EventOption::Key(key_event) => { 68 | match key_event.scancode { 69 | //Translation 70 | orbclient::K_W => move_forward = key_event.pressed, 71 | orbclient::K_S => move_back = key_event.pressed, 72 | orbclient::K_A => move_left = key_event.pressed, 73 | orbclient::K_D => move_right = key_event.pressed, 74 | orbclient::K_Q => move_down = key_event.pressed, 75 | orbclient::K_E => move_up = key_event.pressed, 76 | 77 | //Rotation 78 | orbclient::K_I => turn_forward = key_event.pressed, 79 | orbclient::K_K => turn_back = key_event.pressed, 80 | orbclient::K_J => turn_left = key_event.pressed, 81 | orbclient::K_L => turn_right = key_event.pressed, 82 | orbclient::K_U => turn_down = key_event.pressed, 83 | orbclient::K_O => turn_up = key_event.pressed, 84 | _ => () 85 | } 86 | }, 87 | EventOption::Quit(_quit_event) => break 'event, 88 | _ => (), 89 | }; 90 | } 91 | 92 | let end = Instant::now(); 93 | let delta = end.duration_since(start); 94 | let delta_ms = delta.as_secs() as f32 * 1000_f32 + (delta.subsec_nanos() as f32)/1000000 as f32; 95 | start = end; 96 | 97 | let speed = delta_ms / 500_f32; 98 | 99 | if move_forward { 100 | trans_z = 2_f32.max(trans_z - speed); 101 | } 102 | if move_back { 103 | trans_z += speed; 104 | } 105 | if move_left { 106 | trans_x += speed; 107 | } 108 | if move_right { 109 | trans_x -= speed; 110 | } 111 | if move_up { 112 | trans_y -= speed; 113 | } 114 | if move_down { 115 | trans_y += speed; 116 | } 117 | 118 | if turn_forward { 119 | rot_x += speed; 120 | } 121 | if turn_back { 122 | rot_x -= speed; 123 | } 124 | if turn_left { 125 | rot_y -= speed; 126 | } 127 | if turn_right { 128 | rot_y += speed; 129 | } 130 | if turn_up { 131 | rot_z -= speed; 132 | } 133 | if turn_down { 134 | rot_z += speed; 135 | } 136 | 137 | let translation = Matrix4f32::new().init_translation(trans_x, trans_y, trans_z); 138 | let rotation = Matrix4f32::new().init_rotation(rot_x, rot_y, rot_z); 139 | let transform = &projection.mul(&translation.mul(&rotation)); 140 | 141 | render_context.clear(); 142 | render_context.draw_mesh(&mesh, &transform, &texture); 143 | render_context.sync(); 144 | 145 | frame_cnt += 1_f32; 146 | counter_duration += delta_ms; 147 | if counter_duration > 1000_f32 { 148 | println!("FPS: {}", frame_cnt / counter_duration * 1000_f32); 149 | frame_cnt = 0_f32; 150 | counter_duration = 0_f32; 151 | } 152 | thread::yield_now(); 153 | } 154 | } 155 | -------------------------------------------------------------------------------- /src/model/indexed.rs: -------------------------------------------------------------------------------- 1 | use primitive::vector::Vector4f32; 2 | 3 | pub struct IndexedModel { 4 | pub positions: Vec, 5 | pub tex_coords: Vec, 6 | pub indices: Vec, 7 | pub tangents: Vec, 8 | pub normals: Vec 9 | } 10 | 11 | impl IndexedModel { 12 | pub fn new() -> IndexedModel { 13 | IndexedModel { 14 | positions: Vec::new(), 15 | tex_coords: Vec::new(), 16 | indices: Vec::new(), 17 | tangents: Vec::new(), 18 | normals: Vec::new() 19 | } 20 | } 21 | 22 | pub fn calc_tangents(&mut self) { 23 | //TODO(dustin): use idiomatic iterators and combinators 24 | for idx in (0..self.indices.len()).step_by(3) { 25 | let i0 = self.indices[idx as usize]; 26 | let i1 = self.indices[(idx + 1) as usize]; 27 | let i2 = self.indices[(idx + 2) as usize]; 28 | 29 | let edge1 = self.positions[i1 as usize].sub_v(&self.positions[i0 as usize]); 30 | let edge2 = self.positions[i2 as usize].sub_v(&self.positions[i0 as usize]); 31 | 32 | let delta_u1 = self.tex_coords[i1 as usize].x - self.tex_coords[i0 as usize].x; 33 | let delta_v1 = self.tex_coords[i1 as usize].y - self.tex_coords[i0 as usize].y; 34 | let delta_u2 = self.tex_coords[i2 as usize].x - self.tex_coords[i0 as usize].x; 35 | let delta_v2 = self.tex_coords[i2 as usize].y - self.tex_coords[i0 as usize].y; 36 | 37 | let divident = delta_u1 * delta_v2 - delta_u2 * delta_v1; 38 | let f = if divident == 0_f32 { 0_f32 } else { 1_f32 / divident }; 39 | 40 | let x = f * (delta_v2 * edge1.x - delta_v1 * edge2.x); 41 | let y = f * (delta_v2 * edge1.y - delta_v1 * edge2.y); 42 | let z = f * (delta_v2 * edge1.z - delta_v1 * edge2.z); 43 | } 44 | 45 | //TODO(dustin): use idiomatic iterators 46 | for idx in 0..self.normals.len() { 47 | self.tangents[idx as usize] = self.tangents[idx as usize].normalized(); 48 | } 49 | } 50 | 51 | pub fn calc_normals(&mut self) { 52 | //TODO(dustin): use idiomatic iterators and combinators 53 | for idx in (0..self.indices.len()).step_by(3) { 54 | 55 | let i0 = self.indices[idx as usize]; 56 | let i1 = self.indices[(idx + 1) as usize]; 57 | let i2 = self.indices[(idx + 2) as usize]; 58 | 59 | let v1 = self.positions[i1 as usize].sub_v(&self.positions[i0 as usize]); 60 | let v2 = self.positions[i2 as usize].sub_v(&self.positions[i0 as usize]); 61 | 62 | let normal = v1.cross(&v2).normalized(); 63 | 64 | self.normals[i0 as usize] = self.normals[i0 as usize].add_v(&normal); 65 | self.normals[i1 as usize] = self.normals[i1 as usize].add_v(&normal); 66 | self.normals[i2 as usize] = self.normals[i2 as usize].add_v(&normal); 67 | } 68 | 69 | //TODO(dustin): use idiomatic iterators 70 | for idx in 0..self.normals.len() { 71 | self.normals[idx as usize] = self.normals[idx as usize].normalized(); 72 | } 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /src/model/mesh.rs: -------------------------------------------------------------------------------- 1 | use model::obj::OBJModel; 2 | use primitive::vertex::Vertex; 3 | 4 | pub struct Mesh { 5 | pub vertices: Vec, 6 | pub indices: Vec 7 | } 8 | 9 | impl Mesh { 10 | pub fn from_path(file_path: String) -> Result { 11 | let model = try!(OBJModel::new().init_from_path(file_path)).to_indexed_model(); 12 | 13 | let mut vertices: Vec = Vec::new(); 14 | for idx in 0..model.positions.len() { 15 | vertices.push(Vertex::new_with_pos_and_texcoords(model.positions[idx as usize], model.tex_coords[idx as usize])); 16 | } 17 | 18 | let mesh = Mesh{ 19 | vertices: vertices, 20 | indices: model.indices 21 | }; 22 | 23 | Ok(mesh) 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/model/mod.rs: -------------------------------------------------------------------------------- 1 | pub mod indexed; 2 | pub mod mesh; 3 | pub mod obj; 4 | -------------------------------------------------------------------------------- /src/model/obj.rs: -------------------------------------------------------------------------------- 1 | use std::collections::HashMap; 2 | use std::fs::File; 3 | use std::io::Read; 4 | 5 | use model::indexed::IndexedModel; 6 | use primitive::vector::Vector4f32; 7 | 8 | #[derive(PartialEq, Eq, Hash, Debug, Copy, Clone)] 9 | pub struct OBJIndex { 10 | pub vertex_index: i32, 11 | pub tex_coord_index: i32, 12 | pub normal_index: i32 13 | } 14 | 15 | impl OBJIndex { 16 | pub fn new() -> OBJIndex { 17 | OBJIndex { 18 | vertex_index: 0, 19 | tex_coord_index: 0, 20 | normal_index: 0 21 | } 22 | } 23 | } 24 | 25 | pub struct OBJModel { 26 | pub positions: Vec, 27 | pub tex_coords: Vec, 28 | pub indices: Vec, 29 | pub tangents: Vec, 30 | pub normals: Vec, 31 | pub has_tex_coords: bool, 32 | pub has_normals: bool 33 | } 34 | 35 | impl OBJModel { 36 | pub fn new() -> OBJModel { 37 | OBJModel { 38 | positions: Vec::new(), 39 | tex_coords: Vec::new(), 40 | indices: Vec::new(), 41 | tangents: Vec::new(), 42 | normals: Vec::new(), 43 | has_tex_coords: false, 44 | has_normals: false 45 | } 46 | } 47 | 48 | pub fn init_from_path(&mut self, file_path: String) -> Result { 49 | let mut positions = Vec::new(); 50 | let mut tex_coords = Vec::new(); 51 | let mut indices = Vec::new(); 52 | let mut tangents = Vec::new(); 53 | let mut normals = Vec::new(); 54 | // let mut has_tex_coords = false; 55 | // let mut has_normals = false; 56 | 57 | let mut file = try!(File::open(&file_path).map_err(|err| format!("failed to open obj file: {}", err))); 58 | let mut buffer = String::new(); 59 | try!(file.read_to_string(&mut buffer).map_err(|err| format!("failed to read obj file: {}", err))); 60 | 61 | for line in buffer.lines() { 62 | 63 | let tokens: Vec<&str> = line.split(" ").collect(); 64 | //TODO(dustin): remove empty strings? 65 | 66 | if tokens.len() == 0 || tokens[0] == "#" { 67 | continue; 68 | 69 | } else if tokens[0] == "v" { 70 | 71 | let x: f32 = try!(tokens[1].parse().map_err(|err| format!("failed to parse token: {}", err))); 72 | let y: f32 = try!(tokens[2].parse().map_err(|err| format!("failed to parse token: {}", err))); 73 | let z: f32 = try!(tokens[3].parse().map_err(|err| format!("failed to parse token: {}", err))); 74 | 75 | positions.push( Vector4f32::new(x, y, z, 1_f32)); 76 | 77 | } else if tokens[0] == "vt" { 78 | 79 | let x: f32 = try!(tokens[1].parse().map_err(|err| format!("failed to parse token: {}", err))); 80 | let y: f32 = try!(tokens[2].parse().map_err(|err| format!("failed to parse token: {}", err))); 81 | 82 | tex_coords.push( Vector4f32::new(x, 1_f32 - y, 0_f32, 0_f32)); 83 | 84 | } else if tokens[0] == "vn" { 85 | 86 | let x: f32 = try!(tokens[1].parse().map_err(|err| format!("failed to parse token: {}", err))); 87 | let y: f32 = try!(tokens[2].parse().map_err(|err| format!("failed to parse token: {}", err))); 88 | let z: f32 = try!(tokens[3].parse().map_err(|err| format!("failed to parse token: {}", err))); 89 | 90 | normals.push( Vector4f32::new(x, y, z, 0_f32)); 91 | 92 | } else if tokens[0] == "f" { 93 | //TODO(dustin): use idiomatic iterators 94 | for idx in 0..(tokens.len() - 3) { 95 | 96 | indices.push(try!(self.parse_obj_index(tokens[1 as usize]))); 97 | indices.push(try!(self.parse_obj_index(tokens[(2 + idx) as usize]))); 98 | indices.push(try!(self.parse_obj_index(tokens[(3 + idx) as usize]))); 99 | } 100 | } 101 | } 102 | 103 | let model = OBJModel { 104 | positions: positions, 105 | tex_coords: tex_coords, 106 | indices: indices, 107 | tangents: tangents, 108 | normals: normals, 109 | has_tex_coords: self.has_tex_coords, 110 | has_normals: self.has_normals 111 | }; 112 | 113 | Ok(model) 114 | } 115 | 116 | fn parse_obj_index(&mut self, token: &str) -> Result { 117 | let values: Vec<&str> = token.split("/").collect(); 118 | 119 | let mut result = OBJIndex::new(); 120 | let vidx: i32 = try!(values[0 as usize].to_string().parse().map_err(|err| format!("failed to parse obj index vertex: {}", err))); 121 | result.vertex_index = vidx - 1_i32; 122 | 123 | if values.len() > 1 { 124 | 125 | if !values[1].is_empty() { 126 | self.has_tex_coords = true; 127 | let tcidx: i32 = try!(values[1 as usize].to_string().parse().map_err(|err| format!("failed to parse obj index tex coord: {}", err))); 128 | result.tex_coord_index = tcidx - 1_i32; 129 | } 130 | 131 | if values.len() > 2 { 132 | self.has_normals = true; 133 | let nidx: i32 = try!(values[2 as usize].to_string().parse().map_err(|err| format!("failed to parse obj index normal: {}", err))); 134 | result.normal_index = nidx - 1_i32; 135 | } 136 | 137 | } 138 | 139 | Ok(result) 140 | } 141 | 142 | pub fn to_indexed_model(&self) -> IndexedModel { 143 | let mut result = IndexedModel::new(); 144 | let mut normal_model = IndexedModel::new(); 145 | 146 | //TODO(dustin): explicit types 147 | let mut result_index_map: HashMap = HashMap::new(); 148 | let mut normal_index_map: HashMap = HashMap::new(); 149 | let mut index_map: HashMap = HashMap::new(); 150 | 151 | //TODO(dustin): use idiomatic iterators 152 | for idx in 0..self.indices.len() { 153 | 154 | let current_index = self.indices[idx as usize]; //NOTE(dustin): maybe as ref not copy see struct 155 | 156 | let current_position = self.positions[current_index.vertex_index as usize]; //NOTE(dustin): maybe as ref not copy see struct 157 | let current_tex_coord: Vector4f32; 158 | let current_normal: Vector4f32; 159 | 160 | if self.has_tex_coords { 161 | current_tex_coord = self.tex_coords[current_index.tex_coord_index as usize]; //NOTE(dustin): maybe as ref not copy see struct 162 | } else { 163 | current_tex_coord = Vector4f32::new(0_f32, 0_f32, 0_f32, 0_f32); 164 | } 165 | 166 | if self.has_normals { 167 | current_normal = self.normals[current_index.normal_index as usize]; //NOTE(dustin): maybe as ref not copy see struct 168 | } else { 169 | current_normal = Vector4f32::new(0_f32, 0_f32, 0_f32, 0_f32); 170 | } 171 | 172 | //TODO(dustin): fix this crappy unidiomatic code :( 173 | let mut model_vertex_index = { 174 | let opt_model_vertex_index = result_index_map.get(¤t_index); 175 | 176 | match opt_model_vertex_index { 177 | Some(x) => *x, 178 | None => -1_i32, 179 | } 180 | }; 181 | if model_vertex_index == -1_i32 { 182 | 183 | model_vertex_index = result.positions.len() as i32; 184 | result_index_map.insert(current_index, model_vertex_index); 185 | 186 | result.positions.push(current_position); 187 | result.tex_coords.push(current_tex_coord); 188 | if self.has_normals { 189 | result.normals.push(current_normal); 190 | } 191 | } 192 | 193 | //TODO(dustin): fix this crappy unidiomatic code :( 194 | let mut normal_model_index = { 195 | let opt_normal_model_index = normal_index_map.get(¤t_index.vertex_index); 196 | 197 | match opt_normal_model_index { 198 | Some(x) => *x, 199 | None => -1_i32, 200 | } 201 | }; 202 | if normal_model_index == -1_i32 { 203 | 204 | normal_model_index = normal_model.positions.len() as i32; 205 | normal_index_map.insert(current_index.vertex_index, normal_model_index); 206 | 207 | normal_model.positions.push(current_position); 208 | normal_model.tex_coords.push(current_tex_coord); 209 | normal_model.normals.push(current_normal); 210 | normal_model.tangents.push(Vector4f32::new(0_f32, 0_f32, 0_f32, 0_f32)); 211 | } 212 | 213 | assert!(model_vertex_index != -1_i32); 214 | assert!(normal_model_index != -1_i32); 215 | 216 | result.indices.push(model_vertex_index); 217 | normal_model.indices.push(normal_model_index); 218 | index_map.insert(model_vertex_index, normal_model_index); 219 | } 220 | 221 | if !self.has_normals { 222 | normal_model.calc_normals(); 223 | for idx in 0..result.positions.len() as i32 { 224 | let normal_idx = *index_map.get(&idx).unwrap(); 225 | result.normals.push(normal_model.normals[normal_idx as usize]); 226 | } 227 | } 228 | 229 | // normal_model.calc_tangents(); 230 | // for idx in 0..result.positions.len() as i32 { 231 | // let tan_idx = *index_map.get(&idx).unwrap(); 232 | // result.tangents.push(normal_model.tangents[tan_idx as usize]); 233 | // } 234 | 235 | result 236 | } 237 | } 238 | -------------------------------------------------------------------------------- /src/primitive/edge.rs: -------------------------------------------------------------------------------- 1 | use interpolate::Interpolator; 2 | use primitive::vertex::Vertex; 3 | 4 | pub struct Edge { 5 | pub pos_x: f32, 6 | pub step_x: f32, 7 | pub start_y: i32, 8 | pub end_y: i32, 9 | 10 | pub tex_coords_x: f32, 11 | pub tex_coords_step_x: f32, 12 | pub tex_coords_y: f32, 13 | pub tex_coords_step_y: f32, 14 | pub one_over_z: f32, 15 | pub one_over_step_z: f32 16 | } 17 | 18 | impl Edge { 19 | pub fn new(interpolator: &Interpolator, min_vert: &Vertex, max_vert: &Vertex, min_y_vert_index: i32) -> Edge { 20 | let dist_y = max_vert.pos.y - min_vert.pos.y; 21 | let dist_x = max_vert.pos.x - min_vert.pos.x; 22 | let prestep_y = min_vert.pos.y.ceil() - min_vert.pos.y; 23 | let _step_x = dist_x as f32 / dist_y as f32; 24 | let _pos_x = min_vert.pos.x + prestep_y * _step_x; 25 | let prestep_x = _pos_x - min_vert.pos.x; 26 | 27 | let _tex_coord_x = interpolator.tex_coords_x[min_y_vert_index as usize] + 28 | interpolator.tex_coords_step_xx * prestep_x + 29 | interpolator.tex_coords_step_xy * prestep_y; 30 | let _tex_coord_step_x = interpolator.tex_coords_step_xy + interpolator.tex_coords_step_xx * _step_x; 31 | 32 | let _tex_coord_y = interpolator.tex_coords_y[min_y_vert_index as usize] + 33 | interpolator.tex_coords_step_yx * prestep_x + 34 | interpolator.tex_coords_step_yy * prestep_y; 35 | let _tex_coord_step_y = interpolator.tex_coords_step_yy + interpolator.tex_coords_step_yx * _step_x; 36 | 37 | let _one_over_z = interpolator.one_over_z[min_y_vert_index as usize] + 38 | interpolator.one_over_step_zx * prestep_x + 39 | interpolator.one_over_step_zy * prestep_y; 40 | let _one_over_step_z = interpolator.one_over_step_zy + interpolator.one_over_step_zx * _step_x; 41 | 42 | 43 | Edge { 44 | pos_x: _pos_x, 45 | step_x: _step_x, 46 | start_y: min_vert.pos.y.ceil() as i32, 47 | end_y: max_vert.pos.y.ceil() as i32, 48 | 49 | tex_coords_x: _tex_coord_x, 50 | tex_coords_step_x: _tex_coord_step_x, 51 | tex_coords_y: _tex_coord_y, 52 | tex_coords_step_y: _tex_coord_step_y, 53 | one_over_z: _one_over_z, 54 | one_over_step_z: _one_over_step_z 55 | } 56 | } 57 | 58 | pub fn step(&mut self) { 59 | self.pos_x += self.step_x; 60 | self.tex_coords_x += self.tex_coords_step_x; 61 | self.tex_coords_y += self.tex_coords_step_y; 62 | self.one_over_z += self.one_over_step_z; 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /src/primitive/matrix.rs: -------------------------------------------------------------------------------- 1 | use primitive::vector::Vector4f32; 2 | 3 | pub struct Matrix4f32 { 4 | pub m: [[f32; 4]; 4] 5 | } 6 | 7 | impl Matrix4f32 { 8 | pub fn new() -> Matrix4f32 { 9 | Matrix4f32{m: [[0f32; 4]; 4]} 10 | } 11 | 12 | pub fn init_perspective(mut self, fov: f32, aspect_ratio: f32, z_near: f32, z_far: f32) -> Matrix4f32 { 13 | let tan_half_fov = (fov / 2f32).tan(); 14 | let z_range = z_near - z_far; 15 | 16 | self.m[0][0] = 1f32 / (tan_half_fov * aspect_ratio); self.m[0][1] = 0f32; self.m[0][2] = 0f32; self.m[0][3] = 0f32; 17 | self.m[1][0] = 0f32; self.m[1][1] = 1f32 / tan_half_fov; self.m[1][2] = 0f32; self.m[1][3] = 0f32; 18 | self.m[2][0] = 0f32; self.m[2][1] = 0f32; self.m[2][2] = (- z_near -z_far) / z_range; self.m[2][3] = 2f32 * z_far * z_near / z_range; 19 | self.m[3][0] = 0f32; self.m[3][1] = 0f32; self.m[3][2] = 1f32; self.m[3][3] = 0f32; 20 | 21 | self 22 | } 23 | 24 | pub fn init_translation(mut self, x: f32, y: f32, z: f32) -> Matrix4f32 { 25 | self.m[0][0] = 1f32; self.m[0][1] = 0f32; self.m[0][2] = 0f32; self.m[0][3] = x; 26 | self.m[1][0] = 0f32; self.m[1][1] = 1f32; self.m[1][2] = 0f32; self.m[1][3] = y; 27 | self.m[2][0] = 0f32; self.m[2][1] = 0f32; self.m[2][2] = 1f32; self.m[2][3] = z; 28 | self.m[3][0] = 0f32; self.m[3][1] = 0f32; self.m[3][2] = 0f32; self.m[3][3] = 1f32; 29 | 30 | self 31 | } 32 | 33 | pub fn init_rotation(mut self, x: f32, y: f32, z: f32) -> Matrix4f32 { 34 | let mut rx = Matrix4f32::new(); 35 | let mut ry = Matrix4f32::new(); 36 | let mut rz = Matrix4f32::new(); 37 | 38 | rz.m[0][0] = z.cos(); rz.m[0][1] = -z.sin(); rz.m[0][2] = 0f32; rz.m[0][3] = 0f32; 39 | rz.m[1][0] = z.sin(); rz.m[1][1] = z.cos(); rz.m[1][2] = 0f32; rz.m[1][3] = 0f32; 40 | rz.m[2][0] = 0f32; rz.m[2][1] = 0f32; rz.m[2][2] = 1f32; rz.m[2][3] = 0f32; 41 | rz.m[3][0] = 0f32; rz.m[3][1] = 0f32; rz.m[3][2] = 0f32; rz.m[3][3] = 1f32; 42 | 43 | rx.m[0][0] = 1f32; rx.m[0][1] = 0f32; rx.m[0][2] = 0f32; rx.m[0][3] = 0f32; 44 | rx.m[1][0] = 0f32; rx.m[1][1] = x.cos(); rx.m[1][2] = -x.sin(); rx.m[1][3] = 0f32; 45 | rx.m[2][0] = 0f32; rx.m[2][1] = x.sin(); rx.m[2][2] = x.cos(); rx.m[2][3] = 0f32; 46 | rx.m[3][0] = 0f32; rx.m[3][1] = 0f32; rx.m[3][2] = 0f32; rx.m[3][3] = 1f32; 47 | 48 | ry.m[0][0] = y.cos(); ry.m[0][1] = 0f32; ry.m[0][2] = -y.sin(); ry.m[0][3] = 0f32; 49 | ry.m[1][0] = 0f32; ry.m[1][1] = 1f32; ry.m[1][2] = 0f32; ry.m[1][3] = 0f32; 50 | ry.m[2][0] = y.sin(); ry.m[2][1] = 0f32; ry.m[2][2] = y.cos(); ry.m[2][3] = 0f32; 51 | ry.m[3][0] = 0f32; ry.m[3][1] = 0f32; ry.m[3][2] = 0f32; ry.m[3][3] = 1f32; 52 | 53 | self.m = rz.mul(&ry.mul(&rx)).m; 54 | 55 | self 56 | } 57 | 58 | pub fn init_sreenspace_transform(mut self, half_width: f32, half_height: f32) -> Matrix4f32 { 59 | self.m[0][0] = half_width; self.m[0][1] = 0f32; self.m[0][2] = 0f32; self.m[0][3] = half_width; 60 | self.m[1][0] = 0f32; self.m[1][1] = -half_height; self.m[1][2] = 0f32; self.m[1][3] = half_height; 61 | self.m[2][0] = 0f32; self.m[2][1] = 0f32; self.m[2][2] = 1f32; self.m[2][3] = 0f32; 62 | self.m[3][0] = 0f32; self.m[3][1] = 0f32; self.m[3][2] = 0f32; self.m[3][3] = 1f32; 63 | 64 | self 65 | } 66 | 67 | pub fn transform(&self, other: &Vector4f32) -> Vector4f32 { 68 | Vector4f32 { 69 | x: self.m[0][0] * other.x + self.m[0][1] * other.y + self.m[0][2] * other.z + self.m[0][3] * other.w, 70 | y: self.m[1][0] * other.x + self.m[1][1] * other.y + self.m[1][2] * other.z + self.m[1][3] * other.w, 71 | z: self.m[2][0] * other.x + self.m[2][1] * other.y + self.m[2][2] * other.z + self.m[2][3] * other.w, 72 | w: self.m[3][0] * other.x + self.m[3][1] * other.y + self.m[3][2] * other.z + self.m[3][3] * other.w } 73 | } 74 | 75 | pub fn mul(&self, other: &Matrix4f32) -> Matrix4f32 { 76 | let mut ret = Matrix4f32::new(); 77 | 78 | for c_idx in 0..4 { 79 | for r_idx in 0..4 { 80 | ret.m[c_idx][r_idx] = 81 | self.m[c_idx][0] * other.m[0][r_idx] + 82 | self.m[c_idx][1] * other.m[1][r_idx] + 83 | self.m[c_idx][2] * other.m[2][r_idx] + 84 | self.m[c_idx][3] * other.m[3][r_idx]; 85 | } 86 | } 87 | 88 | ret 89 | } 90 | } 91 | -------------------------------------------------------------------------------- /src/primitive/mod.rs: -------------------------------------------------------------------------------- 1 | pub mod edge; 2 | pub mod matrix; 3 | pub mod vector; 4 | pub mod vertex; 5 | -------------------------------------------------------------------------------- /src/primitive/vector.rs: -------------------------------------------------------------------------------- 1 | #[derive(Debug, Copy, Clone)] 2 | pub struct Vector4f32 { 3 | pub x: f32, 4 | pub y: f32, 5 | pub z: f32, 6 | pub w: f32 7 | } 8 | 9 | impl Vector4f32 { 10 | 11 | pub fn new(x: f32, y: f32, z: f32, w: f32) -> Vector4f32 { 12 | Vector4f32 { 13 | x: x, 14 | y: y, 15 | z: z, 16 | w: w 17 | } 18 | } 19 | 20 | pub fn add_v(&self, other: &Vector4f32) -> Vector4f32 { 21 | Vector4f32::new(self.x + other.x, self.y + other.y, self.z + other.z, self.w + other.w) 22 | } 23 | 24 | pub fn sub_v(&self, other: &Vector4f32) -> Vector4f32 { 25 | Vector4f32::new(self.x - other.x, self.y - other.y, self.z - other.z, self.w - other.w) 26 | } 27 | 28 | pub fn length(&self) -> f32 { 29 | ((self.x * self.x) + (self.y * self.y) + (self.z * self.z) + (self.w * self.w)).sqrt() 30 | } 31 | 32 | pub fn normalized(&self) -> Vector4f32 { 33 | let length = self.length(); 34 | Vector4f32::new(self.x / length, self.y / length, self.z / length, self.w / length) 35 | } 36 | 37 | pub fn cross(&self, other: &Vector4f32) -> Vector4f32 { 38 | let x = self.y * other.z - self.z * other.y; 39 | let y = self.z * other.x - self.x * other.z; 40 | let z = self.x * other.y - self.y * other.x; 41 | 42 | Vector4f32::new(x, y, z, 0_f32) 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /src/primitive/vertex.rs: -------------------------------------------------------------------------------- 1 | use primitive::matrix::Matrix4f32; 2 | use primitive::vector::Vector4f32; 3 | 4 | pub struct Vertex { 5 | pub pos: Vector4f32, 6 | pub tex_coords: Vector4f32 //TODO(dustin): don't waste space here we only need 2 values 7 | } 8 | 9 | impl Vertex { 10 | // pub fn new(_x: f32, _y: f32, _z: f32) -> Vertex { 11 | // Vertex{pos: Vector4f32{x: _x, y: _y, z: _z, w: 1f32}} 12 | // } 13 | 14 | pub fn new_with_pos_and_texcoords(_pos: Vector4f32, _coords: Vector4f32) -> Vertex { 15 | Vertex{pos: _pos, tex_coords: _coords} 16 | } 17 | 18 | pub fn calc_double_area(&self, v1: &Vertex, v2: &Vertex) -> i32 { 19 | let x1 = (v1.pos.x as i32 - self.pos.x as i32) as i32; 20 | let y1 = (v1.pos.y as i32 - self.pos.y as i32) as i32; 21 | let x2 = (v2.pos.x as i32 - self.pos.x as i32) as i32; 22 | let y2 = (v2.pos.y as i32 - self.pos.y as i32) as i32; 23 | 24 | (x1 * y2 - x2 * y1) 25 | } 26 | 27 | //TODO(dustin): fix this! 28 | pub fn transform(&self, transform: &Matrix4f32) -> Vertex { 29 | Vertex::new_with_pos_and_texcoords(transform.transform(&self.pos), Vector4f32{x: self.tex_coords.x, y: self.tex_coords.y, z: self.tex_coords.z, w: self.tex_coords.w}) 30 | } 31 | 32 | pub fn perspective_divide(&self) -> Vertex { 33 | Vertex::new_with_pos_and_texcoords(Vector4f32{ x: self.pos.x / self.pos.w, y: self.pos.y / self.pos.w, z: self.pos.z / self.pos.w, w: self.pos.w}, Vector4f32{x: self.tex_coords.x, y: self.tex_coords.y, z: self.tex_coords.z, w: self.tex_coords.w}) 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/render.rs: -------------------------------------------------------------------------------- 1 | use orbclient::{self, EventIter, Renderer}; 2 | use std; 3 | 4 | use interpolate::Interpolator; 5 | use model::mesh::Mesh; 6 | use primitive::edge::Edge; 7 | use primitive::matrix::Matrix4f32; 8 | use primitive::vertex::Vertex; 9 | use texture::bitmap::BitmapTexture; 10 | 11 | pub struct RenderContext { 12 | window: orbclient::Window, 13 | } 14 | 15 | impl RenderContext { 16 | pub fn new(width: u32, height: u32, title: &str) -> RenderContext { 17 | let orb_window = orbclient::Window::new_flags(100, 100, width, height, title, true).unwrap(); 18 | RenderContext{window: orb_window} 19 | } 20 | 21 | pub fn get_height(&self) -> u32 { 22 | self.window.height() 23 | } 24 | 25 | pub fn get_width(&self) -> u32 { 26 | self.window.width() 27 | } 28 | 29 | pub fn events(&mut self) -> EventIter { 30 | self.window.events() 31 | } 32 | 33 | pub fn clear(&mut self) { 34 | self.window.set(orbclient::Color { data: 0xFF220CE8}); 35 | } 36 | 37 | pub fn sync(&mut self) { 38 | self.window.sync(); 39 | } 40 | 41 | pub fn draw_mesh(&mut self, mesh: &Mesh, transform: &Matrix4f32, texture: &BitmapTexture) { 42 | for idx in (0..mesh.indices.len()).step_by(3) { 43 | let v1 = &mesh.vertices[mesh.indices[idx as usize] as usize].transform(&transform); 44 | let v2 = &mesh.vertices[mesh.indices[(idx + 1) as usize] as usize].transform(&transform); 45 | let v3 = &mesh.vertices[mesh.indices[(idx + 2) as usize] as usize].transform(&transform); 46 | 47 | self.draw_triangle(v1, v2, v3, &texture); 48 | } 49 | } 50 | 51 | pub fn draw_triangle(&mut self, v1: &Vertex, v2: &Vertex, v3: &Vertex, texture: &BitmapTexture) { 52 | 53 | //TODO(dustin): optimisation do not calculate/init every time 54 | let screen_space_transform = Matrix4f32::new().init_sreenspace_transform(self.get_width() as f32 / 2f32, self.get_height() as f32 / 2f32); 55 | 56 | let mut min_vert = v1.transform(&screen_space_transform).perspective_divide(); 57 | let mut mid_vert = v2.transform(&screen_space_transform).perspective_divide(); 58 | let mut max_vert = v3.transform(&screen_space_transform).perspective_divide(); 59 | 60 | if min_vert.calc_double_area(&max_vert, &mid_vert) >= 0 { 61 | return; 62 | } 63 | 64 | if max_vert.pos.y < mid_vert.pos.y { 65 | std::mem::swap(&mut mid_vert, &mut max_vert); 66 | } 67 | 68 | if mid_vert.pos.y < min_vert.pos.y { 69 | std::mem::swap(&mut mid_vert, &mut min_vert); 70 | } 71 | 72 | if max_vert.pos.y < mid_vert.pos.y { 73 | std::mem::swap(&mut max_vert, &mut mid_vert); 74 | } 75 | 76 | self.scan_triangle(&min_vert, &mid_vert, &max_vert, min_vert.calc_double_area(&max_vert, &mid_vert) >= 0, texture); 77 | } 78 | 79 | fn scan_triangle(&mut self, min_vert: &Vertex, mid_vert: &Vertex, max_vert: &Vertex, side: bool, texture: &BitmapTexture) { 80 | 81 | let interpolator = Interpolator::new(min_vert, mid_vert, max_vert); 82 | let mut top_to_bottom = Edge::new(&interpolator, min_vert, max_vert, 0); 83 | let mut top_to_middle = Edge::new(&interpolator, min_vert, mid_vert, 0); 84 | let mut middle_to_bottom = Edge::new(&interpolator, mid_vert, max_vert, 1); 85 | 86 | self.scan_edges(&mut top_to_bottom, &mut top_to_middle, side, texture); 87 | self.scan_edges(&mut top_to_bottom, &mut middle_to_bottom, side, texture); 88 | } 89 | 90 | fn scan_edges(&mut self, first: &mut Edge, second: &mut Edge, side: bool, texture: &BitmapTexture) { 91 | 92 | let start_y = second.start_y; 93 | let end_y = second.end_y; 94 | 95 | let mut left = first; 96 | let mut right = second; 97 | 98 | if side { 99 | std::mem::swap(&mut left, &mut right); 100 | } 101 | 102 | for idx_y in start_y..end_y { 103 | self.draw_scan_line(&left, &right, idx_y, texture); 104 | left.step(); 105 | right.step(); 106 | } 107 | } 108 | 109 | fn draw_scan_line(&mut self, left: &Edge, right: &Edge, idx_y: i32, texture: &BitmapTexture) { 110 | 111 | let min_x = left.pos_x.ceil() as i32; 112 | let max_x = right.pos_x.ceil()as i32; 113 | let prestep_x = min_x as f32 - left.pos_x; 114 | 115 | let dist_x = right.pos_x - left.pos_x; 116 | let tex_coords_step_xx = (right.tex_coords_x - left.tex_coords_x) / dist_x; 117 | let tex_coords_step_yx = (right.tex_coords_y - left.tex_coords_y) / dist_x; 118 | let one_over_step_zx = (right.one_over_z - left.one_over_z) / dist_x; 119 | 120 | let mut tex_coords_x = left.tex_coords_x + tex_coords_step_xx * prestep_x; 121 | let mut tex_coords_y = left.tex_coords_y + tex_coords_step_yx * prestep_x; 122 | let mut one_over_z = left.one_over_z + one_over_step_zx * prestep_x; 123 | 124 | let ww = self.window.width(); 125 | let wh = self.window.height(); 126 | let data = self.window.data_mut(); 127 | 128 | for idx_x in min_x..max_x { 129 | 130 | let data_idx = idx_y * ww as i32 + idx_x; 131 | if data_idx >= data.len() as i32 || data_idx < 0 { 132 | break; 133 | } 134 | 135 | let z = 1_f32 / one_over_z; 136 | let src_x = ((tex_coords_x * z) * (texture.width - 1) as f32 + 0.5_f32) as i32; 137 | let src_y = ((tex_coords_y * z) * (texture.height - 1) as f32 + 0.5_f32) as i32; 138 | 139 | // self.window.pixel(idx_x, idx_y, texture.get_orb_pixel(src_x, src_y)); 140 | let new = texture.get_orb_pixel(src_x, src_y).data; 141 | let old = &mut data[idx_y as usize * ww as usize + idx_x as usize].data; 142 | *old = new; 143 | 144 | one_over_z += one_over_step_zx; 145 | tex_coords_x += tex_coords_step_xx; 146 | tex_coords_y += tex_coords_step_yx; 147 | } 148 | } 149 | } 150 | -------------------------------------------------------------------------------- /src/texture/bitmap.rs: -------------------------------------------------------------------------------- 1 | use orbimage::Image; 2 | use orbclient::{self, Renderer}; 3 | 4 | //NOTE(dustin): format ARGB 5 | pub struct BitmapTexture { 6 | pub width: i32, 7 | pub height: i32, 8 | pub data: Vec 9 | } 10 | 11 | //TODO:(dustin) use orbclient color format, avoid expensive conversation 12 | impl BitmapTexture { 13 | pub fn new(_width: i32, _height: i32) -> BitmapTexture { 14 | BitmapTexture { 15 | width: _width, 16 | height: _height, 17 | data: vec![0_u8; (_width * _height * 4) as usize] 18 | } 19 | } 20 | 21 | pub fn set_pixel(&mut self, x: i32, y: i32, a: u8, r: u8, g: u8, b: u8) { 22 | let idx = ((x + y * self.width) * 4) as usize; 23 | self.data[idx ] = a; 24 | self.data[idx + 1] = r; 25 | self.data[idx + 2] = g; 26 | self.data[idx + 3] = b; 27 | } 28 | 29 | pub fn get_pixel(&self, x: i32, y: i32) -> (u8, u8, u8, u8) { 30 | let tex_idx = ((x + y * self.width) * 4) as usize; 31 | 32 | let a = self.data[tex_idx]; 33 | let r = self.data[tex_idx + 1]; 34 | let g = self.data[tex_idx + 2]; 35 | let b = self.data[tex_idx + 3]; 36 | 37 | (a, r, g, b) 38 | } 39 | 40 | pub fn get_orb_pixel(&self, x: i32, y: i32) -> orbclient::Color { 41 | let (a, r, g, b) = self.get_pixel(x, y); 42 | let color = ((a as u32) << 24) + ((r as u32) << 16) + ((g as u32) << 8) + b as u32; 43 | 44 | orbclient::Color { data: color } 45 | } 46 | 47 | pub fn from_orbimage(image: &Image) -> BitmapTexture { 48 | let mut texture = BitmapTexture::new(image.width() as i32, image.height() as i32); 49 | 50 | for x in 0..texture.width { 51 | for y in 0..texture.height { 52 | 53 | let col_idx = (x + y * image.width() as i32) as usize; 54 | let orb_color = image.data()[col_idx]; 55 | 56 | let r = (orb_color.data >> 16) as u8; 57 | let g = (orb_color.data >> 8) as u8; 58 | let b = orb_color.data as u8; 59 | texture.set_pixel(x, y, 255, r, g, b); 60 | } 61 | } 62 | 63 | texture 64 | } 65 | // pub fn copy_pixel_from_texture(&mut self, dest_x: i32, dest_y: i32, src_x: i32, src_y: i32, texture: &BitmapTexture) { 66 | // 67 | // let dest_idx = ((dest_x + dest_y * self.width) * 4) as usize; 68 | // let src_idx = ((src_x + src_y * texture.width) * 4) as usize; 69 | // 70 | // self.data[dest_idx ] = texture.data[src_idx]; 71 | // self.data[dest_idx + 1] = texture.data[src_idx + 1]; 72 | // self.data[dest_idx + 2] = texture.data[src_idx + 2]; 73 | // self.data[dest_idx + 3] = texture.data[src_idx + 3]; 74 | // } 75 | 76 | // pub fn copy_to_byte_array(& self, &mut) 77 | } 78 | -------------------------------------------------------------------------------- /src/texture/mod.rs: -------------------------------------------------------------------------------- 1 | pub mod bitmap; 2 | --------------------------------------------------------------------------------