diff --git a/assets/favicon.png b/assets/favicon.png index 3a2d950..1a57c37 100644 Binary files a/assets/favicon.png and b/assets/favicon.png differ diff --git a/assets/headshot.png b/assets/headshot.png new file mode 100644 index 0000000..a1cf939 Binary files /dev/null and b/assets/headshot.png differ diff --git a/assets/plane.mtl b/assets/plane.mtl deleted file mode 100644 index 064191a..0000000 --- a/assets/plane.mtl +++ /dev/null @@ -1,82 +0,0 @@ -# Blender 4.1.0 MTL File: 'None' -# www.blender.org - -newmtl PlaneLightBlue -Ns 250.000000 -Ka 1.000000 1.000000 1.000000 -Kd 0.000000 0.796875 1.000000 -Ks 0.500000 0.500000 0.500000 -Ke 0.000000 0.000000 0.000000 -Ni 1.500000 -d 1.000000 -illum 2 - -newmtl PlaneOrange -Ns 250.000000 -Ka 1.000000 1.000000 1.000000 -Kd 1.000000 0.398400 0.000000 -Ks 0.500000 0.500000 0.500000 -Ke 0.000000 0.000000 0.000000 -Ni 1.500000 -d 1.000000 -illum 2 - -newmtl PlaneOrange.003 -Ns 250.000000 -Ka 1.000000 1.000000 1.000000 -Kd 1.000000 0.398400 0.000000 -Ks 0.500000 0.500000 0.500000 -Ke 0.000000 0.000000 0.000000 -Ni 1.500000 -d 1.000000 -illum 2 - -newmtl PlaneOrange.005 -Ns 250.000000 -Ka 1.000000 1.000000 1.000000 -Kd 1.000000 0.398400 0.000000 -Ks 0.500000 0.500000 0.500000 -Ke 0.000000 0.000000 0.000000 -Ni 1.500000 -d 1.000000 -illum 2 - -newmtl PlaneRed -Ns 250.000000 -Ka 1.000000 1.000000 1.000000 -Kd 1.000000 0.000000 0.000000 -Ks 0.500000 0.500000 0.500000 -Ke 0.000000 0.000000 0.000000 -Ni 1.500000 -d 1.000000 -illum 2 - -newmtl PlaneRed.001 -Ns 250.000000 -Ka 1.000000 1.000000 1.000000 -Kd 1.000000 0.000000 0.000000 -Ks 0.500000 0.500000 0.500000 -Ke 0.000000 0.000000 0.000000 -Ni 1.500000 -d 1.000000 -illum 2 - -newmtl PlaneRed.002 -Ns 250.000000 -Ka 1.000000 1.000000 1.000000 -Kd 1.000000 0.000000 0.000000 -Ks 0.500000 0.500000 0.500000 -Ke 0.000000 0.000000 0.000000 -Ni 1.500000 -d 1.000000 -illum 2 - -newmtl PlaneRed.003 -Ns 250.000000 -Ka 1.000000 1.000000 1.000000 -Kd 1.000000 0.000000 0.000000 -Ks 0.500000 0.500000 0.500000 -Ke 0.000000 0.000000 0.000000 -Ni 1.500000 -d 1.000000 -illum 2 diff --git a/assets/plane.obj b/assets/plane.obj deleted file mode 100644 index ec41f06..0000000 --- a/assets/plane.obj +++ /dev/null @@ -1,1098 +0,0 @@ -# Blender 4.1.0 -# www.blender.org -mtllib plane.mtl -o Cone -v -0.432970 -0.059419 2.009836 -v -0.286523 0.234050 2.008871 -v 0.067030 0.355609 2.008471 -v 0.420584 0.234050 2.008871 -v 0.567030 -0.059419 2.009836 -v 0.420584 -0.352889 2.010802 -v 0.067030 -0.474448 2.011202 -v -0.286523 -0.352889 2.010802 -v 0.061414 -0.314044 3.067334 -vn -0.7914 0.3964 0.4654 -vn -0.2787 0.8123 0.5123 -vn 0.2783 0.8111 0.5144 -vn 0.7882 0.3949 0.4720 -vn 0.8524 -0.4244 0.3054 -vn 0.3219 -0.9358 0.1438 -vn -0.0000 -0.0033 -1.0000 -vn -0.3221 -0.9362 0.1405 -vn -0.8548 -0.4256 0.2971 -vt 0.250000 0.490000 -vt 0.250000 0.250000 -vt 0.419706 0.419706 -vt 0.490000 0.250000 -vt 0.419706 0.080294 -vt 0.250000 0.010000 -vt 0.080294 0.080294 -vt 0.010000 0.250000 -vt 0.750000 0.490000 -vt 0.919706 0.419706 -vt 0.990000 0.250000 -vt 0.919706 0.080294 -vt 0.750000 0.010000 -vt 0.580294 0.080294 -vt 0.510000 0.250000 -vt 0.580294 0.419706 -vt 0.080294 0.419706 -s 0 -usemtl PlaneRed -f 1/1/1 9/2/1 2/3/1 -f 2/3/2 9/2/2 3/4/2 -f 3/4/3 9/2/3 4/5/3 -f 4/5/4 9/2/4 5/6/4 -f 5/6/5 9/2/5 6/7/5 -f 6/7/6 9/2/6 7/8/6 -f 1/9/7 2/10/7 3/11/7 4/12/7 5/13/7 6/14/7 7/15/7 8/16/7 -f 7/8/8 9/2/8 8/17/8 -f 8/17/9 9/2/9 1/1/9 -o Cone.001 -v -0.432970 -0.061584 -0.829047 -v -0.286524 0.231888 -0.830012 -v 0.067029 0.353448 -0.830413 -v 0.420583 0.231888 -0.830013 -v 0.567029 -0.061584 -0.829048 -v 0.420583 -0.355057 -0.828082 -v 0.067029 -0.476617 -0.827682 -v -0.286524 -0.355057 -0.828082 -v 0.072508 0.316226 -2.803243 -v 0.290628 0.263376 -1.566722 -v -0.275773 0.055910 -1.442996 -v 0.412652 0.056359 -1.445343 -v 0.337972 -0.195737 -1.296859 -v 0.068130 -0.317356 -1.224518 -v -0.201684 -0.196430 -1.294819 -v -0.152729 0.263317 -1.565345 -v 0.069196 0.338733 -1.610368 -v 0.205271 0.284058 -2.050610 -v -0.146307 0.152676 -1.948637 -v 0.285259 0.153686 -1.953912 -v 0.244579 -0.015624 -1.826818 -v 0.069615 -0.102439 -1.760036 -v -0.105875 -0.017296 -1.821897 -v -0.064966 0.283933 -2.047687 -v 0.070509 0.329807 -2.083426 -vn -0.8859 0.4416 -0.1423 -vn -0.3251 0.9455 -0.0187 -vn 0.3251 0.9455 -0.0169 -vn 0.8865 0.4419 -0.1375 -vn 0.8544 -0.4273 -0.2958 -vn 0.3037 -0.8845 -0.3541 -vn -0.0000 0.0033 1.0000 -vn -0.3035 -0.8840 -0.3556 -vn -0.8531 -0.4267 -0.3001 -vt 0.250000 0.353893 -vt 0.314981 0.314981 -vt 0.250000 0.250000 -vt 0.337568 0.250000 -vt 0.314730 0.185270 -vt 0.250000 0.146748 -vt 0.166106 0.166106 -vt 0.123267 0.250000 -vt 0.750000 0.490000 -vt 0.580294 0.419706 -vt 0.510000 0.250000 -vt 0.580294 0.080294 -vt 0.750000 0.010000 -vt 0.919706 0.080294 -vt 0.990000 0.250000 -vt 0.919706 0.419706 -vt 0.165683 0.334317 -vt 0.419706 0.419706 -vt 0.490000 0.250000 -vt 0.395116 0.250000 -vt 0.356464 0.356464 -vt 0.010000 0.250000 -vt 0.080294 0.419706 -vt 0.120396 0.379604 -vt 0.058210 0.250000 -vt 0.080294 0.080294 -vt 0.120571 0.120571 -vt 0.250000 0.010000 -vt 0.250000 0.084922 -vt 0.250000 0.490000 -vt 0.250000 0.415363 -vt 0.419706 0.080294 -vt 0.356346 0.143654 -s 0 -usemtl PlaneRed -f 28/18/10 33/19/10 18/20/10 -f 33/19/11 34/21/11 18/20/11 -f 34/21/12 27/22/12 18/20/12 -f 27/22/13 29/23/13 18/20/13 -f 29/23/14 30/24/14 18/20/14 -f 30/24/15 31/25/15 18/20/15 -f 10/26/16 17/27/16 16/28/16 15/29/16 14/30/16 13/31/16 12/32/16 11/33/16 -f 31/25/17 32/34/17 18/20/17 -f 32/34/18 28/18/18 18/20/18 -f 11/35/11 12/36/11 26/37/11 25/38/11 -f 16/39/17 17/40/17 24/41/17 23/42/17 -f 15/43/15 16/39/15 23/42/15 22/44/15 -f 14/45/14 15/43/14 22/44/14 21/46/14 -f 10/47/10 11/35/10 25/38/10 20/48/10 -f 17/40/18 10/47/18 20/48/18 24/41/18 -f 12/36/12 13/49/12 19/50/12 26/37/12 -f 13/49/13 14/45/13 21/46/13 19/50/13 -f 25/38/11 26/37/11 34/21/11 33/19/11 -f 23/42/17 24/41/17 32/34/17 31/25/17 -f 22/44/15 23/42/15 31/25/15 30/24/15 -f 21/46/14 22/44/14 30/24/14 29/23/14 -f 20/48/10 25/38/10 33/19/10 28/18/10 -f 24/41/18 20/48/18 28/18/18 32/34/18 -f 26/37/12 19/50/12 27/22/12 34/21/12 -f 19/50/13 21/46/13 29/23/13 27/22/13 -o Cylinder.001 -v -0.432970 -0.062143 0.594247 -v -0.432970 -0.058853 1.067808 -v -0.286523 0.231327 0.593789 -v -0.286523 0.234617 1.067350 -v 0.067030 0.352886 0.593600 -v 0.067030 0.356176 1.067161 -v 0.420583 0.231327 0.593789 -v 0.420583 0.234617 1.067350 -v 0.567030 -0.062143 0.594246 -v 0.567030 -0.058853 1.067807 -v 0.420583 -0.355612 0.594704 -v 0.420583 -0.352322 1.068265 -v 0.067030 -0.477172 0.594893 -v 0.067030 -0.473882 1.068454 -v -0.286523 -0.355612 0.594704 -v -0.286523 -0.352322 1.068265 -v 0.120380 0.334543 0.593629 -v 0.123334 0.336817 1.067191 -v -0.284133 -0.356434 0.594705 -v -0.281179 -0.354160 1.068268 -v -0.003962 0.328477 0.593638 -v -0.006254 0.330979 1.067200 -v 0.147249 -0.449591 0.594850 -v 0.144957 -0.447089 1.068412 -v 0.025192 0.169174 1.067452 -v 0.026143 0.173570 0.593879 -v 0.190411 0.310465 0.593666 -v 0.186421 0.315127 1.067225 -v 0.215731 -0.426045 0.594813 -v 0.211835 -0.424095 1.068376 -v -0.038502 -0.440888 0.594837 -v -0.036164 -0.438401 1.068399 -v -0.057677 0.030390 0.594102 -v -0.068898 0.306151 0.593673 -v -0.066624 0.310223 1.067233 -v -0.055291 0.031695 1.067667 -vn -0.8948 0.4465 -0.0031 -vn -0.3251 0.9456 -0.0066 -vn 0.3251 0.9456 -0.0066 -vn 0.8948 0.4465 -0.0031 -vn 0.8948 -0.4465 0.0031 -vn 0.3251 -0.9456 0.0066 -vn -0.0000 0.0016 1.0000 -vn -0.3252 -0.9456 0.0066 -vn -0.8948 -0.4465 0.0031 -vn -0.0000 -0.0016 -1.0000 -vn -0.3251 -0.9456 0.0066 -vt 1.000000 0.500000 -vt 1.000000 1.000000 -vt 0.875000 1.000000 -vt 0.875000 0.500000 -vt 0.775099 0.500000 -vt 0.775910 1.000000 -vt 0.750000 1.000000 -vt 0.750000 0.500000 -vt 0.706378 0.500000 -vt 0.707789 1.000000 -vt 0.625000 1.000000 -vt 0.625000 0.500000 -vt 0.500000 1.000000 -vt 0.500000 0.500000 -vt 0.375000 1.000000 -vt 0.375000 0.500000 -vt 0.278362 0.500000 -vt 0.277551 1.000000 -vt 0.250000 1.000000 -vt 0.250000 0.500000 -vt 0.302361 0.308714 -vt 0.079231 0.417141 -vt 0.030517 0.299533 -vt 0.125845 0.500000 -vt 0.126889 1.000000 -vt 0.125000 1.000000 -vt 0.125000 0.500000 -vt 0.000000 1.000000 -vt 0.000000 0.500000 -vt 0.539565 0.178623 -vt 0.965469 0.190777 -vt 0.919706 0.080294 -vt 0.750000 0.010000 -vt 0.580294 0.080294 -vt 0.212689 0.500000 -vt 0.213516 1.000000 -vt 0.475430 0.285176 -vt 0.381862 0.270082 -vt 0.478806 0.222974 -vt 0.490000 0.250000 -vt 0.730093 1.000000 -vt 0.731138 0.500000 -vt 0.886306 0.269626 -vt 0.975885 0.284076 -vt 0.990000 0.250000 -vt 0.979393 0.224392 -vt 0.466262 0.192692 -vt 0.038790 0.180494 -vt 0.080294 0.080294 -vt 0.250000 0.010000 -vt 0.419706 0.080294 -vt 0.302574 0.500000 -vt 0.301196 1.000000 -vt 0.803509 0.309860 -vt 0.525949 0.211495 -vt 0.510000 0.250000 -vt 0.530982 0.300655 -vt 0.463427 0.314154 -vt 0.798058 0.500000 -vt 0.797254 1.000000 -vt 0.962975 0.315246 -vt 0.025494 0.212595 -vt 0.419706 0.419706 -vt 0.250000 0.490000 -vt 0.080294 0.419706 -vt 0.750000 0.490000 -vt 0.919706 0.419706 -vt 0.579819 0.418559 -vt 0.580294 0.419706 -vt 0.010000 0.250000 -s 0 -usemtl PlaneRed.001 -f 35/51/19 36/52/19 38/53/19 37/54/19 -f 55/55/20 56/56/20 40/57/20 39/58/20 -f 61/59/21 62/60/21 42/61/21 41/62/21 -f 41/62/22 42/61/22 44/63/22 43/64/22 -f 43/64/23 44/63/23 46/65/23 45/66/23 -f 57/67/24 58/68/24 48/69/24 47/70/24 -f 70/71/25 54/72/25 66/73/25 -f 53/74/26 54/75/26 50/76/26 49/77/26 -f 49/77/27 50/76/27 36/78/27 35/79/27 -f 63/80/28 61/81/28 41/82/28 43/83/28 45/84/28 -f 65/85/29 66/86/29 54/75/29 53/74/29 -f 56/87/25 59/88/25 52/89/25 40/90/25 -f 39/58/21 40/57/21 52/91/21 51/92/21 -f 60/93/28 55/94/28 39/95/28 51/96/28 -f 62/97/25 64/98/25 46/99/25 44/100/25 42/101/25 -f 63/102/24 64/103/24 58/68/24 57/67/24 -f 67/104/28 60/93/28 57/105/28 47/106/28 65/107/28 -f 69/108/25 70/71/25 59/88/25 56/87/25 -f 68/109/20 69/110/20 56/56/20 55/55/20 -f 67/104/28 68/111/28 55/94/28 60/93/28 -f 45/66/24 46/65/24 64/103/24 63/102/24 -f 52/89/25 59/88/25 58/112/25 64/98/25 62/97/25 -f 51/92/21 52/91/21 62/60/21 61/59/21 -f 60/93/28 51/96/28 61/81/28 63/80/28 57/105/28 -f 38/113/25 36/114/25 50/115/25 54/72/25 70/71/25 69/108/25 -f 37/54/20 38/53/20 69/110/20 68/109/20 -f 35/116/28 37/117/28 68/111/28 67/104/28 53/118/28 49/119/28 -f 59/88/25 70/71/25 66/73/25 48/120/25 58/112/25 -f 47/70/29 48/69/29 66/86/29 65/85/29 -f 53/118/28 67/104/28 65/107/28 -o Cylinder.002 -v -0.432970 -0.062143 0.122582 -v -0.432970 -0.058853 0.596142 -v -0.286523 0.231327 0.122124 -v -0.286523 0.234617 0.595685 -v 0.067030 0.352886 0.121935 -v 0.067030 0.356176 0.595496 -v 0.420583 0.231327 0.122124 -v 0.420583 0.234617 0.595685 -v 0.567030 -0.062143 0.122581 -v 0.567030 -0.058853 0.596142 -v 0.420583 -0.355612 0.123038 -v 0.420583 -0.352322 0.596599 -v 0.067030 -0.477172 0.123228 -v 0.067030 -0.473882 0.596789 -v -0.286523 -0.355612 0.123038 -v -0.286523 -0.352322 0.596599 -vn -0.8948 0.4465 -0.0031 -vn -0.3251 0.9456 -0.0066 -vn 0.3251 0.9456 -0.0066 -vn 0.8948 0.4465 -0.0031 -vn 0.8948 -0.4465 0.0031 -vn 0.3251 -0.9456 0.0066 -vn -0.0000 0.0016 1.0000 -vn -0.3251 -0.9456 0.0066 -vn -0.8948 -0.4465 0.0031 -vn -0.0000 -0.0016 -1.0000 -vt 1.000000 0.500000 -vt 1.000000 1.000000 -vt 0.875000 1.000000 -vt 0.875000 0.500000 -vt 0.750000 1.000000 -vt 0.750000 0.500000 -vt 0.625000 1.000000 -vt 0.625000 0.500000 -vt 0.500000 1.000000 -vt 0.500000 0.500000 -vt 0.375000 1.000000 -vt 0.375000 0.500000 -vt 0.250000 1.000000 -vt 0.250000 0.500000 -vt 0.419706 0.419706 -vt 0.250000 0.490000 -vt 0.080294 0.419706 -vt 0.010000 0.250000 -vt 0.080294 0.080294 -vt 0.250000 0.010000 -vt 0.419706 0.080294 -vt 0.490000 0.250000 -vt 0.125000 1.000000 -vt 0.125000 0.500000 -vt 0.000000 1.000000 -vt 0.000000 0.500000 -vt 0.750000 0.490000 -vt 0.919706 0.419706 -vt 0.990000 0.250000 -vt 0.919706 0.080294 -vt 0.750000 0.010000 -vt 0.580294 0.080294 -vt 0.510000 0.250000 -vt 0.580294 0.419706 -s 0 -usemtl PlaneRed -f 71/121/30 72/122/30 74/123/30 73/124/30 -f 73/124/31 74/123/31 76/125/31 75/126/31 -f 75/126/32 76/125/32 78/127/32 77/128/32 -f 77/128/33 78/127/33 80/129/33 79/130/33 -f 79/130/34 80/129/34 82/131/34 81/132/34 -f 81/132/35 82/131/35 84/133/35 83/134/35 -f 74/135/36 72/136/36 86/137/36 84/138/36 82/139/36 80/140/36 78/141/36 76/142/36 -f 83/134/37 84/133/37 86/143/37 85/144/37 -f 85/144/38 86/143/38 72/145/38 71/146/38 -f 71/147/39 73/148/39 75/149/39 77/150/39 79/151/39 81/152/39 83/153/39 85/154/39 -o Cylinder.003 -v -0.432970 -0.062143 1.064410 -v -0.432970 -0.058852 1.537971 -v -0.286523 0.231327 1.063952 -v -0.286523 0.234617 1.537513 -v 0.067030 0.352886 1.063763 -v 0.067030 0.356176 1.537324 -v 0.420583 0.231327 1.063952 -v 0.420583 0.234617 1.537513 -v 0.567030 -0.062143 1.064410 -v 0.567030 -0.058852 1.537971 -v 0.420583 -0.355612 1.064867 -v 0.420583 -0.352322 1.538428 -v 0.067030 -0.477172 1.065056 -v 0.067030 -0.473881 1.538617 -v -0.286523 -0.355612 1.064867 -v -0.286523 -0.352322 1.538428 -v 0.121721 0.334082 1.063793 -v 0.124675 0.336356 1.537355 -v -0.282793 -0.356895 1.064869 -v -0.279839 -0.354621 1.538431 -v -0.005642 0.327900 1.063802 -v -0.007934 0.330402 1.537364 -v 0.145569 -0.450168 1.065014 -v 0.143277 -0.447666 1.538576 -v 0.024248 0.164810 1.537622 -v 0.025199 0.169206 1.064049 -v 0.186564 0.311788 1.063827 -v 0.182574 0.316449 1.537386 -v 0.211974 -0.427337 1.064979 -v 0.208077 -0.425386 1.538542 -v -0.036046 -0.441732 1.065001 -v -0.033707 -0.439245 1.538563 -v -0.055308 0.031686 1.064264 -v -0.066510 0.306972 1.063835 -v -0.064236 0.311044 1.537394 -v -0.052922 0.032990 1.537828 -vn -0.8948 0.4465 -0.0031 -vn -0.3251 0.9456 -0.0066 -vn 0.3251 0.9456 -0.0066 -vn 0.8948 0.4465 -0.0031 -vn 0.8948 -0.4465 0.0031 -vn 0.3251 -0.9456 0.0066 -vn -0.0000 0.0016 1.0000 -vn -0.3252 -0.9456 0.0066 -vn -0.8948 -0.4465 0.0031 -vn -0.0000 -0.0016 -1.0000 -vn -0.3251 -0.9456 0.0066 -vt 1.000000 0.500000 -vt 1.000000 1.000000 -vt 0.875000 1.000000 -vt 0.875000 0.500000 -vt 0.775693 0.500000 -vt 0.776504 1.000000 -vt 0.750000 1.000000 -vt 0.750000 0.500000 -vt 0.707738 0.500000 -vt 0.709149 1.000000 -vt 0.625000 1.000000 -vt 0.625000 0.500000 -vt 0.500000 1.000000 -vt 0.500000 0.500000 -vt 0.375000 1.000000 -vt 0.375000 0.500000 -vt 0.277768 0.500000 -vt 0.276957 1.000000 -vt 0.250000 1.000000 -vt 0.250000 0.500000 -vt 0.303110 0.307577 -vt 0.078965 0.416497 -vt 0.030029 0.298354 -vt 0.126319 0.500000 -vt 0.127364 1.000000 -vt 0.125000 1.000000 -vt 0.125000 0.500000 -vt 0.000000 1.000000 -vt 0.000000 0.500000 -vt 0.538818 0.180427 -vt 0.966234 0.192624 -vt 0.919706 0.080294 -vt 0.750000 0.010000 -vt 0.580294 0.080294 -vt 0.213557 0.500000 -vt 0.214384 1.000000 -vt 0.475096 0.285983 -vt 0.379338 0.270535 -vt 0.478539 0.222330 -vt 0.490000 0.250000 -vt 0.729619 1.000000 -vt 0.730664 0.500000 -vt 0.883783 0.270079 -vt 0.975551 0.284883 -vt 0.990000 0.250000 -vt 0.979126 0.223748 -vt 0.467027 0.194539 -vt 0.038043 0.182297 -vt 0.080294 0.080294 -vt 0.250000 0.010000 -vt 0.419706 0.080294 -vt 0.301245 0.500000 -vt 0.299868 1.000000 -vt 0.804258 0.308723 -vt 0.525615 0.212301 -vt 0.510000 0.250000 -vt 0.530494 0.299476 -vt 0.463902 0.313008 -vt 0.797213 0.500000 -vt 0.796409 1.000000 -vt 0.963449 0.314099 -vt 0.025160 0.213401 -vt 0.419706 0.419706 -vt 0.250000 0.490000 -vt 0.080294 0.419706 -vt 0.750000 0.490000 -vt 0.919706 0.419706 -vt 0.579552 0.417915 -vt 0.580294 0.419706 -vt 0.010000 0.250000 -s 0 -usemtl PlaneRed.002 -f 87/155/40 88/156/40 90/157/40 89/158/40 -f 107/159/41 108/160/41 92/161/41 91/162/41 -f 113/163/42 114/164/42 94/165/42 93/166/42 -f 93/166/43 94/165/43 96/167/43 95/168/43 -f 95/168/44 96/167/44 98/169/44 97/170/44 -f 109/171/45 110/172/45 100/173/45 99/174/45 -f 122/175/46 106/176/46 118/177/46 -f 105/178/47 106/179/47 102/180/47 101/181/47 -f 101/181/48 102/180/48 88/182/48 87/183/48 -f 115/184/49 113/185/49 93/186/49 95/187/49 97/188/49 -f 117/189/50 118/190/50 106/179/50 105/178/50 -f 108/191/46 111/192/46 104/193/46 92/194/46 -f 91/162/42 92/161/42 104/195/42 103/196/42 -f 112/197/49 107/198/49 91/199/49 103/200/49 -f 114/201/46 116/202/46 98/203/46 96/204/46 94/205/46 -f 115/206/45 116/207/45 110/172/45 109/171/45 -f 119/208/49 112/197/49 109/209/49 99/210/49 117/211/49 -f 121/212/46 122/175/46 111/192/46 108/191/46 -f 120/213/41 121/214/41 108/160/41 107/159/41 -f 119/208/49 120/215/49 107/198/49 112/197/49 -f 97/170/45 98/169/45 116/207/45 115/206/45 -f 104/193/46 111/192/46 110/216/46 116/202/46 114/201/46 -f 103/196/42 104/195/42 114/164/42 113/163/42 -f 112/197/49 103/200/49 113/185/49 115/184/49 109/209/49 -f 90/217/46 88/218/46 102/219/46 106/176/46 122/175/46 121/212/46 -f 89/158/41 90/157/41 121/214/41 120/213/41 -f 87/220/49 89/221/49 120/215/49 119/208/49 105/222/49 101/223/49 -f 111/192/46 122/175/46 118/177/46 100/224/46 110/216/46 -f 99/174/50 100/173/50 118/190/50 117/189/50 -f 105/222/49 119/208/49 117/211/49 -o Cylinder.004 -v -0.432970 -0.062142 1.535761 -v -0.432970 -0.058852 2.009322 -v -0.286523 0.231327 1.535303 -v -0.286523 0.234617 2.008864 -v 0.067030 0.352886 1.535114 -v 0.067030 0.356176 2.008675 -v 0.420583 0.231327 1.535303 -v 0.420583 0.234617 2.008864 -v 0.567030 -0.062142 1.535760 -v 0.567030 -0.058852 2.009321 -v 0.420583 -0.355612 1.536217 -v 0.420583 -0.352322 2.009778 -v 0.067030 -0.477172 1.536407 -v 0.067030 -0.473881 2.009968 -v -0.286523 -0.355612 1.536217 -v -0.286523 -0.352322 2.009778 -v 0.123066 0.333620 1.535144 -v 0.126019 0.335894 2.008706 -v -0.281448 -0.357357 1.536220 -v -0.278494 -0.355082 2.009783 -v -0.007327 0.327321 1.535154 -v -0.009618 0.329823 2.008716 -v 0.143884 -0.450747 1.536366 -v 0.141593 -0.448245 2.009928 -v 0.023302 0.160435 2.008980 -v 0.024252 0.164830 1.535407 -v 0.182707 0.313114 1.535176 -v 0.178717 0.317776 2.008734 -v 0.208207 -0.428632 1.536331 -v 0.204310 -0.426681 2.009894 -v -0.033583 -0.442578 1.536353 -v -0.031245 -0.440092 2.009915 -v -0.052933 0.032984 1.535612 -v -0.064115 0.307795 1.535184 -v -0.061841 0.311868 2.008744 -v -0.050547 0.034289 2.009176 -vn -0.8948 0.4465 -0.0031 -vn -0.3251 0.9456 -0.0066 -vn 0.3251 0.9456 -0.0066 -vn 0.8948 0.4465 -0.0031 -vn 0.8948 -0.4465 0.0031 -vn 0.3251 -0.9456 0.0066 -vn -0.0000 0.0016 1.0000 -vn -0.3251 -0.9457 0.0066 -vn -0.8948 -0.4465 0.0031 -vn -0.0000 -0.0016 -1.0000 -vn -0.3251 -0.9456 0.0066 -vt 1.000000 0.500000 -vt 1.000000 1.000000 -vt 0.875000 1.000000 -vt 0.875000 0.500000 -vt 0.776289 0.500000 -vt 0.777099 1.000000 -vt 0.750000 1.000000 -vt 0.750000 0.500000 -vt 0.709102 0.500000 -vt 0.710513 1.000000 -vt 0.625000 1.000000 -vt 0.625000 0.500000 -vt 0.500000 1.000000 -vt 0.500000 0.500000 -vt 0.375000 1.000000 -vt 0.375000 0.500000 -vt 0.277172 0.500000 -vt 0.276362 1.000000 -vt 0.250000 1.000000 -vt 0.250000 0.500000 -vt 0.303861 0.306437 -vt 0.078698 0.415852 -vt 0.029539 0.297172 -vt 0.126794 0.500000 -vt 0.127839 1.000000 -vt 0.125000 1.000000 -vt 0.125000 0.500000 -vt 0.000000 1.000000 -vt 0.000000 0.500000 -vt 0.538069 0.182235 -vt 0.967001 0.194475 -vt 0.919706 0.080294 -vt 0.750000 0.010000 -vt 0.580294 0.080294 -vt 0.214428 0.500000 -vt 0.215254 1.000000 -vt 0.474761 0.286791 -vt 0.376808 0.270990 -vt 0.478272 0.221685 -vt 0.490000 0.250000 -vt 0.729144 1.000000 -vt 0.730188 0.500000 -vt 0.881252 0.270533 -vt 0.975216 0.285691 -vt 0.990000 0.250000 -vt 0.978859 0.223103 -vt 0.467794 0.196390 -vt 0.037294 0.184106 -vt 0.080294 0.080294 -vt 0.250000 0.010000 -vt 0.419706 0.080294 -vt 0.299913 0.500000 -vt 0.298536 1.000000 -vt 0.805009 0.307583 -vt 0.525280 0.213110 -vt 0.510000 0.250000 -vt 0.530004 0.298295 -vt 0.464378 0.311858 -vt 0.796367 0.500000 -vt 0.795563 1.000000 -vt 0.963926 0.312950 -vt 0.024825 0.214210 -vt 0.419706 0.419706 -vt 0.250000 0.490000 -vt 0.080294 0.419706 -vt 0.750000 0.490000 -vt 0.919706 0.419706 -vt 0.579285 0.417270 -vt 0.580294 0.419706 -vt 0.010000 0.250000 -s 0 -usemtl PlaneRed.003 -f 123/225/51 124/226/51 126/227/51 125/228/51 -f 143/229/52 144/230/52 128/231/52 127/232/52 -f 149/233/53 150/234/53 130/235/53 129/236/53 -f 129/236/54 130/235/54 132/237/54 131/238/54 -f 131/238/55 132/237/55 134/239/55 133/240/55 -f 145/241/56 146/242/56 136/243/56 135/244/56 -f 158/245/57 142/246/57 154/247/57 -f 141/248/58 142/249/58 138/250/58 137/251/58 -f 137/251/59 138/250/59 124/252/59 123/253/59 -f 151/254/60 149/255/60 129/256/60 131/257/60 133/258/60 -f 153/259/61 154/260/61 142/249/61 141/248/61 -f 144/261/57 147/262/57 140/263/57 128/264/57 -f 127/232/53 128/231/53 140/265/53 139/266/53 -f 148/267/60 143/268/60 127/269/60 139/270/60 -f 150/271/57 152/272/57 134/273/57 132/274/57 130/275/57 -f 151/276/56 152/277/56 146/242/56 145/241/56 -f 155/278/60 148/267/60 145/279/60 135/280/60 153/281/60 -f 157/282/57 158/245/57 147/262/57 144/261/57 -f 156/283/52 157/284/52 144/230/52 143/229/52 -f 155/278/60 156/285/60 143/268/60 148/267/60 -f 133/240/56 134/239/56 152/277/56 151/276/56 -f 140/263/57 147/262/57 146/286/57 152/272/57 150/271/57 -f 139/266/53 140/265/53 150/234/53 149/233/53 -f 148/267/60 139/270/60 149/255/60 151/254/60 145/279/60 -f 126/287/57 124/288/57 138/289/57 142/246/57 158/245/57 157/282/57 -f 125/228/52 126/227/52 157/284/52 156/283/52 -f 123/290/60 125/291/60 156/285/60 155/278/60 141/292/60 137/293/60 -f 147/262/57 158/245/57 154/247/57 136/294/57 146/286/57 -f 135/244/61 136/243/61 154/260/61 153/259/61 -f 141/292/60 155/278/60 153/281/60 -o Cylinder.006 -v -0.432970 -0.062143 -0.352687 -v -0.432970 -0.058853 0.120874 -v -0.286524 0.231327 -0.353144 -v -0.286523 0.234617 0.120417 -v 0.067029 0.352886 -0.353334 -v 0.067030 0.356176 0.120227 -v 0.420583 0.231327 -0.353144 -v 0.420583 0.234617 0.120417 -v 0.567029 -0.062143 -0.352687 -v 0.567030 -0.058853 0.120874 -v 0.420583 -0.355612 -0.352230 -v 0.420583 -0.352322 0.121331 -v 0.067029 -0.477172 -0.352041 -v 0.067030 -0.473882 0.121520 -v -0.286524 -0.355612 -0.352230 -v -0.286523 -0.352322 0.121331 -vn -0.8948 0.4465 -0.0031 -vn -0.3251 0.9456 -0.0066 -vn 0.3251 0.9456 -0.0066 -vn 0.8948 0.4465 -0.0031 -vn 0.8948 -0.4465 0.0031 -vn 0.3251 -0.9456 0.0066 -vn -0.0000 0.0016 1.0000 -vn -0.3251 -0.9456 0.0066 -vn -0.8948 -0.4465 0.0031 -vn -0.0000 -0.0016 -1.0000 -vt 1.000000 0.500000 -vt 1.000000 1.000000 -vt 0.875000 1.000000 -vt 0.875000 0.500000 -vt 0.750000 1.000000 -vt 0.750000 0.500000 -vt 0.625000 1.000000 -vt 0.625000 0.500000 -vt 0.500000 1.000000 -vt 0.500000 0.500000 -vt 0.375000 1.000000 -vt 0.375000 0.500000 -vt 0.250000 1.000000 -vt 0.250000 0.500000 -vt 0.419706 0.419706 -vt 0.250000 0.490000 -vt 0.080294 0.419706 -vt 0.010000 0.250000 -vt 0.080294 0.080294 -vt 0.250000 0.010000 -vt 0.419706 0.080294 -vt 0.490000 0.250000 -vt 0.125000 1.000000 -vt 0.125000 0.500000 -vt 0.000000 1.000000 -vt 0.000000 0.500000 -vt 0.750000 0.490000 -vt 0.919706 0.419706 -vt 0.990000 0.250000 -vt 0.919706 0.080294 -vt 0.750000 0.010000 -vt 0.580294 0.080294 -vt 0.510000 0.250000 -vt 0.580294 0.419706 -s 0 -usemtl PlaneRed -f 159/295/62 160/296/62 162/297/62 161/298/62 -f 161/298/63 162/297/63 164/299/63 163/300/63 -f 163/300/64 164/299/64 166/301/64 165/302/64 -f 165/302/65 166/301/65 168/303/65 167/304/65 -f 167/304/66 168/303/66 170/305/66 169/306/66 -f 169/306/67 170/305/67 172/307/67 171/308/67 -f 162/309/68 160/310/68 174/311/68 172/312/68 170/313/68 168/314/68 166/315/68 164/316/68 -f 171/308/69 172/307/69 174/317/69 173/318/69 -f 173/318/70 174/317/70 160/319/70 159/320/70 -f 159/321/71 161/322/71 163/323/71 165/324/71 167/325/71 169/326/71 171/327/71 173/328/71 -o Cylinder.007 -v -0.432970 -0.062143 -0.827917 -v -0.432970 -0.058853 -0.354356 -v -0.286524 0.231327 -0.828374 -v -0.286524 0.234617 -0.354813 -v 0.067029 0.352886 -0.828564 -v 0.067029 0.356176 -0.355003 -v 0.420583 0.231327 -0.828374 -v 0.420583 0.234617 -0.354813 -v 0.567029 -0.062143 -0.827917 -v 0.567029 -0.058853 -0.354356 -v 0.420583 -0.355612 -0.827460 -v 0.420583 -0.352322 -0.353899 -v 0.067029 -0.477172 -0.827270 -v 0.067029 -0.473882 -0.353709 -v -0.286524 -0.355612 -0.827460 -v -0.286524 -0.352322 -0.353899 -vn -0.8948 0.4465 -0.0031 -vn -0.3251 0.9456 -0.0066 -vn 0.3251 0.9456 -0.0066 -vn 0.8948 0.4465 -0.0031 -vn 0.8948 -0.4465 0.0031 -vn 0.3251 -0.9456 0.0066 -vn -0.0000 0.0016 1.0000 -vn -0.3251 -0.9456 0.0066 -vn -0.8948 -0.4465 0.0031 -vn -0.0000 -0.0016 -1.0000 -vt 1.000000 0.500000 -vt 1.000000 1.000000 -vt 0.875000 1.000000 -vt 0.875000 0.500000 -vt 0.750000 1.000000 -vt 0.750000 0.500000 -vt 0.625000 1.000000 -vt 0.625000 0.500000 -vt 0.500000 1.000000 -vt 0.500000 0.500000 -vt 0.375000 1.000000 -vt 0.375000 0.500000 -vt 0.250000 1.000000 -vt 0.250000 0.500000 -vt 0.419706 0.419706 -vt 0.250000 0.490000 -vt 0.080294 0.419706 -vt 0.010000 0.250000 -vt 0.080294 0.080294 -vt 0.250000 0.010000 -vt 0.419706 0.080294 -vt 0.490000 0.250000 -vt 0.125000 1.000000 -vt 0.125000 0.500000 -vt 0.000000 1.000000 -vt 0.000000 0.500000 -vt 0.750000 0.490000 -vt 0.919706 0.419706 -vt 0.990000 0.250000 -vt 0.919706 0.080294 -vt 0.750000 0.010000 -vt 0.580294 0.080294 -vt 0.510000 0.250000 -vt 0.580294 0.419706 -s 0 -usemtl PlaneRed -f 175/329/72 176/330/72 178/331/72 177/332/72 -f 177/332/73 178/331/73 180/333/73 179/334/73 -f 179/334/74 180/333/74 182/335/74 181/336/74 -f 181/336/75 182/335/75 184/337/75 183/338/75 -f 183/338/76 184/337/76 186/339/76 185/340/76 -f 185/340/77 186/339/77 188/341/77 187/342/77 -f 178/343/78 176/344/78 190/345/78 188/346/78 186/347/78 184/348/78 182/349/78 180/350/78 -f 187/342/79 188/341/79 190/351/79 189/352/79 -f 189/352/80 190/351/80 176/353/80 175/354/80 -f 175/355/81 177/356/81 179/357/81 181/358/81 183/359/81 185/360/81 187/361/81 189/362/81 -o Plane.001 -v -1.602615 0.060623 0.060809 -v -1.602615 0.060623 -0.939191 -v -0.369508 0.060623 1.253489 -v -0.354182 0.060623 -0.939191 -vn -0.0000 1.0000 -0.0000 -vt 0.000000 0.000000 -vt 0.000000 1.000000 -vt 1.000000 1.000000 -vt 1.000000 0.000000 -s 0 -usemtl PlaneOrange.003 -f 191/363/82 193/364/82 194/365/82 192/366/82 -o Plane.002 -v -0.660390 0.294514 -2.440039 -v -0.660390 0.294514 -2.654411 -v -0.087048 0.294514 -1.958317 -v 0.049061 0.294514 -2.654411 -vn -0.0000 1.0000 -0.0000 -vt 0.000000 0.000000 -vt 0.000000 1.000000 -vt 1.000000 1.000000 -vt 1.000000 0.000000 -s 0 -usemtl PlaneOrange -f 195/367/83 197/368/83 198/369/83 196/370/83 -o Plane.003 -v 0.794448 0.294514 -2.440039 -v 0.794448 0.294514 -2.654411 -v 0.221106 0.294514 -1.958317 -v 0.084997 0.294514 -2.654411 -vn -0.0000 1.0000 -0.0000 -vt 0.000000 0.000000 -vt 1.000000 0.000000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -s 0 -usemtl PlaneOrange -f 199/371/84 200/372/84 202/373/84 201/374/84 -o Plane.004 -v 0.067029 0.325952 -1.209011 -v 0.067029 0.323266 -2.783920 -v 0.067029 0.490476 -1.773318 -v 0.067029 1.250201 -2.784954 -vn 1.0000 -0.0000 -0.0000 -vt 0.000000 0.000000 -vt 1.000000 0.000000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -s 0 -usemtl PlaneOrange -f 203/375/85 204/376/85 206/377/85 205/378/85 -o Plane.005 -v 1.736675 0.060623 0.060809 -v 1.736675 0.060623 -0.939191 -v 0.503568 0.060623 1.253489 -v 0.488241 0.060623 -0.939191 -vn -0.0000 1.0000 -0.0000 -vt 0.000000 0.000000 -vt 1.000000 0.000000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -s 0 -usemtl PlaneOrange.005 -f 207/379/86 208/380/86 210/381/86 209/382/86 -o Sphere -v 0.030261 0.517321 1.463433 -v -0.002909 0.492096 1.576198 -v -0.029233 0.452807 1.665688 -v -0.046133 0.403299 1.723144 -v 0.007537 0.517321 1.386179 -v -0.046133 0.492096 1.429251 -v -0.088726 0.452806 1.463434 -v -0.116072 0.403299 1.485380 -v 0.007537 0.517321 1.290688 -v -0.046133 0.492096 1.247616 -v -0.088726 0.452806 1.213434 -v -0.116072 0.403299 1.191487 -v 0.030261 0.517321 1.213434 -v -0.002909 0.492096 1.100669 -v -0.029233 0.452806 1.011179 -v -0.046133 0.403299 0.953723 -v 0.067030 0.517321 1.183925 -v 0.067030 0.492096 1.044541 -v 0.067029 0.452806 0.933925 -v 0.067029 0.403299 0.862905 -v 0.067030 0.526013 1.338433 -v 0.103799 0.517321 1.213433 -v 0.136968 0.492096 1.100669 -v 0.163292 0.452806 1.011179 -v 0.180193 0.403299 0.953723 -v 0.126523 0.517321 1.290688 -v 0.180193 0.492096 1.247616 -v 0.222786 0.452806 1.213433 -v 0.250132 0.403299 1.191487 -v 0.126523 0.517321 1.386179 -v 0.180193 0.492096 1.429251 -v 0.222786 0.452806 1.463433 -v 0.250132 0.403299 1.485380 -v 0.103799 0.517321 1.463433 -v 0.136968 0.492096 1.576198 -v 0.163292 0.452807 1.665688 -v 0.180193 0.403299 1.723144 -v 0.067030 0.517321 1.492942 -v 0.067030 0.492096 1.632326 -v 0.067030 0.452807 1.742942 -v 0.067030 0.403299 1.813962 -v -0.051957 0.348420 1.742942 -v -0.125495 0.348419 1.492942 -v -0.125495 0.348419 1.183925 -v -0.051957 0.348419 0.933925 -v 0.067029 0.348419 0.838433 -v 0.186016 0.348419 0.933925 -v 0.259555 0.348419 1.183925 -v 0.259555 0.348419 1.492942 -v 0.186017 0.348420 1.742942 -v 0.067030 0.348420 1.838434 -vn -0.2594 0.9101 0.3232 -vn -0.4171 0.7456 0.5197 -vn -0.0450 0.9974 0.0561 -vn -0.5912 0.3285 0.7366 -vn -0.1415 0.9741 0.1763 -vn -0.5890 0.7893 0.1733 -vn -0.8025 0.5479 0.2361 -vn -0.1173 0.9925 0.0345 -vn -0.9401 0.1995 0.2765 -vn -0.3535 0.9296 0.1040 -vn -0.4254 0.9050 -0.0000 -vn -0.6780 0.7350 -0.0000 -vn -0.8753 0.4835 -0.0000 -vn -0.1446 0.9895 -0.0000 -vn -0.9856 0.1692 -0.0000 -vn -0.9401 0.1995 -0.2765 -vn -0.3535 0.9296 -0.1040 -vn -0.5890 0.7893 -0.1733 -vn -0.8025 0.5479 -0.2361 -vn -0.1173 0.9925 -0.0345 -vn -0.4171 0.7456 -0.5197 -vn -0.0450 0.9974 -0.0561 -vn -0.5912 0.3285 -0.7366 -vn -0.1415 0.9741 -0.1763 -vn -0.2594 0.9101 -0.3232 -vn 0.4171 0.7456 -0.5197 -vn 0.0450 0.9974 -0.0561 -vn 0.5912 0.3285 -0.7366 -vn 0.1415 0.9741 -0.1763 -vn 0.2594 0.9101 -0.3232 -vn 0.5890 0.7893 -0.1733 -vn 0.8025 0.5479 -0.2361 -vn 0.1173 0.9925 -0.0345 -vn 0.9401 0.1995 -0.2765 -vn 0.3535 0.9296 -0.1040 -vn 0.6780 0.7350 -0.0000 -vn 0.8753 0.4835 -0.0000 -vn 0.1446 0.9895 -0.0000 -vn 0.9856 0.1692 -0.0000 -vn 0.4254 0.9050 -0.0000 -vn 0.9401 0.1995 0.2765 -vn 0.3535 0.9296 0.1040 -vn 0.5890 0.7893 0.1733 -vn 0.8025 0.5479 0.2361 -vn 0.1173 0.9925 0.0345 -vn 0.0450 0.9974 0.0561 -vn 0.5912 0.3285 0.7366 -vn 0.1415 0.9741 0.1763 -vn 0.2594 0.9101 0.3232 -vn 0.4171 0.7456 0.5197 -vt 0.700000 0.700000 -vt 0.700000 0.800000 -vt 0.600000 0.800000 -vt 0.600000 0.700000 -vt 0.700000 0.600000 -vt 0.600000 0.600000 -vt 0.700000 0.900000 -vt 0.650000 1.000000 -vt 0.600000 0.900000 -vt 0.700000 0.500000 -vt 0.600000 0.500000 -vt 0.500000 0.800000 -vt 0.500000 0.700000 -vt 0.500000 0.600000 -vt 0.550000 1.000000 -vt 0.500000 0.900000 -vt 0.500000 0.500000 -vt 0.400000 0.900000 -vt 0.400000 0.800000 -vt 0.400000 0.700000 -vt 0.400000 0.600000 -vt 0.450000 1.000000 -vt 0.400000 0.500000 -vt 0.300000 0.600000 -vt 0.300000 0.500000 -vt 0.300000 0.900000 -vt 0.300000 0.800000 -vt 0.300000 0.700000 -vt 0.350000 1.000000 -vt 0.200000 0.700000 -vt 0.200000 0.600000 -vt 0.250000 1.000000 -vt 0.200000 0.900000 -vt 0.200000 0.500000 -vt 0.200000 0.800000 -vt 0.100000 0.700000 -vt 0.100000 0.600000 -vt 0.150000 1.000000 -vt 0.100000 0.900000 -vt 0.100000 0.500000 -vt 0.100000 0.800000 -vt 0.000000 0.800000 -vt 0.000000 0.700000 -vt 0.000000 0.600000 -vt 0.050000 1.000000 -vt 0.000000 0.900000 -vt 0.000000 0.500000 -vt 1.000000 0.700000 -vt 1.000000 0.800000 -vt 0.900000 0.800000 -vt 0.900000 0.700000 -vt 1.000000 0.600000 -vt 0.900000 0.600000 -vt 1.000000 0.900000 -vt 0.950000 1.000000 -vt 0.900000 0.900000 -vt 1.000000 0.500000 -vt 0.900000 0.500000 -vt 0.800000 0.600000 -vt 0.800000 0.500000 -vt 0.800000 0.900000 -vt 0.800000 0.800000 -vt 0.800000 0.700000 -vt 0.850000 1.000000 -vt 0.750000 1.000000 -s 0 -usemtl PlaneLightBlue -f 250/383/87 249/384/87 212/385/87 213/386/87 -f 251/387/88 250/383/88 213/386/88 214/388/88 -f 248/389/89 231/390/89 211/391/89 -f 261/392/90 251/387/90 214/388/90 252/393/90 -f 249/384/91 248/389/91 211/391/91 212/385/91 -f 213/386/92 212/385/92 216/394/92 217/395/92 -f 214/388/93 213/386/93 217/395/93 218/396/93 -f 211/391/94 231/397/94 215/398/94 -f 252/393/95 214/388/95 218/396/95 253/399/95 -f 212/385/96 211/391/96 215/398/96 216/394/96 -f 216/394/97 215/398/97 219/400/97 220/401/97 -f 217/395/98 216/394/98 220/401/98 221/402/98 -f 218/396/99 217/395/99 221/402/99 222/403/99 -f 215/398/100 231/404/100 219/400/100 -f 253/399/101 218/396/101 222/403/101 254/405/101 -f 254/405/102 222/403/102 226/406/102 255/407/102 -f 220/401/103 219/400/103 223/408/103 224/409/103 -f 221/402/104 220/401/104 224/409/104 225/410/104 -f 222/403/105 221/402/105 225/410/105 226/406/105 -f 219/400/106 231/411/106 223/408/106 -f 226/406/107 225/410/107 229/412/107 230/413/107 -f 223/408/108 231/414/108 227/415/108 -f 255/407/109 226/406/109 230/413/109 256/416/109 -f 224/409/110 223/408/110 227/415/110 228/417/110 -f 225/410/111 224/409/111 228/417/111 229/412/111 -f 230/413/112 229/412/112 234/418/112 235/419/112 -f 227/415/113 231/420/113 232/421/113 -f 256/416/114 230/413/114 235/419/114 257/422/114 -f 228/417/115 227/415/115 232/421/115 233/423/115 -f 229/412/116 228/417/116 233/423/116 234/418/116 -f 234/418/117 233/423/117 237/424/117 238/425/117 -f 235/419/118 234/418/118 238/425/118 239/426/118 -f 232/421/119 231/427/119 236/428/119 -f 257/422/120 235/419/120 239/426/120 258/429/120 -f 233/423/121 232/421/121 236/428/121 237/424/121 -f 238/430/122 237/431/122 241/432/122 242/433/122 -f 239/434/123 238/430/123 242/433/123 243/435/123 -f 236/436/124 231/437/124 240/438/124 -f 258/439/125 239/434/125 243/435/125 259/440/125 -f 237/431/126 236/436/126 240/438/126 241/432/126 -f 259/440/127 243/435/127 247/441/127 260/442/127 -f 241/432/128 240/438/128 244/443/128 245/444/128 -f 242/433/129 241/432/129 245/444/129 246/445/129 -f 243/435/130 242/433/130 246/445/130 247/441/130 -f 240/438/131 231/446/131 244/443/131 -f 244/443/132 231/447/132 248/389/132 -f 260/442/133 247/441/133 251/387/133 261/392/133 -f 245/444/134 244/443/134 248/389/134 249/384/134 -f 246/445/135 245/444/135 249/384/135 250/383/135 -f 247/441/136 246/445/136 250/383/136 251/387/136 diff --git a/assets/player.mtl b/assets/player.mtl new file mode 100644 index 0000000..f231bdf --- /dev/null +++ b/assets/player.mtl @@ -0,0 +1,10 @@ +# Blender MTL File: 'None' +# Material Count: 1 + +newmtl None +Ns 500 +Ka 0.8 0.8 0.8 +Kd 0.8 0.8 0.8 +Ks 0.8 0.8 0.8 +d 1 +illum 2 diff --git a/assets/player.obj b/assets/player.obj new file mode 100644 index 0000000..0d168d4 --- /dev/null +++ b/assets/player.obj @@ -0,0 +1,76 @@ +# Blender v3.0.0 OBJ File: '' +# www.blender.org +mtllib plane.mtl +o Cylinder +v 0.000000 -1.500000 -1.000000 +v 0.000000 0.500000 -1.000000 +v 0.707107 -1.500000 -0.707107 +v 0.707107 0.500000 -0.707107 +v 1.000000 -1.500000 0.000000 +v 1.000000 0.500000 0.000000 +v 0.707107 -1.500000 0.707107 +v 0.707107 0.500000 0.707107 +v -0.000000 -1.500000 1.000000 +v -0.000000 0.500000 1.000000 +v -0.707107 -1.500000 0.707107 +v -0.707107 0.500000 0.707107 +v -1.000000 -1.500000 -0.000000 +v -1.000000 0.500000 -0.000000 +v -0.707107 -1.500000 -0.707107 +v -0.707107 0.500000 -0.707107 +vt 1.000000 0.500000 +vt 1.000000 1.000000 +vt 0.875000 1.000000 +vt 0.875000 0.500000 +vt 0.750000 1.000000 +vt 0.750000 0.500000 +vt 0.625000 1.000000 +vt 0.625000 0.500000 +vt 0.500000 1.000000 +vt 0.500000 0.500000 +vt 0.375000 1.000000 +vt 0.375000 0.500000 +vt 0.250000 1.000000 +vt 0.250000 0.500000 +vt 0.419706 0.419706 +vt 0.250000 0.490000 +vt 0.080294 0.419706 +vt 0.010000 0.250000 +vt 0.080294 0.080294 +vt 0.250000 0.010000 +vt 0.419706 0.080294 +vt 0.490000 0.250000 +vt 0.125000 1.000000 +vt 0.125000 0.500000 +vt 0.000000 1.000000 +vt 0.000000 0.500000 +vt 0.750000 0.490000 +vt 0.919706 0.419706 +vt 0.990000 0.250000 +vt 0.919706 0.080294 +vt 0.750000 0.010000 +vt 0.580294 0.080294 +vt 0.510000 0.250000 +vt 0.580294 0.419706 +vn 0.3827 0.0000 -0.9239 +vn 0.9239 0.0000 -0.3827 +vn 0.9239 0.0000 0.3827 +vn 0.3827 0.0000 0.9239 +vn -0.3827 0.0000 0.9239 +vn -0.9239 0.0000 0.3827 +vn 0.0000 1.0000 -0.0000 +vn -0.9239 0.0000 -0.3827 +vn -0.3827 0.0000 -0.9239 +vn 0.0000 -1.0000 -0.0000 +usemtl None +s off +f 1/1/1 2/2/1 4/3/1 3/4/1 +f 3/4/2 4/3/2 6/5/2 5/6/2 +f 5/6/3 6/5/3 8/7/3 7/8/3 +f 7/8/4 8/7/4 10/9/4 9/10/4 +f 9/10/5 10/9/5 12/11/5 11/12/5 +f 11/12/6 12/11/6 14/13/6 13/14/6 +f 4/15/7 2/16/7 16/17/7 14/18/7 12/19/7 10/20/7 8/21/7 6/22/7 +f 13/14/8 14/13/8 16/23/8 15/24/8 +f 15/24/9 16/23/9 2/25/9 1/26/9 +f 1/27/10 3/28/10 5/29/10 7/30/10 9/31/10 11/32/10 13/33/10 15/34/10 diff --git a/assets/skull_icon.png b/assets/skull_icon.png index c52edf7..232cc4a 100644 Binary files a/assets/skull_icon.png and b/assets/skull_icon.png differ diff --git a/assets/thumb_blurred.png b/assets/thumb_blurred.png index 5511519..e975b02 100644 Binary files a/assets/thumb_blurred.png and b/assets/thumb_blurred.png differ diff --git a/game.js b/game.js index d86d589..cc55572 100644 --- a/game.js +++ b/game.js @@ -9,10 +9,8 @@ let [cos, sin] = [Math.cos.bind(Math), Math.sin.bind(Math)]; let gameState = "menu"; -let enemyVel = null, playerVel = null, rollSpeed = null, pitchSpeed = null, enemyRollSpeed = null, enemyPitchSpeed = null, aimAssistRange = null, playerRadius = null, hp = null, enemyHP = null, pain = null, gravity = null, jumpSpeed = null, step = null, accelFactor = null, FOV = null, trueFOV = null, cameraDistance = null, bloom = null, weaponTraits = null, aimFactor = null, gun = null, recoil = null, shotCooldown = null, sway = null, reloading = null, reloadTime = null, enemyBloom = null, enemyShotChance = null, hitShot = null; +let enemyVel = null, playerVel = null, rollSpeed = null, pitchSpeed = null, enemyRollSpeed = null, enemyPitchSpeed = null, aimAssistRange = null, playerRadius = null, hp = null, enemyHP = null, pain = null, gravity = null, jumpSpeed = null, step = null, accelFactor = null, FOV = null, trueFOV = null, cameraDistance = null, bloom = null, weaponTraits = null, aimFactor = null, gun = null, recoil = null, shotCooldown = null, sway = null, reloading = null, reloadTime = null, enemyBloom = null, enemyShotChance = null, hitShot = null, enemyDamage = null; let bulletVel = null; -let planeBaseVel = null; -let enemyLeadsAim = null; let mapBoundaries = null; let gameActive = false; @@ -20,11 +18,10 @@ let player = null, enemy = null, map = null, fire = null, pistol = null, smg = n function resetValues() { enemyVel = 1.5; playerVel = [0, 0, 0]; rollSpeed = 0.1; pitchSpeed = 0.04; enemyRollSpeed = 0.07; enemyPitchSpeed = 0.035; aimAssistRange = Math.PI/24; bulletVel = 5; playerRadius = 1.5; hp = 100; enemyHP = 100; pain = 0; - jumpSpeed = 1.5; gravity = .4, step = 0.1; accelFactor = 1.2; trueFOV = FOV = [Math.PI/1.7, Math.PI/2.2]; cameraDistance = 0; bloom = Math.PI/10; aimFactor = 0; recoil = 0; shotCooldown = 0; sway = 0; reloading = false; reloadTime = 0; enemyBloom = Math.PI/50; enemyShotChance = .1; - planeBaseVel = 1.5; hitShot = {state: 1, frames: 0}; - enemyLeadsAim = true; + jumpSpeed = 1.5; gravity = .4, step = 0.1; accelFactor = 1.2; trueFOV = FOV = [Math.PI/1.7, Math.PI/2.2]; cameraDistance = 0; bloom = Math.PI/10; aimFactor = 0; recoil = 0; shotCooldown = 0; sway = 0; reloading = false; reloadTime = 0; enemyBloom = Math.PI/25; enemyShotChance = .1; enemyDamage = 10; + hitShot = {state: 1, frames: 0}; shapes = []; bullets = []; enemies = []; lasers = []; - player = copyShape(planeTemplate); player.move([0, 2, 4]); if (cameraDistance > 0) shapes.push(player); + player = copyShape(playerTemplate); player.move([0, 2, 4]); if (cameraDistance > 0) shapes.push(player); map = copyShape(mapTemplate); shapes.push(map); for (let i = 0; i < map.polys.length; i++) { let poly = map.polys[i]; @@ -94,7 +91,7 @@ function resetValues() { weaponTraits.set(sniper, { name: "Sniper", automatic: false, - runningBloom: 2, + runningBloom: 3, defaultBloom: Math.PI/200, normalPos: [-2, -2, 7], aimPos: [0, -1.57, 6], @@ -342,6 +339,11 @@ function distance(pt1, pt2) { function vecFromAngle(angle) { return [-Math.sin(angle[0])*Math.cos(angle[1]), Math.sin(angle[1]), Math.cos(angle[0])*Math.cos(angle[1])]; } +function deviate(angle, bloom) { + let bloomAngle = Math.random()*2*Math.PI, bloomWidth = (Math.random()-.5)*bloom; + return [angle[0] + Math.cos(bloomAngle)*bloomWidth/(Math.abs(Math.cos(camAngle[1]))), + angle[1] + Math.sin(bloomAngle)*bloomWidth]; +} function leadAim(initPos, targetPos, speed, targetVel) { let collisionPos = targetPos, time = null; for (let i = 0; i < 5; i++) { @@ -467,7 +469,7 @@ setInterval(function() { canvas.height = window.innerHeight/canvasDivision; let cameraSpeed = 1; camFollow = player; - if (camFollow === null) {} else { + if (camFollow === null) {} else if (gameActive) { camPos[0] = camFollow.offset[0] + Math.sin(camAngle[0]) * cameraDistance * Math.cos(camAngle[1]); camPos[1] = camFollow.offset[1] - Math.sin(camAngle[1]) * cameraDistance + cameraDistance/5; camPos[2] = camFollow.offset[2] - Math.cos(camAngle[0]) * cameraDistance * Math.cos(camAngle[1]); @@ -577,16 +579,18 @@ setInterval(function() { bulletHole.move(times(cross, distInDir(cross, startPos, center(hit.poly)) < 0 ? .16 : -.16)); shapes.push(bulletHole); } else if (enemies.includes(hit.shape)) { - if (damage !== undefined) hit.shape.health -= damage; + if (damage !== undefined) { + if (hit.poly.mtl === "Head") damage *= 2; + hit.shape.health -= damage; + } hitShot = (hit.shape.health === undefined || hit.shape.health) > 0 ? {state: 1, frames: 5} : {state: 2, frames: 10}; + if (hit.poly.mtl === "Head") hitShot.headshot = true; else hitShot.headshot = false; + } else if (hit.shape === player) { + if (damage !== undefined) {hp -= damage; pain += .2;} } } } - function deviate(angle, bloom) { - let bloomAngle = Math.random()*2*Math.PI, bloomWidth = (Math.random()-.5)*bloom; - return [angle[0] + Math.cos(bloomAngle)*bloomWidth/(Math.abs(Math.cos(camAngle[1]))), - angle[1] + Math.sin(bloomAngle)*bloomWidth]; - } + if (mouseDown && shotCooldown === 0 && weaponTraits.get(gun).ammo > 0 && !reloading) { if (!weaponTraits.get(gun).automatic) mouseDown = false; shotCooldown += weaponTraits.get(gun).cooldown; @@ -608,19 +612,21 @@ setInterval(function() { } } } - for (let i = 0; i < enemies.length; i++) { - let enemy = enemies[i]; - if (enemy.health <= 0) { - enemies.splice(i, 1); - if (shapes.includes(enemy)) shapes.splice(shapes.indexOf(enemy), 1); - i--; - continue; - } - let angle = (Math.atan2(camPos[2]-enemy.offset[2], camPos[0]-enemy.offset[0])-Math.PI/2) - enemy.rotate[0]; - angle = Math.min(Math.abs(angle), Math.abs(Math.PI*2-angle)) === Math.abs(angle) ? angle : angle-Math.PI*2; - enemy.turn([angle * .2, 0, 0]); - if (Math.random() < enemyShotChance && lineOfSight(enemy.offset, [map], camPos)) { - spawnShot(enemy.offset, deviate([enemy.rotate[0], -Math.atan2(distance([camPos[0], camPos[2]], [enemy.offset[0], enemy.offset[2]]), camPos[1]-enemy.offset[1])+Math.PI/2, enemy.rotate[1]], enemyBloom), enemy.offset) + if (gameActive) { + for (let i = 0; i < enemies.length; i++) { + let enemy = enemies[i]; + if (enemy.health <= 0) { + enemies.splice(i, 1); + if (shapes.includes(enemy)) shapes.splice(shapes.indexOf(enemy), 1); + i--; + continue; + } + let angle = (Math.atan2(camPos[2]-enemy.offset[2], camPos[0]-enemy.offset[0])-Math.PI/2) - enemy.rotate[0]; + angle = Math.min(Math.abs(angle), Math.abs(Math.PI*2-angle)) === Math.abs(angle) ? angle : angle-Math.PI*2; + enemy.turn([angle * .1, 0, 0]); + if (Math.random() < enemyShotChance && lineOfSight(enemy.offset, [map], camPos)) { + spawnShot(enemy.offset, deviate([enemy.rotate[0], -Math.atan2(distance([camPos[0], camPos[2]], [enemy.offset[0], enemy.offset[2]]), camPos[1]-enemy.offset[1])+Math.PI/2, enemy.rotate[1]], enemyBloom), enemy.offset, enemyDamage, [map, player]); + } } } for (let i = 0; i < bulletHoles.length; i++) { @@ -768,9 +774,10 @@ setInterval(function() { drawText(ctx, reloading ? "Reloading" : `${weaponTraits.get(gun).ammo}/${weaponTraits.get(gun).totalAmmo}`, 150/canvasDivision, canvas.height-130/canvasDivision, 50/canvasDivision, (reloading || weaponTraits.get(gun).ammo === 0) ? "red" : "white"); if (hitShot.frames > 0) { - if (hitShot.state === 1) ctx.drawImage(hitMarker, canvas.width/2+100/canvasDivision, canvas.height/2-25/canvasDivision, 75/canvasDivision, 75/canvasDivision); - else ctx.drawImage(skullIcon, canvas.width/2+100/canvasDivision, canvas.height/2-25/canvasDivision, 75/canvasDivision, 75/canvasDivision); - } + if (hitShot.state === 1) ctx.drawImage(hitMarker, canvas.width/2+100/canvasDivision, canvas.height/2-50/canvasDivision, 100/canvasDivision, 100/canvasDivision); + else ctx.drawImage(skullIcon, canvas.width/2+100/canvasDivision, canvas.height/2-50/canvasDivision, 100/canvasDivision, 100/canvasDivision); + if (hitShot.headshot) ctx.drawImage(headshot, canvas.width/2+225/canvasDivision, canvas.height/2-50/canvasDivision, 100/canvasDivision, 100/canvasDivision); + } else hitShot.headshot = false; hitShot.frames -= 1; pain = gameActive ? Math.max(pain-0.05, 0) : pain; @@ -780,25 +787,29 @@ setInterval(function() { if (gameActive) { if (hp <= 0) { - fire = copyShape(fireTemplate); - fire.move(minus(player.offset, fire.offset)) - shapes.push(fire); gameActive = false; resume.visible = false; + gameActive = false; resume.visible = false; pain = .4; } - if (enemyHP <= 0) { - fire = copyShape(fireTemplate); - fire.move(minus(enemy.offset, fire.offset)); - shapes.push(fire); gameActive = false; resume.visible = false; + if (enemies.length === 0) { + gameActive = false; resume.visible = false; pain = 0; } } else { if (hp <= 0) { pain += 0.01; + accelFactor = 0; ctx.globalAlpha = Math.min(pain, .8); drawText(ctx, "You Died!", canvas.width/2, 50/canvasDivision, 50/canvasDivision, "black", "center", "Georgia"); ctx.globalAlpha = 1; if (pain >= 1) {gameState = "menu"; document.exitPointerLock();} } + if (enemies.length <= 0) { + pain -= 0.02; + ctx.globalAlpha = -Math.max(pain, -.8); + drawText(ctx, "You Win!", canvas.width/2, 50/canvasDivision, 50/canvasDivision, "black", "center", "Georgia"); + ctx.globalAlpha = 1; + if (pain <= -1) {gameState = "menu"; document.exitPointerLock();} + } } } canvas.style.cursor = "auto"; @@ -1008,6 +1019,8 @@ let hitMarker = new Image(); hitMarker.src = "assets/crosshair.svg"; let skullIcon = new Image(); skullIcon.src = "assets/skull_icon.png"; +let headshot = new Image(); +headshot.src = "assets/headshot.png"; function drawText(ctx, text, x, y, size=10, color="black", align="center", font="Arial") { ctx.fillStyle = color; @@ -1086,19 +1099,19 @@ document.addEventListener("keyup", function(e) { delete keys[deShift(e.key.toLowerCase())]; }); -["bullet", "plane", "desertmap", "enemy", "fire", "bullethole", "pistol", "smg", "shotgun", "sniper"].forEach(name => { +["bullet", "player", "desertmap", "enemy", "fire", "bullethole", "pistol", "smg", "shotgun", "sniper"].forEach(name => { fetch("assets/" + name + ".mtl").then(res => res.text()).then(mtl => { processMtl(mtl); }); }); -let planeTemplate = null, mapTemplate = null, bullet = null, enemyTemplate = null, fireTemplate = null, bulletHoleTemplate = null, pistolTemplate = null, smgTemplate = null, shotgunTemplate = null, sniperTemplate = null; +let playerTemplate = null, mapTemplate = null, bullet = null, enemyTemplate = null, fireTemplate = null, bulletHoleTemplate = null, pistolTemplate = null, smgTemplate = null, shotgunTemplate = null, sniperTemplate = null; Object.defineProperty(window, "isLoading", { - get() {return [planeTemplate, mapTemplate, bullet, enemyTemplate, fireTemplate, bulletHoleTemplate, pistolTemplate, shotgunTemplate, sniperTemplate].some(template => template === null);}, + get() {return [playerTemplate, mapTemplate, bullet, enemyTemplate, fireTemplate, bulletHoleTemplate, pistolTemplate, shotgunTemplate, sniperTemplate].some(template => template === null);}, }); -fetch("assets/plane.obj").then(res => res.text()).then(obj => { - planeTemplate = processObj(obj); +fetch("assets/player.obj").then(res => res.text()).then(obj => { + playerTemplate = processObj(obj); if (!isLoading) resetValues(); }); fetch("assets/bullet.obj").then(res => res.text()).then(obj => {