diff --git a/.gitignore b/.gitignore index 31e632c..7574068 100644 --- a/.gitignore +++ b/.gitignore @@ -13,5 +13,7 @@ __pycache__/ # Generierte Zwischenstände tools/extract/cache/ tools/extract/debug/ +# Rohdownload für tools/assets/props.mjs — nur die daraus gebauten .glb werden versioniert. +public/models/props/raw/ .DS_Store diff --git a/public/models/palm/diffuse.png b/public/models/palm/diffuse.png new file mode 100644 index 0000000..d5d9201 Binary files /dev/null and b/public/models/palm/diffuse.png differ diff --git a/public/models/palm/normal.png b/public/models/palm/normal.png new file mode 100644 index 0000000..d898e56 Binary files /dev/null and b/public/models/palm/normal.png differ diff --git a/public/models/palm/palm_tree.obj b/public/models/palm/palm_tree.obj new file mode 100644 index 0000000..012468d --- /dev/null +++ b/public/models/palm/palm_tree.obj @@ -0,0 +1,2225 @@ +# 3ds Max Wavefront OBJ Exporter v0.97b - (c)2007 guruware +# File Created: 03.11.2011 15:38:09 + +# +# object palm_tree +# + +v 9.1776 0.0000 -0.2950 +v 7.2558 0.0000 -6.2096 +v 6.2571 26.6667 -5.4840 +v 7.9431 26.6667 -0.2950 +v 2.2245 0.0000 -9.8650 +v 1.8431 26.6667 -8.6910 +v -3.9945 0.0000 -9.8650 +v -3.6130 26.6667 -8.6910 +v -9.0257 0.0000 -6.2096 +v -8.0270 26.6667 -5.4840 +v -10.9475 0.0000 -0.2950 +v -9.7130 26.6667 -0.2950 +v -9.0257 0.0000 5.6196 +v -8.0270 26.6667 4.8940 +v -3.9945 0.0000 9.2751 +v -3.6130 26.6667 8.1010 +v 2.2245 0.0000 9.2751 +v 1.8431 26.6667 8.1010 +v 7.2558 0.0000 5.6196 +v 6.2571 26.6667 4.8940 +v 5.3117 53.3333 -4.7971 +v 6.7745 53.3333 -0.2950 +v 1.4819 53.3333 -7.5796 +v -3.2519 53.3333 -7.5795 +v -7.0816 53.3333 -4.7971 +v -8.5444 53.3333 -0.2950 +v -7.0816 53.3333 4.2071 +v -3.2519 53.3333 6.9896 +v 1.4819 53.3333 6.9896 +v 5.3117 53.3333 4.2071 +v 4.5427 80.0000 -4.2384 +v 5.8239 80.0000 -0.2950 +v 1.1882 80.0000 -6.6755 +v -2.9581 80.0000 -6.6755 +v -6.3126 80.0000 -4.2384 +v -7.5938 80.0000 -0.2950 +v -6.3126 80.0000 3.6484 +v -2.9581 80.0000 6.0855 +v 1.1882 80.0000 6.0855 +v 4.5427 80.0000 3.6484 +v 3.9708 106.6667 -3.8229 +v 5.1171 106.6667 -0.2950 +v 0.9698 106.6667 -6.0033 +v -2.7397 106.6667 -6.0033 +v -5.7407 106.6667 -3.8229 +v -6.8870 106.6667 -0.2950 +v -5.7407 106.6667 3.2329 +v -2.7397 106.6667 5.4133 +v 0.9698 106.6667 5.4133 +v 3.9708 106.6667 3.2329 +v 3.3222 133.3333 -3.3517 +v 4.3154 133.3333 -0.2950 +v 0.7220 133.3333 -5.2408 +v -2.4920 133.3333 -5.2408 +v -5.0921 133.3333 -3.3517 +v -6.0853 133.3333 -0.2950 +v -5.0921 133.3333 2.7617 +v -2.4920 133.3333 4.6509 +v 0.7220 133.3333 4.6509 +v 3.3222 133.3333 2.7617 +v 2.9244 160.0000 -3.0626 +v 3.8237 160.0000 -0.2950 +v 0.5701 160.0000 -4.7731 +v -2.3400 160.0000 -4.7731 +v -4.6943 160.0000 -3.0626 +v -5.5936 160.0000 -0.2950 +v -4.6943 160.0000 2.4727 +v -2.3400 160.0000 4.1832 +v 0.5701 160.0000 4.1832 +v 2.9244 160.0000 2.4727 +v 2.8189 186.6667 -2.9860 +v 3.6932 186.6667 -0.2950 +v 0.5298 186.6667 -4.6491 +v -2.2997 186.6667 -4.6491 +v -4.5888 186.6667 -2.9860 +v -5.4632 186.6667 -0.2950 +v -4.5888 186.6667 2.3960 +v -2.2997 186.6667 4.0591 +v 0.5298 186.6667 4.0591 +v 2.8189 186.6667 2.3960 +v 2.6298 213.3333 -2.8486 +v 3.4595 213.3333 -0.2950 +v 0.4575 213.3333 -4.4268 +v -2.2275 213.3333 -4.4268 +v -4.3997 213.3333 -2.8486 +v -5.2294 213.3333 -0.2950 +v -4.3997 213.3333 2.2586 +v -2.2275 213.3333 3.8368 +v 0.4575 213.3333 3.8368 +v 2.6298 213.3333 2.2586 +v 2.5017 240.0000 -2.7555 +v 3.3011 240.0000 -0.2950 +v 0.4086 240.0000 -4.2762 +v -2.1785 240.0000 -4.2762 +v -4.2716 240.0000 -2.7555 +v -5.0710 240.0000 -0.2950 +v -4.2716 240.0000 2.1655 +v -2.1785 240.0000 3.6862 +v 0.4086 240.0000 3.6862 +v 2.5017 240.0000 2.1655 +v 2.4302 266.6667 -2.7036 +v 3.2128 266.6667 -0.2950 +v 0.3813 266.6667 -4.1922 +v -2.1512 266.6667 -4.1922 +v -4.2001 266.6667 -2.7036 +v -4.9828 266.6667 -0.2950 +v -4.2001 266.6667 2.1136 +v -2.1512 266.6667 3.6022 +v 0.3813 266.6667 3.6022 +v 2.4302 266.6667 2.1136 +v 2.1986 293.3333 -2.5353 +v 2.9265 293.3333 -0.2950 +v 0.2929 293.3333 -3.9199 +v -2.0628 293.3333 -3.9199 +v -3.9685 293.3333 -2.5353 +v -4.6964 293.3333 -0.2950 +v -3.9685 293.3333 1.9453 +v -2.0628 293.3333 3.3299 +v 0.2929 293.3333 3.3299 +v 2.1986 293.3333 1.9453 +v 2.0314 320.0000 -2.4139 +v 2.7199 320.0000 -0.2950 +v 0.2290 320.0000 -3.7234 +v -1.9989 320.0000 -3.7234 +v -3.8013 320.0000 -2.4139 +v -4.4898 320.0000 -0.2950 +v -3.8013 320.0000 1.8239 +v -1.9989 320.0000 3.1334 +v 0.2290 320.0000 3.1334 +v 2.0314 320.0000 1.8239 +v 1.9650 346.6667 -2.3656 +v 2.6377 346.6667 -0.2950 +v 0.2036 346.6667 -3.6453 +v -1.9735 346.6667 -3.6453 +v -3.7349 346.6667 -2.3656 +v -4.4076 346.6667 -0.2950 +v -3.7349 346.6667 1.7756 +v -1.9735 346.6667 3.0553 +v 0.2036 346.6667 3.0553 +v 1.9650 346.6667 1.7756 +v 1.9956 369.7881 -2.3878 +v 2.6756 369.7881 -0.2950 +v 0.2153 369.7881 -3.6813 +v -1.9852 369.7881 -3.6813 +v -3.7655 369.7881 -2.3878 +v -4.4455 369.7881 -0.2950 +v -3.7655 369.7881 1.7978 +v -1.9852 369.7881 3.0913 +v 0.2153 369.7881 3.0913 +v 1.9956 369.7881 1.7978 +v 4.9476 378.3362 -4.5326 +v 6.3245 378.3361 -0.2950 +v 1.3429 378.3362 -7.1515 +v -3.1128 378.3362 -7.1515 +v -6.7175 378.3362 -4.5326 +v -8.0944 378.3362 -0.2950 +v -6.7175 378.3362 3.9426 +v -3.1128 378.3362 6.5616 +v 1.3429 378.3362 6.5616 +v 4.9476 378.3362 3.9426 +v -2.8955 397.4668 -0.2950 +v -2.5116 397.4668 0.8868 +v 0.7416 397.4668 0.8868 +v 1.1256 397.4668 -0.2950 +v 0.7416 397.4668 -1.4768 +v 6.3682 393.3484 -0.2950 +v 4.9829 393.3484 -4.5583 +v -0.2637 397.4668 -2.2072 +v 1.3564 393.3484 -7.1931 +v -1.5063 397.4668 -2.2072 +v -3.1263 393.3484 -7.1931 +v -2.5116 397.4668 -1.4768 +v -6.7528 393.3484 -4.5583 +v -8.1381 393.3484 -0.2950 +v -6.7528 393.3484 3.9683 +v -1.5063 397.4668 1.6172 +v -3.1263 393.3484 6.6031 +v -0.2637 397.4668 1.6172 +v 1.3564 393.3484 6.6031 +v 4.9829 393.3484 3.9683 +v 8.2184 386.6701 -0.2950 +v 6.4798 386.6701 -5.6458 +v 1.9281 386.6701 -8.9528 +v -3.6981 386.6701 -8.9528 +v -8.2498 386.6701 -5.6458 +v -9.9884 386.6701 -0.2950 +v -8.2498 386.6701 5.0559 +v -3.6981 386.6701 8.3629 +v 1.9282 386.6701 8.3629 +v 6.4799 386.6701 5.0559 +v 3.6261 385.6406 9.4317 +v 32.2559 390.3322 15.6843 +v 29.6700 399.2040 6.3662 +v 2.0889 388.0536 -0.0000 +v 58.9227 394.1393 15.6843 +v 58.9227 403.3803 6.3662 +v 85.5896 390.3322 15.6843 +v 88.1755 399.2040 6.3662 +v 114.2193 385.6406 9.4317 +v 115.7566 388.0536 -0.0000 +v 58.9227 404.6192 -0.0000 +v 29.3233 400.3934 -0.0000 +v 88.5221 400.3934 -0.0000 +v 88.1755 399.2040 -6.3662 +v 58.9227 403.3803 -6.3662 +v 29.6700 399.2040 -6.3662 +v 114.2193 385.6406 -9.4317 +v 85.5896 390.3322 -15.6843 +v 58.9227 394.1393 -15.6843 +v 32.2559 390.3322 -15.6843 +v 3.6261 385.6406 -9.4317 +v -11.1656 391.9802 3.5883 +v -26.1359 388.5650 28.9851 +v -17.2784 397.8059 31.8786 +v -1.9558 394.7244 5.7769 +v -34.5006 384.8431 54.3187 +v -26.4543 393.7232 59.6688 +v -42.2047 373.8045 77.6514 +v -34.9055 381.6141 85.2640 +v -44.4861 361.3727 104.5031 +v -36.2025 363.2660 109.4971 +v -20.5166 394.9137 61.9905 +v -11.2319 399.0448 33.8708 +v -29.0679 382.6611 87.8890 +v -22.8150 381.6141 89.2561 +v -14.3639 393.7232 63.6609 +v -5.1879 397.8059 35.8706 +v -26.5739 361.3727 110.4174 +v -12.4179 373.8045 87.4865 +v -4.7138 384.8431 64.1539 +v 3.6510 388.5650 38.8202 +v 6.7465 391.9802 9.5026 +v -1.1644 388.0846 -11.9789 +v -14.9971 399.9425 -28.0331 +v -15.7042 411.1951 -17.4781 +v -4.4817 390.9809 -2.9265 +v -31.1386 410.2413 -38.1548 +v -33.4109 422.4926 -28.5813 +v -49.4865 410.4455 -49.6601 +v -53.5380 422.7166 -41.2023 +v -72.6818 409.8638 -56.8248 +v -77.9872 413.3655 -49.0191 +v -36.4340 424.1351 -22.9626 +v -18.5175 412.7037 -11.7278 +v -56.7996 424.3617 -35.7332 +v -60.3022 422.7166 -30.4152 +v -40.1751 422.4926 -17.7942 +v -22.4684 411.1951 -6.6910 +v -82.7030 409.8638 -40.8436 +v -66.1512 410.4455 -23.0844 +v -47.8033 410.2413 -11.5791 +v -31.6619 399.9425 -1.4574 +v -11.1856 388.0846 4.0023 +v -14.1480 392.7831 -7.2538 +v -33.7554 404.0648 -3.2857 +v -21.4418 411.8053 4.4568 +v -3.9609 394.6886 2.4222 +v -46.7608 414.0427 7.2192 +v -35.7083 422.7508 15.9804 +v -61.7487 416.8455 19.3255 +v -52.1496 425.8254 29.2606 +v -72.1951 419.2853 39.6329 +v -63.6218 421.9275 50.6124 +v -29.4783 423.9182 23.0335 +v -15.0427 412.8430 11.3733 +v -46.1144 427.0293 36.4711 +v -40.3347 425.8254 43.8878 +v -23.8934 422.7508 30.6076 +v -9.6269 411.8053 19.0840 +v -54.6912 419.2853 61.3033 +v -32.6408 416.8455 55.3619 +v -17.6529 414.0427 43.2557 +v -4.6475 404.0648 32.7508 +v 3.3559 392.7831 14.4166 +v 12.7541 383.5959 -3.6145 +v 26.6106 372.9091 -17.8072 +v 15.1111 380.4241 -26.3258 +v -0.0461 386.0474 -8.4743 +v 31.3412 362.5586 -33.1462 +v 20.3005 369.0699 -43.1523 +v 34.5402 346.8431 -43.5187 +v 23.8096 351.8304 -54.5306 +v 29.1970 329.5451 -56.9301 +v 16.8539 330.4940 -63.2720 +v 11.7363 369.9428 -46.6785 +v 6.4854 381.4315 -29.6526 +v 15.2871 352.4990 -58.1916 +v 6.1829 351.8304 -59.9667 +v 2.6738 369.0699 -48.5885 +v -2.5156 380.4241 -31.7620 +v 3.0829 329.5451 -64.9839 +v -8.8860 346.8431 -56.9116 +v -12.0849 362.5586 -46.5391 +v -16.8156 372.9091 -31.2001 +v -13.3600 383.5959 -11.6683 +v -9.3495 391.9719 11.1908 +v 4.8457 396.7526 30.7244 +v 9.5257 406.7831 21.6374 +v -4.0509 394.7146 2.4281 +v 21.9045 400.5721 43.9460 +v 28.2388 410.9730 36.1410 +v 38.8166 395.8217 57.0538 +v 46.7908 405.7619 50.5199 +v 61.0929 390.0416 65.7875 +v 68.3498 392.7307 58.5426 +v 32.4687 412.3673 30.7327 +v 13.5339 408.1278 16.0572 +v 51.2406 407.0945 45.2820 +v 55.2029 405.7619 39.6663 +v 36.6508 410.9730 25.2875 +v 17.9378 406.7831 10.7838 +v 73.5555 390.0416 49.7079 +v 59.5411 395.8217 30.3143 +v 42.6290 400.5721 17.2065 +v 25.5702 396.7526 3.9850 +v 3.1131 391.9719 -4.8889 +v 9.8310 388.3345 1.8180 +v 21.8974 387.6455 -17.4634 +v 14.3508 394.6732 -19.3635 +v 2.1424 390.3684 0.0414 +v 28.5211 386.5821 -36.9077 +v 21.6168 393.5067 -40.6934 +v 34.7842 379.8130 -55.2936 +v 28.4872 386.0813 -60.8621 +v 36.5531 372.0930 -76.6271 +v 29.6073 373.6754 -80.5844 +v 16.6593 394.4351 -42.5743 +v 9.3072 395.6154 -20.9917 +v 23.6111 386.9216 -62.9821 +v 18.4549 386.0813 -64.2796 +v 11.5845 393.5067 -44.1108 +v 4.3185 394.6732 -22.7809 +v 21.6901 372.0930 -81.6901 +v 10.0680 379.8130 -63.7131 +v 3.8049 386.5821 -45.3272 +v -2.8187 387.6455 -25.8829 +v -5.0319 388.3345 -3.2450 +v 11.4482 395.5037 2.3749 +v 27.0678 409.2121 -6.8961 +v 17.9725 414.1866 -8.4714 +v 4.3746 396.5487 -1.5341 +v 38.1922 421.6046 -18.9692 +v 30.1757 427.7808 -21.7153 +v 51.2221 428.9081 -33.1102 +v 44.4691 435.7925 -37.2276 +v 61.5347 436.3453 -51.9830 +v 55.8535 438.5258 -57.4031 +v 25.9686 428.6088 -24.9697 +v 13.6208 414.8535 -11.5689 +v 40.4314 436.7155 -40.6658 +v 36.6749 435.7925 -44.4093 +v 22.3815 427.7808 -28.8970 +v 10.1784 414.1866 -15.6532 +v 49.9876 436.3453 -62.6228 +v 32.0199 428.9081 -50.8035 +v 18.9900 421.6046 -36.6625 +v 7.8656 409.2121 -24.5894 +v -0.0990 395.5037 -8.2649 +v 8.6838 397.0964 1.8722 +v 15.6457 409.1487 3.1078 +v 5.6204 410.8883 0.8868 +v 1.0013 397.2601 -3.0511 +v 18.2472 420.2034 0.2843 +v 8.4743 423.0150 -2.2104 +v 23.5220 428.9415 -5.4402 +v 14.2605 432.6004 -8.4901 +v 25.0162 438.1389 -15.8530 +v 17.7878 439.4435 -21.2691 +v 3.5788 423.3920 -5.8484 +v 0.6912 411.1216 -2.7145 +v 9.4336 433.0909 -12.2025 +v 5.3395 432.6004 -16.7101 +v -0.4468 423.0150 -10.4305 +v -3.3006 410.8883 -7.3332 +v 11.7996 438.1389 -28.0311 +v 1.5436 428.9415 -25.6916 +v -3.7312 420.2034 -19.9671 +v -6.3327 409.1487 -17.1436 +v -4.5328 397.0964 -10.3059 +v -7.4203 397.3921 4.3302 +v -11.2823 409.4444 8.5261 +v -5.4777 411.1840 2.7869 +v -1.1983 397.5558 2.1422 +v -10.9165 420.4991 12.3480 +v -5.0765 423.3108 6.9794 +v -10.1748 429.2372 20.0967 +v -4.2628 432.8961 15.4795 +v -5.1238 438.4346 28.3231 +v 1.1620 439.7393 26.8021 +v -0.8359 423.6877 5.9287 +v -1.2419 411.4173 1.6866 +v -0.0126 433.3867 14.5296 +v 4.3406 432.8961 14.6560 +v 3.5270 423.3108 6.1559 +v 3.1257 411.1840 1.9635 +v 7.6223 438.4346 27.1030 +v 11.0211 429.2372 18.0679 +v 10.2794 420.4991 10.3191 +v 9.9136 409.4444 6.4973 +v 5.3258 397.3921 3.1102 +v -2.2893 397.1342 -7.9627 +v -4.8874 408.3726 -13.6389 +v -3.8000 410.9566 -7.8059 +v -3.6015 397.5625 -4.3342 +v -8.9953 418.6226 -17.5132 +v -8.3062 422.2006 -12.0558 +v -15.6482 425.9245 -23.7876 +v -15.6042 430.2105 -18.9387 +v -24.6029 433.5300 -29.0071 +v -26.5354 434.9702 -25.9636 +v -9.5316 422.6802 -9.9270 +v -4.9720 411.3030 -5.6267 +v -16.9161 430.7851 -16.8914 +v -18.8832 430.2105 -15.4621 +v -11.5852 422.2006 -8.5792 +v -7.0789 410.9566 -4.3292 +v -29.4606 433.5300 -23.8564 +v -23.7263 425.9245 -15.2223 +v -17.0735 418.6226 -8.9478 +v -12.9656 408.3726 -5.0736 +v -7.1471 397.1342 -2.8120 +v -3.4849 397.1245 -3.2103 +v -9.0362 405.6955 -4.3210 +v -5.0337 408.0668 -2.0634 +v -1.9073 397.5660 -0.5763 +v -14.1526 413.4885 -3.5993 +v -10.6463 416.6154 -1.2718 +v -21.8366 418.7049 -2.5155 +v -19.0754 422.3377 -0.0829 +v -30.0280 424.1009 0.5336 +v -29.1882 425.2924 3.2717 +v -9.9619 417.0346 0.5598 +v -4.2828 408.3847 -0.2412 +v -18.4909 422.8247 1.7628 +v -18.5421 422.3377 3.6982 +v -10.1130 416.6154 2.5093 +v -4.5004 408.0668 1.7176 +v -29.2379 424.1009 6.1352 +v -20.5227 418.7049 6.7996 +v -12.8387 413.4885 5.7158 +v -7.7223 405.6955 4.9942 +v -2.6948 397.1245 2.3913 +v -8.4071 385.9267 11.5463 +v -8.7967 376.8442 34.2632 +v 3.2537 385.3056 33.6672 +v 2.8007 388.6049 8.0738 +v -2.4181 367.9219 52.7586 +v 10.2508 375.5181 53.9561 +v 2.5468 352.7405 67.1549 +v 15.6971 358.8646 69.7484 +v 15.1148 335.9451 79.7508 +v 26.9765 337.2338 78.1744 +v 17.9642 376.5365 52.0423 +v 10.8842 386.4400 31.5129 +v 23.4751 359.6856 68.0217 +v 30.6639 358.8646 64.5868 +v 25.2176 375.5181 48.7945 +v 18.2205 385.3056 28.5055 +v 37.2882 335.9451 72.1038 +v 39.4199 352.7405 54.4383 +v 34.4550 367.9219 40.0421 +v 28.0765 376.8442 21.5467 +v 13.7664 385.9267 3.8993 +v -5.6032 382.7928 -14.6058 +v -25.0307 377.7582 -25.7726 +v -28.5204 387.7857 -13.1726 +v -7.1951 386.6709 -1.0611 +v -43.9002 373.3223 -27.5935 +v -49.2197 382.9195 -15.1701 +v -59.7056 361.9850 -28.4348 +v -66.5578 370.4828 -16.0929 +v -77.5055 350.0852 -20.1261 +v -81.0962 353.0540 -6.7349 +v -50.8120 384.8770 -6.0292 +v -29.8673 389.8008 -4.0081 +v -68.3555 372.2929 -6.9630 +v -68.7451 372.1519 2.5075 +v -51.4071 384.5886 3.4304 +v -30.7077 389.4547 5.4279 +v -80.7460 352.5580 7.4307 +v -65.0944 366.0970 17.3904 +v -49.2890 377.4343 18.2317 +v -30.4195 381.8703 20.0526 +v -8.8437 385.2656 12.9510 +v 1.5476 377.7385 12.2614 +v 17.7376 368.9977 26.2596 +v 26.6412 378.6465 17.3472 +v 6.3935 380.7477 1.7331 +v 34.8365 360.3198 32.4450 +v 45.3983 369.1271 24.1324 +v 46.4310 344.3850 36.6392 +v 58.1170 351.6471 28.7332 +v 61.0465 326.7015 33.7845 +v 67.5465 328.2919 23.8546 +v 48.9456 370.3078 17.1259 +v 29.9662 379.9400 10.2603 +v 61.8151 352.6207 21.7813 +v 63.4204 351.6471 14.0724 +v 50.7017 369.1271 9.4715 +v 31.9446 378.6465 2.6863 +v 68.9036 326.7015 12.0643 +v 59.4968 344.3850 0.5198 +v 47.9024 360.3198 -3.6744 +v 30.8034 368.9977 -9.8598 +v 9.4047 377.7385 -9.4588 +v 0.7539 386.2699 -9.3385 +v -5.4153 385.6525 -21.1975 +v -10.1776 391.0853 -16.6868 +v -3.6161 387.8446 -4.3479 +v -13.9035 384.7519 -29.2029 +v -19.4889 390.0974 -25.4685 +v -21.4919 379.4468 -36.3597 +v -27.8132 384.2778 -33.3192 +v -32.5826 373.4017 -40.7789 +v -37.8794 374.6187 -36.6623 +v -22.7053 390.8140 -22.3514 +v -13.2837 391.8137 -13.4656 +v -31.1282 384.9255 -30.2952 +v -33.9532 384.2778 -26.8090 +v -25.6289 390.0974 -18.9582 +v -16.3176 391.0853 -10.1765 +v -41.6791 373.4017 -31.1339 +v -36.6187 379.4468 -20.3206 +v -29.0303 384.7519 -13.1638 +v -20.5421 385.6525 -5.1584 +v -8.3425 386.2699 0.3065 +v -15.0404 379.3425 -2.0806 +v -31.4258 377.3741 8.9517 +v -24.4434 384.2454 14.8137 +v -7.5093 381.3671 3.2599 +v -42.1263 375.1355 22.6390 +v -36.1815 381.7897 29.8282 +v -51.8105 367.4142 35.0264 +v -46.8049 373.3195 43.4169 +v -57.3104 358.6894 51.9881 +v -50.9544 360.1398 58.8317 +v -31.4427 382.6818 33.8737 +v -19.5655 385.1666 18.6813 +v -42.1919 374.1112 47.6234 +v -36.9965 373.3195 51.0849 +v -26.3732 381.7897 37.4962 +v -14.6351 384.2454 22.4817 +v -42.7792 358.6894 63.3483 +v -27.6461 367.4142 53.9178 +v -17.9618 375.1355 41.5303 +v -7.2613 377.3741 27.8431 +v -0.5092 379.3425 9.2796 +v -13.2151 387.7254 -5.9511 +v -0.6202 389.4243 -10.8837 +v -0.6202 362.9705 -19.9948 +v -13.2151 361.2717 -15.0622 +v 11.9747 387.7254 -5.9511 +v 11.9747 361.2717 -15.0622 +v 10.2784 387.7254 -8.8203 +v 8.5294 389.4243 4.5924 +v 16.5122 362.9705 8.9840 +v 18.2612 361.2717 -4.4287 +v -1.8632 387.7254 13.2501 +v 6.1196 361.2717 17.6417 +v 2.4156 387.7254 12.9670 +v -9.0269 389.4243 5.7539 +v -16.3617 362.9705 11.1589 +v -4.9191 361.2717 18.3720 +v -12.5277 387.7254 -7.3115 +v -19.8624 361.2717 -1.9066 +v -3.9645 380.8655 -10.9786 +v 5.0427 383.4561 -4.6115 +v 16.2298 364.8087 -12.8502 +v 7.2226 362.2181 -19.2173 +v 8.4505 380.8655 5.8793 +v 19.6376 362.2181 -2.3594 +v 11.4179 380.8655 0.4745 +v 0.7373 383.4561 3.2303 +v -0.2092 364.8087 17.0914 +v 10.4714 362.2181 14.3356 +v -9.4695 380.8655 -0.9519 +v -10.4160 362.2181 12.9093 +v -4.0977 380.8655 7.5288 +v -3.5170 383.4561 -3.4863 +v -16.4533 364.8087 -8.5538 +v -17.0340 362.2181 2.4612 +v 3.5387 380.8655 -11.9649 +v -9.3976 362.2181 -17.0325 +v -19.8467 387.5336 -2.2010 +v -1.9463 383.1325 -4.9281 +v 4.6545 402.0374 23.1068 +v -13.2459 406.4384 25.8339 +v 15.2905 387.5336 -10.4740 +v 21.8913 406.4384 17.5608 +v 14.9646 387.5336 -10.8253 +v 8.1448 383.1325 5.9483 +v -19.3177 402.0374 -2.7310 +v -12.4980 406.4384 -19.5046 +v 4.0864 387.5336 23.5947 +v -23.3762 406.4384 14.9153 +v 5.6673 387.5336 23.2104 +v -6.0385 383.1325 9.3960 +v 14.3758 402.0374 -10.9211 +v 26.0816 406.4384 2.8933 +v -19.7969 387.5336 -2.3756 +v 0.6174 406.4384 -22.6927 +v 15.6751 382.0227 7.4788 +v 8.8196 381.5738 -5.4704 +v -6.6682 421.3383 9.9436 +v 0.1874 421.7872 22.8928 +v -4.0968 382.0227 -12.3877 +v -19.5846 421.7872 3.0263 +v -9.2599 382.0228 12.3694 +v 5.2307 381.5739 10.2006 +v -4.1689 421.3384 -9.5253 +v -18.6595 421.7873 -7.3565 +v 16.0430 382.0228 0.3124 +v 6.6434 421.7873 -19.4135 +v 7.1976 382.0227 -12.9579 +v -5.8118 381.5738 -6.2171 +v 9.4647 421.3383 9.4063 +v 22.4740 421.7872 2.6655 +v -12.8430 382.0227 6.6376 +v 2.4335 421.7872 22.2610 +v -9.9747 376.0391 -14.5617 +v -25.6181 359.5101 -17.6522 +v -28.0913 366.5711 -2.9718 +v -7.2392 379.3863 -1.0582 +v -37.0503 344.6102 -12.5189 +v -40.6321 350.2263 2.6593 +v -42.0229 326.0892 -9.1572 +v -46.0869 329.9094 6.3469 +v -43.9919 306.7373 3.0534 +v -42.2020 308.1579 17.0466 +v -38.7741 351.6501 11.8485 +v -26.0847 368.1885 6.1508 +v -44.2935 331.0923 15.5799 +v -40.2688 331.5785 24.1489 +v -34.8140 351.8954 20.4613 +v -22.2732 368.2402 14.8302 +v -35.3724 309.2101 29.4273 +v -27.6892 330.2013 34.7009 +v -22.7165 348.7223 31.3392 +v -11.2843 363.6222 26.2059 +v -1.3552 378.5119 11.8121 +v 2.3522 373.6702 7.3153 +v 16.0155 361.5791 10.0624 +v 21.6016 367.3872 -1.5113 +v 1.6797 375.5320 -2.4220 +v 26.5020 349.8969 7.1879 +v 33.1050 354.5722 -4.6645 +v 29.3401 334.1999 6.6857 +v 36.2182 337.3530 -5.2155 +v 29.9821 316.8965 0.3132 +v 30.0777 317.1799 -9.6187 +v 32.5187 355.0906 -11.1813 +v 20.8790 368.0575 -7.9907 +v 35.6688 337.6674 -11.7388 +v 32.5568 337.0834 -17.4772 +v 29.4435 354.3025 -16.9262 +v 17.9401 367.1175 -13.7729 +v 24.5576 316.4970 -17.8525 +v 20.3195 333.5356 -23.5229 +v 17.4814 349.2326 -23.0206 +v 6.9949 360.9148 -20.1461 +v -3.0723 373.2707 -10.8504 +v 5.4412 374.4453 -3.3514 +v 6.2392 367.5544 -11.2540 +v -0.6361 370.8645 -13.7784 +v -0.0443 375.5063 -2.4282 +v 4.0254 360.8966 -17.0419 +v -3.0646 363.5611 -20.1276 +v 3.5826 351.9506 -18.6237 +v -3.5503 353.7476 -21.8628 +v -0.0675 342.0891 -18.6333 +v -5.7062 342.2507 -18.1350 +v -6.7283 363.8565 -19.4326 +v -4.2710 371.2465 -13.0081 +v -7.2197 353.9268 -21.1883 +v -10.3013 353.5939 -19.1039 +v -9.8156 363.4074 -17.3687 +v -7.3871 370.7108 -11.0195 +v -10.0692 341.8615 -14.5459 +v -13.0496 351.5720 -11.8266 +v -12.6068 360.5180 -10.2448 +v -10.3930 367.1758 -4.4569 +v -4.5605 374.2176 0.7360 +v -5.3802 374.4453 -3.9407 +v -9.5267 367.5544 2.8338 +v -4.4267 370.8645 8.0904 +v -0.0371 375.5063 -2.3933 +v -10.0424 360.8966 9.0091 +v -4.9924 363.5611 14.8646 +v -10.3295 351.9506 10.6264 +v -5.3073 353.7476 16.6387 +v -7.0447 342.0891 12.2182 +v -1.7479 342.2507 14.2148 +v -1.3898 363.8565 15.8273 +v -0.8174 371.2465 8.9728 +v -1.7084 353.9268 17.6225 +v 1.9723 353.5939 17.0809 +v 2.2872 363.4074 15.3068 +v 2.8529 370.7108 8.5326 +v 3.7400 341.8615 12.8733 +v 7.6049 351.5720 11.7157 +v 7.8920 360.5180 10.0985 +v 8.4077 367.1758 3.9231 +v 5.4046 374.2176 -3.2857 +v 8.5176 388.2962 -4.0951 +v 14.6183 393.3005 -25.4305 +v 5.3135 403.1631 -23.5389 +v -0.9059 390.9845 -2.9128 +v 14.4770 397.3373 -45.2556 +v 5.1585 407.5914 -45.2865 +v 14.3363 392.9252 -65.0006 +v 5.0042 402.7514 -66.9462 +v 7.9328 387.5179 -86.1481 +v -1.5069 390.1846 -87.2469 +v -1.2076 408.9661 -45.2541 +v -1.0508 404.4853 -23.2488 +v -1.3638 404.0688 -67.1705 +v -7.7280 402.7514 -66.8554 +v -7.5736 407.5914 -45.1957 +v -7.4187 403.1631 -23.4481 +v -10.9300 387.5179 -86.0137 +v -17.0314 392.9252 -64.7771 +v -16.8907 397.3373 -45.0321 +v -16.7494 393.3005 -25.2069 +v -10.3453 388.2962 -3.9607 +# 724 vertices + +vn 0.9989 0.0462 -0.0000 +vn 0.8082 0.0462 -0.5872 +vn 0.8082 0.0450 -0.5872 +vn 0.9990 0.0450 -0.0000 +vn 0.3087 0.0462 -0.9500 +vn 0.3087 0.0450 -0.9501 +vn -0.3087 0.0462 -0.9500 +vn -0.3087 0.0450 -0.9501 +vn -0.8082 0.0462 -0.5872 +vn -0.8082 0.0450 -0.5872 +vn -0.9989 0.0462 -0.0000 +vn -0.9990 0.0450 -0.0000 +vn -0.8082 0.0462 0.5872 +vn -0.8082 0.0450 0.5872 +vn -0.3087 0.0462 0.9500 +vn -0.3087 0.0450 0.9501 +vn 0.3087 0.0462 0.9500 +vn 0.3087 0.0450 0.9501 +vn 0.8082 0.0462 0.5872 +vn 0.8082 0.0450 0.5872 +vn 0.8084 0.0397 -0.5873 +vn 0.9992 0.0397 -0.0000 +vn 0.3088 0.0397 -0.9503 +vn -0.3088 0.0397 -0.9503 +vn -0.8084 0.0397 -0.5873 +vn -0.9992 0.0397 0.0000 +vn -0.8084 0.0397 0.5873 +vn -0.3088 0.0397 0.9503 +vn 0.3088 0.0397 0.9503 +vn 0.8084 0.0397 0.5873 +vn 0.8086 0.0311 -0.5875 +vn 0.9995 0.0311 -0.0000 +vn 0.3089 0.0311 -0.9506 +vn -0.3089 0.0311 -0.9506 +vn -0.8086 0.0311 -0.5875 +vn -0.9995 0.0311 0.0000 +vn -0.8086 0.0311 0.5875 +vn -0.3089 0.0311 0.9506 +vn 0.3089 0.0311 0.9506 +vn 0.8086 0.0311 0.5875 +vn 0.8087 0.0283 -0.5876 +vn 0.9996 0.0283 -0.0000 +vn 0.3089 0.0283 -0.9507 +vn -0.3089 0.0283 -0.9507 +vn -0.8087 0.0283 -0.5876 +vn -0.9996 0.0283 0.0000 +vn -0.8087 0.0283 0.5876 +vn -0.3089 0.0283 0.9507 +vn 0.3089 0.0283 0.9507 +vn 0.8087 0.0283 0.5876 +vn 0.8088 0.0243 -0.5876 +vn 0.9997 0.0243 -0.0000 +vn 0.3089 0.0243 -0.9508 +vn -0.3089 0.0243 -0.9508 +vn -0.8088 0.0243 -0.5876 +vn -0.9997 0.0243 0.0000 +vn -0.8088 0.0243 0.5876 +vn -0.3089 0.0243 0.9508 +vn 0.3089 0.0243 0.9508 +vn 0.8088 0.0243 0.5876 +vn 0.8090 0.0117 -0.5877 +vn 0.9999 0.0117 -0.0000 +vn 0.3090 0.0117 -0.9510 +vn -0.3090 0.0117 -0.9510 +vn -0.8090 0.0117 -0.5877 +vn -0.9999 0.0117 0.0000 +vn -0.8090 0.0117 0.5877 +vn -0.3090 0.0117 0.9510 +vn 0.3090 0.0117 0.9510 +vn 0.8090 0.0117 0.5877 +vn 0.8090 0.0068 -0.5878 +vn 1.0000 0.0068 -0.0000 +vn 0.3090 0.0068 -0.9510 +vn -0.3090 0.0068 -0.9510 +vn -0.8090 0.0068 -0.5878 +vn -1.0000 0.0068 0.0000 +vn -0.8090 0.0068 0.5878 +vn -0.3090 0.0068 0.9510 +vn 0.3090 0.0068 0.9510 +vn 0.8090 0.0068 0.5878 +vn 0.8090 0.0074 -0.5878 +vn 1.0000 0.0074 -0.0000 +vn 0.3090 0.0074 -0.9510 +vn -0.3090 0.0074 -0.9510 +vn -0.8090 0.0074 -0.5878 +vn -1.0000 0.0074 0.0000 +vn -0.8090 0.0074 0.5878 +vn -0.3090 0.0074 0.9510 +vn 0.3090 0.0074 0.9510 +vn 0.8090 0.0074 0.5878 +vn 0.8090 0.0046 -0.5878 +vn 1.0000 0.0046 -0.0000 +vn 0.3090 0.0046 -0.9510 +vn -0.3090 0.0046 -0.9510 +vn -0.8090 0.0046 -0.5878 +vn -1.0000 0.0046 0.0000 +vn -0.8090 0.0046 0.5878 +vn -0.3090 0.0046 0.9510 +vn 0.3090 0.0046 0.9510 +vn 0.8090 0.0046 0.5878 +vn 0.8090 0.0070 -0.5878 +vn 1.0000 0.0070 -0.0000 +vn 0.3090 0.0070 -0.9510 +vn -0.3090 0.0070 -0.9510 +vn -0.8090 0.0070 -0.5878 +vn -1.0000 0.0070 0.0000 +vn -0.8090 0.0070 0.5878 +vn -0.3090 0.0070 0.9510 +vn 0.3090 0.0070 0.9510 +vn 0.8090 0.0070 0.5878 +vn 0.8090 0.0092 -0.5878 +vn 1.0000 0.0092 -0.0000 +vn 0.3090 0.0092 -0.9510 +vn -0.3090 0.0092 -0.9510 +vn -0.8090 0.0092 -0.5878 +vn -1.0000 0.0092 0.0000 +vn -0.8090 0.0092 0.5878 +vn -0.3090 0.0092 0.9510 +vn 0.3090 0.0092 0.9510 +vn 0.8090 0.0092 0.5878 +vn 0.8090 0.0054 -0.5878 +vn 1.0000 0.0054 -0.0000 +vn 0.3090 0.0054 -0.9510 +vn -0.3090 0.0054 -0.9510 +vn -0.8090 0.0054 -0.5878 +vn -1.0000 0.0054 0.0000 +vn -0.8090 0.0054 0.5878 +vn -0.3090 0.0054 0.9510 +vn 0.3090 0.0054 0.9510 +vn 0.8090 0.0054 0.5878 +vn 0.8090 0.0007 -0.5878 +vn 1.0000 0.0007 -0.0000 +vn 0.3090 0.0007 -0.9511 +vn -0.3090 0.0007 -0.9511 +vn -0.8090 0.0007 -0.5878 +vn -1.0000 0.0007 0.0000 +vn -0.8090 0.0007 0.5878 +vn -0.3090 0.0007 0.9511 +vn 0.3090 0.0007 0.9511 +vn 0.8090 0.0007 0.5878 +vn 0.7911 -0.2094 -0.5748 +vn 0.9778 -0.2094 -0.0000 +vn 0.3022 -0.2094 -0.9300 +vn -0.3022 -0.2094 -0.9300 +vn -0.7911 -0.2094 -0.5748 +vn -0.9778 -0.2094 0.0000 +vn -0.7911 -0.2094 0.5748 +vn -0.3022 -0.2094 0.9300 +vn 0.3022 -0.2094 0.9300 +vn 0.7911 -0.2094 0.5748 +vn 0.7709 -0.3033 -0.5601 +vn 0.9529 -0.3033 0.0000 +vn 0.2945 -0.3033 -0.9063 +vn -0.2945 -0.3033 -0.9063 +vn -0.7709 -0.3033 -0.5601 +vn -0.9529 -0.3033 0.0000 +vn -0.7709 -0.3033 0.5601 +vn -0.2945 -0.3033 0.9063 +vn 0.2945 -0.3033 0.9063 +vn 0.7709 -0.3033 0.5601 +vn -0.3825 0.9239 -0.0000 +vn -0.3095 0.9239 0.2249 +vn 0.3095 0.9239 0.2249 +vn 0.3825 0.9239 -0.0000 +vn 0.3095 0.9239 -0.2249 +vn 0.8495 0.5276 -0.0000 +vn 0.6872 0.5276 -0.4993 +vn 0.1182 0.9239 -0.3638 +vn 0.2625 0.5276 -0.8079 +vn -0.1182 0.9239 -0.3638 +vn -0.2625 0.5276 -0.8079 +vn -0.3095 0.9239 -0.2249 +vn -0.6872 0.5276 -0.4993 +vn -0.8495 0.5276 -0.0000 +vn -0.6872 0.5276 0.4993 +vn -0.1182 0.9239 0.3638 +vn -0.2625 0.5276 0.8079 +vn 0.1182 0.9239 0.3638 +vn 0.2625 0.5276 0.8079 +vn 0.6872 0.5276 0.4993 +vn 0.9998 0.0224 -0.0000 +vn 0.8088 0.0224 -0.5876 +vn 0.3089 0.0224 -0.9508 +vn -0.3089 0.0224 -0.9508 +vn -0.8088 0.0224 -0.5876 +vn -0.9998 0.0224 0.0000 +vn -0.8088 0.0224 0.5876 +vn -0.3089 0.0224 0.9508 +vn 0.3089 0.0224 0.9508 +vn 0.8088 0.0224 0.5876 +vn -0.3882 0.8341 0.3920 +vn -0.1730 0.6889 0.7039 +vn -0.2436 0.8578 0.4525 +vn -0.4308 0.9025 0.0000 +vn -0.0000 0.7100 0.7042 +vn 0.0000 0.8893 0.4573 +vn 0.1730 0.6889 0.7039 +vn 0.2436 0.8578 0.4525 +vn 0.3882 0.8341 0.3920 +vn 0.4308 0.9025 0.0000 +vn 0.0000 1.0000 -0.0000 +vn -0.2798 0.9600 -0.0000 +vn 0.2798 0.9600 0.0000 +vn 0.2436 0.8578 -0.4525 +vn -0.0000 0.8893 -0.4573 +vn -0.2436 0.8578 -0.4525 +vn 0.3882 0.8341 -0.3920 +vn 0.1730 0.6889 -0.7039 +vn 0.0000 0.7100 -0.7042 +vn -0.1730 0.6889 -0.7039 +vn -0.3882 0.8341 -0.3920 +vn -0.3276 0.9089 -0.2580 +vn -0.6761 0.7099 -0.1975 +vn -0.4308 0.8917 -0.1387 +vn 0.0515 0.9864 -0.1559 +vn -0.7303 0.6823 -0.0342 +vn -0.5114 0.8546 0.0904 +vn -0.7803 0.6141 0.1182 +vn -0.5775 0.7569 0.3058 +vn -0.5615 0.6940 0.4506 +vn -0.2081 0.7480 0.6302 +vn -0.0868 0.9609 0.2628 +vn 0.0010 1.0000 -0.0030 +vn -0.1676 0.8451 0.5076 +vn 0.2819 0.7569 0.5896 +vn 0.3570 0.8546 0.3771 +vn 0.4287 0.8917 0.1451 +vn 0.1828 0.6940 0.6963 +vn 0.5565 0.6141 0.5596 +vn 0.6070 0.6823 0.4074 +vn 0.6608 0.7099 0.2439 +vn 0.4168 0.9089 -0.0122 +vn 0.8495 0.5266 -0.0330 +vn 0.7467 0.4794 -0.4611 +vn 0.7417 0.6538 -0.1498 +vn 0.6864 0.5861 0.4304 +vn 0.5533 0.5742 -0.6035 +vn 0.4653 0.8146 -0.3464 +vn 0.3274 0.6071 -0.7240 +vn 0.1378 0.8377 -0.5285 +vn -0.0502 0.8006 -0.5972 +vn -0.3605 0.9049 -0.2261 +vn 0.2117 0.9683 0.1327 +vn 0.5447 0.7660 0.3415 +vn -0.1627 0.9814 -0.1020 +vn -0.4157 0.8377 0.3542 +vn -0.1092 0.8146 0.5697 +vn 0.1882 0.6538 0.7329 +vn -0.5594 0.8006 0.2149 +vn -0.5092 0.6071 0.6100 +vn -0.3023 0.5742 0.7609 +vn -0.0899 0.4794 0.8730 +vn 0.3403 0.5266 0.7791 +vn 0.3856 0.5864 -0.7123 +vn 0.0631 0.6538 -0.7540 +vn 0.2725 0.7148 -0.6441 +vn 0.6219 0.6008 -0.5023 +vn -0.1342 0.7823 -0.6083 +vn 0.0281 0.8847 -0.4653 +vn -0.3385 0.8372 -0.4296 +vn -0.2288 0.9436 -0.2392 +vn -0.3595 0.9266 -0.1105 +vn -0.1877 0.9704 0.1517 +vn 0.2604 0.9423 -0.2103 +vn 0.5125 0.7523 -0.4140 +vn -0.0285 0.9993 0.0231 +vn 0.1858 0.9436 0.2740 +vn 0.4608 0.8847 0.0704 +vn 0.6870 0.7148 -0.1309 +vn 0.0324 0.9266 0.3747 +vn 0.3488 0.8372 0.4213 +vn 0.5665 0.7823 0.2591 +vn 0.7504 0.6538 0.0969 +vn 0.7775 0.5864 -0.2272 +vn 0.3550 0.9302 -0.0931 +vn 0.6269 0.7588 -0.1768 +vn 0.4233 0.8699 -0.2532 +vn 0.0541 0.9830 -0.1753 +vn 0.7030 0.5963 -0.3877 +vn 0.5216 0.6743 -0.5228 +vn 0.7428 0.3776 -0.5528 +vn 0.5680 0.3941 -0.7225 +vn 0.5702 0.2230 -0.7907 +vn 0.2878 0.2146 -0.9333 +vn 0.2051 0.7182 -0.6649 +vn 0.1125 0.9243 -0.3647 +vn 0.2687 0.4108 -0.8712 +vn -0.0624 0.3941 -0.9169 +vn -0.1365 0.6743 -0.7257 +vn -0.2071 0.8699 -0.4476 +vn -0.0258 0.2230 -0.9745 +vn -0.3024 0.3776 -0.8752 +vn -0.3625 0.5963 -0.7163 +vn -0.4184 0.7588 -0.4992 +vn -0.2409 0.9302 -0.2769 +vn -0.6278 0.7777 0.0316 +vn -0.6104 0.6690 0.4241 +vn -0.5184 0.8380 0.1705 +vn -0.4236 0.8443 -0.3283 +vn -0.4287 0.6946 0.5777 +vn -0.2702 0.8847 0.3799 +vn -0.2357 0.6587 0.7145 +vn -0.0074 0.8240 0.5666 +vn 0.1522 0.7564 0.6362 +vn 0.4521 0.8203 0.3504 +vn 0.0171 0.9998 0.0133 +vn -0.2748 0.9376 -0.2129 +vn 0.3066 0.9217 0.2376 +vn 0.5469 0.8240 -0.1485 +vn 0.3005 0.8847 -0.3565 +vn 0.0358 0.8380 -0.5445 +vn 0.6540 0.7564 -0.0113 +vn 0.6331 0.6587 -0.4065 +vn 0.4525 0.6946 -0.5593 +vn 0.2585 0.6690 -0.6969 +vn -0.1260 0.7777 -0.6158 +vn 0.2793 0.9019 0.3295 +vn 0.6244 0.7389 0.2533 +vn 0.3801 0.9011 0.2087 +vn -0.0803 0.9685 0.2356 +vn 0.6829 0.7259 0.0823 +vn 0.4649 0.8850 -0.0249 +vn 0.7382 0.6698 -0.0808 +vn 0.5363 0.8061 -0.2500 +vn 0.5268 0.7514 -0.3972 +vn 0.1922 0.8029 -0.5643 +vn 0.0620 0.9813 -0.1821 +vn -0.0290 0.9959 0.0852 +vn 0.1481 0.8883 -0.4347 +vn -0.2722 0.8061 -0.5254 +vn -0.3530 0.8850 -0.3035 +vn -0.4284 0.9011 -0.0667 +vn -0.1748 0.7514 -0.6362 +vn -0.5353 0.6698 -0.5146 +vn -0.5911 0.7259 -0.3517 +vn -0.6491 0.7389 -0.1805 +vn -0.4224 0.9019 0.0905 +vn -0.2355 0.5482 0.8025 +vn 0.1528 0.5413 0.8269 +vn -0.1174 0.6420 0.7577 +vn -0.5511 0.5818 0.5981 +vn 0.2525 0.6474 0.7191 +vn 0.0222 0.7894 0.6135 +vn 0.3661 0.7152 0.5953 +vn 0.1754 0.8808 0.4399 +vn 0.2285 0.9265 0.2990 +vn -0.0404 0.9982 0.0439 +vn -0.3277 0.8753 0.3557 +vn -0.4806 0.7050 0.5216 +vn -0.1487 0.9756 0.1613 +vn -0.4527 0.8808 -0.1389 +vn -0.6133 0.7894 0.0280 +vn -0.7456 0.6420 0.1789 +vn -0.3166 0.9265 -0.2033 +vn -0.6233 0.7152 -0.3163 +vn -0.7373 0.6474 -0.1929 +vn -0.8366 0.5413 -0.0848 +vn -0.7806 0.5482 0.3003 +vn -0.4274 -0.0304 0.9035 +vn -0.1850 0.1695 0.9680 +vn -0.4068 0.1518 0.9008 +vn -0.6767 -0.0534 0.7344 +vn -0.1054 0.4293 0.8970 +vn -0.3129 0.4788 0.8203 +vn 0.0056 0.6486 0.7611 +vn -0.1706 0.7453 0.6445 +vn -0.0779 0.8481 0.5242 +vn -0.2980 0.8981 0.3235 +vn -0.5843 0.5064 0.6341 +vn -0.6697 0.1524 0.7268 +vn -0.4164 0.7889 0.4519 +vn -0.6284 0.7453 0.2227 +vn -0.7920 0.4788 0.3788 +vn -0.8646 0.1518 0.4790 +vn -0.5160 0.8481 0.1204 +vn -0.7590 0.6486 0.0565 +vn -0.8854 0.4293 0.1783 +vn -0.9497 0.1695 0.2635 +vn -0.8656 -0.0304 0.4998 +vn -0.4563 -0.0352 -0.8891 +vn -0.7173 0.1447 -0.6816 +vn -0.4884 0.1462 -0.8603 +vn -0.0951 -0.0553 -0.9939 +vn -0.7185 0.3806 -0.5822 +vn -0.4910 0.4600 -0.7398 +vn -0.6928 0.5817 -0.4261 +vn -0.4565 0.7173 -0.5264 +vn -0.4080 0.8281 -0.3844 +vn -0.0417 0.8989 -0.4361 +vn -0.0822 0.5064 -0.8584 +vn -0.0942 0.1533 -0.9837 +vn -0.0586 0.7883 -0.6124 +vn 0.3483 0.7173 -0.6034 +vn 0.3418 0.4600 -0.8195 +vn 0.3164 0.1462 -0.9373 +vn 0.3277 0.8281 -0.4549 +vn 0.5994 0.5817 -0.5498 +vn 0.5950 0.3806 -0.7080 +vn 0.5750 0.1447 -0.8053 +vn 0.2794 -0.0352 -0.9595 +vn 0.9758 0.1045 0.1922 +vn 0.9473 0.1875 -0.2597 +vn 0.9588 0.2620 0.1099 +vn 0.7230 0.1115 0.6818 +vn 0.8770 0.3435 -0.3359 +vn 0.8538 0.5206 -0.0049 +vn 0.7730 0.4719 -0.4241 +vn 0.6796 0.7173 -0.1534 +vn 0.5421 0.8119 -0.2168 +vn 0.2024 0.9605 0.1909 +vn 0.5563 0.6444 0.5247 +vn 0.6893 0.3198 0.6501 +vn 0.3461 0.8796 0.3264 +vn -0.1134 0.7173 0.6874 +vn 0.0450 0.5206 0.8526 +vn 0.1658 0.2620 0.9507 +vn -0.1847 0.8119 0.5538 +vn -0.3782 0.4719 0.7965 +vn -0.2840 0.3435 0.8952 +vn -0.2038 0.1875 0.9609 +vn 0.2490 0.1045 0.9629 +vn 0.7483 0.1730 -0.6404 +vn 0.3720 0.2287 -0.8996 +vn 0.6608 0.3244 -0.6768 +vn 0.9717 0.1925 -0.1371 +vn 0.2562 0.3757 -0.8906 +vn 0.4851 0.5694 -0.6636 +vn 0.1124 0.4925 -0.8630 +vn 0.2452 0.7468 -0.6182 +vn 0.1026 0.8293 -0.5494 +vn 0.1967 0.9801 -0.0278 +vn 0.7024 0.7049 -0.0991 +vn 0.9091 0.3963 -0.1282 +vn 0.3982 0.9156 -0.0562 +vn 0.4066 0.7468 0.5263 +vn 0.6497 0.5694 0.5036 +vn 0.8222 0.3244 0.4676 +vn 0.2505 0.8293 0.4995 +vn 0.3467 0.4925 0.7983 +vn 0.4925 0.3757 0.7850 +vn 0.6063 0.2287 0.7617 +vn 0.8962 0.1730 0.4085 +vn -0.3026 0.9349 0.1857 +vn -0.5073 0.7521 0.4206 +vn -0.2808 0.8919 0.3545 +vn 0.0215 0.9978 0.0623 +vn -0.4443 0.6426 0.6242 +vn -0.2000 0.7561 0.6231 +vn -0.3801 0.4817 0.7896 +vn -0.1159 0.5414 0.8327 +vn -0.0511 0.4006 0.9148 +vn 0.2970 0.4123 0.8613 +vn 0.1857 0.8220 0.5384 +vn 0.0836 0.9665 0.2425 +vn 0.2656 0.5798 0.7702 +vn 0.6046 0.5414 0.5843 +vn 0.5416 0.7561 0.3673 +vn 0.4396 0.8919 0.1060 +vn 0.6042 0.4006 0.6888 +vn 0.7860 0.4817 0.3875 +vn 0.7346 0.6426 0.2176 +vn 0.6588 0.7521 0.0185 +vn 0.3527 0.9349 -0.0403 +vn 0.1747 0.9099 -0.3763 +vn -0.0060 0.7816 -0.6237 +vn -0.0053 0.9095 -0.4157 +vn 0.1659 0.9837 -0.0688 +vn -0.2692 0.7030 -0.6583 +vn -0.3378 0.8204 -0.4614 +vn -0.5035 0.5554 -0.6619 +vn -0.6262 0.6271 -0.4633 +vn -0.7483 0.4900 -0.4472 +vn -0.8369 0.5275 -0.1458 +vn -0.4024 0.9064 -0.1287 +vn -0.0389 0.9948 -0.0938 +vn -0.7091 0.6900 -0.1453 +vn -0.7029 0.6856 0.1893 +vn -0.4179 0.8815 0.2198 +vn -0.0820 0.9681 0.2369 +vn -0.8208 0.5454 0.1698 +vn -0.6307 0.6524 0.4201 +vn -0.3989 0.8019 0.4447 +vn -0.1333 0.8787 0.4583 +vn 0.1021 0.9652 0.2406 +vn -0.1107 0.9173 0.3826 +vn -0.0469 0.7008 0.7118 +vn 0.0631 0.8743 0.4813 +vn 0.0080 1.0000 0.0029 +vn 0.1797 0.5527 0.8138 +vn 0.3736 0.6947 0.6146 +vn 0.3715 0.3418 0.8632 +vn 0.6124 0.4031 0.6800 +vn 0.7026 0.2196 0.6768 +vn 0.9173 0.2199 0.3318 +vn 0.5904 0.7783 0.2136 +vn 0.2280 0.9702 0.0825 +vn 0.8434 0.4423 0.3051 +vn 0.9058 0.4031 -0.1308 +vn 0.6804 0.6947 -0.2334 +vn 0.3565 0.8743 -0.3295 +vn 0.9730 0.2196 -0.0707 +vn 0.8378 0.3418 -0.4257 +vn 0.6587 0.5527 -0.5105 +vn 0.4193 0.7008 -0.5771 +vn 0.1597 0.9173 -0.3649 +vn 0.4450 0.8922 -0.0773 +vn 0.4729 0.7701 -0.4282 +vn 0.3350 0.9147 -0.2260 +vn 0.2236 0.9516 0.2109 +vn 0.2937 0.7344 -0.6119 +vn 0.1007 0.8788 -0.4664 +vn 0.1135 0.6314 -0.7671 +vn -0.1310 0.7348 -0.6655 +vn -0.2580 0.6209 -0.7403 +vn -0.5513 0.6525 -0.5199 +vn -0.1967 0.9628 -0.1855 +vn 0.0751 0.9947 0.0708 +vn -0.4408 0.7955 -0.4158 +vn -0.6720 0.7348 -0.0918 +vn -0.4597 0.8788 0.1278 +vn -0.2060 0.9147 0.3477 +vn -0.7541 0.6209 -0.2142 +vn -0.7592 0.6314 0.1582 +vn -0.5937 0.7344 0.3290 +vn -0.3999 0.7701 0.4971 +vn -0.0511 0.8922 0.4487 +vn -0.1503 0.9239 -0.3518 +vn -0.4794 0.7983 -0.3647 +vn -0.2792 0.9282 -0.2459 +vn 0.1296 0.9776 -0.1658 +vn -0.6189 0.7614 -0.1930 +vn -0.4639 0.8856 -0.0244 +vn -0.7417 0.6701 -0.0291 +vn -0.6193 0.7621 0.1891 +vn -0.6728 0.6686 0.3166 +vn -0.4404 0.6991 0.5633 +vn -0.1775 0.9576 0.2270 +vn 0.0189 0.9995 -0.0241 +vn -0.3555 0.8166 0.4547 +vn -0.0341 0.7621 0.6466 +vn 0.1356 0.8856 0.4443 +vn 0.3060 0.9282 0.2116 +vn -0.1449 0.6686 0.7293 +vn 0.2072 0.6701 0.7128 +vn 0.3366 0.7614 0.5540 +vn 0.4696 0.7983 0.3772 +vn 0.3776 0.9239 0.0609 +vn -0.3827 0.3009 -0.8735 +vn -0.0000 0.3256 -0.9455 +vn 0.3827 0.3009 -0.8735 +vn 0.9498 0.3009 0.0857 +vn 0.8284 0.3256 0.4557 +vn 0.5809 0.3009 0.7563 +vn -0.4762 0.3009 0.8263 +vn -0.7612 0.3256 0.5609 +vn -0.9302 0.3009 0.2101 +vn 0.3696 0.5520 -0.7475 +vn 0.6457 0.5975 -0.4755 +vn 0.8235 0.5520 -0.1312 +vn 0.3313 0.5520 0.7652 +vn -0.0546 0.5975 0.8000 +vn -0.4323 0.5520 0.7131 +vn -0.8294 0.5520 0.0861 +vn -0.7467 0.5975 -0.2925 +vn -0.5502 0.5520 -0.6265 +vn -0.1121 -0.8114 0.5736 +vn 0.1258 -0.8360 0.5341 +vn 0.3563 -0.8114 0.4633 +vn -0.4354 -0.8114 -0.3899 +vn -0.5232 -0.8360 -0.1654 +vn -0.5804 -0.8114 0.0689 +vn 0.5472 -0.8114 -0.2052 +vn 0.3889 -0.8360 -0.3871 +vn 0.2078 -0.8114 -0.5462 +vn 0.7747 0.4670 -0.4263 +vn 0.6212 0.4816 -0.6182 +vn 0.4300 0.4670 -0.7727 +vn 0.1450 0.4670 0.8723 +vn 0.3770 0.4816 0.7912 +vn 0.5861 0.4670 0.6621 +vn -0.4195 0.4670 -0.7784 +vn -0.6127 0.4816 -0.6266 +vn -0.7688 0.4670 -0.4368 +vn -0.5592 0.7989 -0.2215 +vn -0.7227 0.5674 -0.3947 +vn -0.7017 0.6884 -0.1836 +vn -0.4700 0.8798 0.0711 +vn -0.8768 0.3453 -0.3347 +vn -0.9030 0.4159 -0.1076 +vn -0.9580 0.0879 -0.2728 +vn -0.9954 0.0900 -0.0315 +vn -0.9959 -0.0907 0.0046 +vn -0.9445 -0.0868 0.3168 +vn -0.8484 0.4756 0.2327 +vn -0.6299 0.7650 0.1342 +vn -0.9470 0.1190 0.2983 +vn -0.7913 0.1485 0.5931 +vn -0.6899 0.4770 0.5445 +vn -0.4976 0.7470 0.4410 +vn -0.8029 -0.0353 0.5951 +vn -0.6196 0.1850 0.7628 +vn -0.5318 0.4443 0.7210 +vn -0.3842 0.6645 0.6409 +vn -0.3662 0.8542 0.3690 +vn 0.4187 0.8557 0.3041 +vn 0.5844 0.5763 0.5713 +vn 0.6086 0.7396 0.2873 +vn 0.3076 0.9448 -0.1126 +vn 0.7740 0.3085 0.5529 +vn 0.8840 0.4005 0.2412 +vn 0.8661 -0.0025 0.4999 +vn 0.9809 -0.0253 0.1930 +vn 0.9547 -0.2456 0.1682 +vn 0.9149 -0.3031 -0.2665 +vn 0.8538 0.4482 -0.2648 +vn 0.5367 0.8247 -0.1784 +vn 0.9577 -0.0403 -0.2851 +vn 0.7149 -0.0449 -0.6978 +vn 0.6023 0.3797 -0.7022 +vn 0.3426 0.7200 -0.6035 +vn 0.7092 -0.2636 -0.6539 +vn 0.4504 -0.0331 -0.8922 +vn 0.3406 0.2766 -0.8986 +vn 0.1687 0.5457 -0.8208 +vn 0.1732 0.8376 -0.5181 +vn 0.2617 0.8557 -0.4464 +vn 0.5115 0.5763 -0.6374 +vn 0.2266 0.7396 -0.6338 +vn -0.1421 0.9448 -0.2952 +vn 0.4747 0.3085 -0.8243 +vn 0.1537 0.4005 -0.9033 +vn 0.4129 -0.0025 -0.9108 +vn 0.0963 -0.0253 -0.9950 +vn 0.0742 -0.2456 -0.9665 +vn -0.3546 -0.3031 -0.8845 +vn -0.3469 0.4482 -0.8239 +vn -0.2299 0.8247 -0.5167 +vn -0.3772 -0.0403 -0.9253 +vn -0.7643 -0.0449 -0.6433 +vn -0.7576 0.3797 -0.5309 +vn -0.6341 0.7200 -0.2821 +vn -0.7200 -0.2636 -0.6420 +vn -0.9319 -0.0331 -0.3611 +vn -0.9276 0.2766 -0.2512 +vn -0.8334 0.5457 -0.0878 +vn -0.5325 0.8376 -0.1218 +vn -0.4294 0.8557 0.2887 +vn -0.7373 0.5763 0.3524 +vn -0.4790 0.7396 0.4728 +vn 0.0000 0.9448 0.3276 +vn -0.7852 0.3085 0.5369 +vn -0.5303 0.4005 0.7473 +vn -0.7671 -0.0025 0.6415 +vn -0.5184 -0.0253 0.8548 +vn -0.4861 -0.2456 0.8387 +vn -0.0641 -0.3031 0.9508 +vn -0.0448 0.4482 0.8928 +vn -0.0169 0.8247 0.5653 +vn -0.0614 -0.0403 0.9973 +vn 0.4096 -0.0449 0.9111 +vn 0.4524 0.3797 0.8069 +vn 0.4490 0.7200 0.5292 +vn 0.3703 -0.2636 0.8907 +vn 0.6831 -0.0331 0.7296 +vn 0.7268 0.2766 0.6287 +vn 0.7128 0.5457 0.4405 +vn 0.4270 0.8376 0.3407 +vn 0.4288 0.7504 0.5031 +vn 0.7291 0.6428 0.2351 +vn 0.4695 0.8199 0.3277 +vn 0.0041 0.8198 0.5727 +vn 0.7400 0.6725 -0.0117 +vn 0.4825 0.8758 -0.0117 +vn 0.7256 0.6381 -0.2576 +vn 0.4647 0.8135 -0.3498 +vn 0.4215 0.7406 -0.5233 +vn -0.0042 0.8087 -0.5881 +vn -0.0001 1.0000 -0.0095 +vn 0.0027 0.9255 0.3787 +vn -0.0028 0.9182 -0.3962 +vn -0.4696 0.8135 -0.3432 +vn -0.4827 0.8758 -0.0049 +vn -0.4648 0.8199 0.3343 +vn -0.4289 0.7406 -0.5172 +vn -0.7292 0.6381 -0.2472 +vn -0.7401 0.6725 -0.0011 +vn -0.7257 0.6428 0.2454 +vn -0.4216 0.7504 0.5091 +# 688 vertex normals + +vt 0.0803 0.0668 0.0000 +vt 0.0943 0.0534 0.0000 +vt 0.1515 0.1151 0.0000 +vt 0.1391 0.1269 0.0000 +vt 0.1087 0.0403 0.0000 +vt 0.1642 0.1035 0.0000 +vt 0.1235 0.0275 0.0000 +vt 0.1772 0.0922 0.0000 +vt 0.1386 0.0152 0.0000 +vt 0.1905 0.0813 0.0000 +vt 0.1541 0.0033 0.0000 +vt 0.2041 0.0708 0.0000 +vt 0.0151 0.1392 0.0000 +vt 0.0273 0.1239 0.0000 +vt 0.0923 0.1773 0.0000 +vt 0.0815 0.1907 0.0000 +vt 0.0400 0.1091 0.0000 +vt 0.1035 0.1643 0.0000 +vt 0.0531 0.0946 0.0000 +vt 0.1150 0.1515 0.0000 +vt 0.0665 0.0805 0.0000 +vt 0.1269 0.1391 0.0000 +vt 0.2087 0.1768 0.0000 +vt 0.1979 0.1872 0.0000 +vt 0.2198 0.1667 0.0000 +vt 0.2310 0.1568 0.0000 +vt 0.2425 0.1473 0.0000 +vt 0.2542 0.1380 0.0000 +vt 0.1570 0.2309 0.0000 +vt 0.1475 0.2424 0.0000 +vt 0.1668 0.2196 0.0000 +vt 0.1769 0.2086 0.0000 +vt 0.1873 0.1978 0.0000 +vt 0.2662 0.2383 0.0000 +vt 0.2567 0.2474 0.0000 +vt 0.2758 0.2294 0.0000 +vt 0.2856 0.2208 0.0000 +vt 0.2956 0.2123 0.0000 +vt 0.3057 0.2040 0.0000 +vt 0.2208 0.2855 0.0000 +vt 0.2123 0.2954 0.0000 +vt 0.2295 0.2757 0.0000 +vt 0.2384 0.2661 0.0000 +vt 0.2475 0.2566 0.0000 +vt 0.3239 0.2996 0.0000 +vt 0.3156 0.3076 0.0000 +vt 0.3325 0.2916 0.0000 +vt 0.3411 0.2839 0.0000 +vt 0.3499 0.2762 0.0000 +vt 0.3589 0.2688 0.0000 +vt 0.2834 0.3413 0.0000 +vt 0.2758 0.3501 0.0000 +vt 0.2913 0.3327 0.0000 +vt 0.2992 0.3242 0.0000 +vt 0.3073 0.3158 0.0000 +vt 0.3817 0.3608 0.0000 +vt 0.3744 0.3678 0.0000 +vt 0.3891 0.3538 0.0000 +vt 0.3966 0.3470 0.0000 +vt 0.4042 0.3403 0.0000 +vt 0.4119 0.3337 0.0000 +vt 0.3462 0.3970 0.0000 +vt 0.3394 0.4046 0.0000 +vt 0.3531 0.3896 0.0000 +vt 0.3601 0.3823 0.0000 +vt 0.3672 0.3750 0.0000 +vt 0.4398 0.4216 0.0000 +vt 0.4332 0.4280 0.0000 +vt 0.4465 0.4153 0.0000 +vt 0.4532 0.4091 0.0000 +vt 0.4600 0.4029 0.0000 +vt 0.4668 0.3967 0.0000 +vt 0.4075 0.4543 0.0000 +vt 0.4012 0.4610 0.0000 +vt 0.4138 0.4477 0.0000 +vt 0.4202 0.4411 0.0000 +vt 0.4267 0.4345 0.0000 +vt 0.4984 0.4820 0.0000 +vt 0.4920 0.4882 0.0000 +vt 0.5048 0.4759 0.0000 +vt 0.5113 0.4698 0.0000 +vt 0.5178 0.4637 0.0000 +vt 0.5243 0.4576 0.0000 +vt 0.4671 0.5134 0.0000 +vt 0.4609 0.5198 0.0000 +vt 0.4733 0.5071 0.0000 +vt 0.4795 0.5007 0.0000 +vt 0.4857 0.4944 0.0000 +vt 0.5569 0.5423 0.0000 +vt 0.5509 0.5482 0.0000 +vt 0.5630 0.5365 0.0000 +vt 0.5692 0.5306 0.0000 +vt 0.5753 0.5248 0.0000 +vt 0.5815 0.5190 0.0000 +vt 0.5270 0.5722 0.0000 +vt 0.5211 0.5783 0.0000 +vt 0.5330 0.5662 0.0000 +vt 0.5389 0.5602 0.0000 +vt 0.5449 0.5542 0.0000 +vt 0.6156 0.6025 0.0000 +vt 0.6098 0.6082 0.0000 +vt 0.6215 0.5968 0.0000 +vt 0.6274 0.5912 0.0000 +vt 0.6333 0.5856 0.0000 +vt 0.6392 0.5800 0.0000 +vt 0.5868 0.6313 0.0000 +vt 0.5810 0.6371 0.0000 +vt 0.5925 0.6255 0.0000 +vt 0.5982 0.6197 0.0000 +vt 0.6040 0.6139 0.0000 +vt 0.6744 0.6625 0.0000 +vt 0.6687 0.6681 0.0000 +vt 0.6801 0.6570 0.0000 +vt 0.6859 0.6515 0.0000 +vt 0.6916 0.6460 0.0000 +vt 0.6974 0.6405 0.0000 +vt 0.6463 0.6906 0.0000 +vt 0.6407 0.6963 0.0000 +vt 0.6518 0.6850 0.0000 +vt 0.6574 0.6793 0.0000 +vt 0.6630 0.6737 0.0000 +vt 0.7330 0.7227 0.0000 +vt 0.7276 0.7279 0.0000 +vt 0.7383 0.7175 0.0000 +vt 0.7437 0.7124 0.0000 +vt 0.7491 0.7073 0.0000 +vt 0.7545 0.7022 0.0000 +vt 0.7067 0.7490 0.0000 +vt 0.7016 0.7544 0.0000 +vt 0.7119 0.7437 0.0000 +vt 0.7171 0.7384 0.0000 +vt 0.7224 0.7331 0.0000 +vt 0.7917 0.7827 0.0000 +vt 0.7866 0.7876 0.0000 +vt 0.7968 0.7778 0.0000 +vt 0.8020 0.7730 0.0000 +vt 0.8071 0.7682 0.0000 +vt 0.8121 0.7633 0.0000 +vt 0.7669 0.8078 0.0000 +vt 0.7619 0.8127 0.0000 +vt 0.7718 0.8028 0.0000 +vt 0.7767 0.7977 0.0000 +vt 0.7816 0.7926 0.0000 +vt 0.8509 0.8420 0.0000 +vt 0.8455 0.8471 0.0000 +vt 0.8564 0.8371 0.0000 +vt 0.8618 0.8323 0.0000 +vt 0.8669 0.8274 0.0000 +vt 0.8716 0.8224 0.0000 +vt 0.8255 0.8682 0.0000 +vt 0.8204 0.8728 0.0000 +vt 0.8305 0.8632 0.0000 +vt 0.8353 0.8578 0.0000 +vt 0.8403 0.8524 0.0000 +vt 0.9040 0.8910 0.0000 +vt 0.8963 0.8984 0.0000 +vt 0.9118 0.8840 0.0000 +vt 0.9193 0.8775 0.0000 +vt 0.9259 0.8715 0.0000 +vt 0.9305 0.8655 0.0000 +vt 0.8690 0.9277 0.0000 +vt 0.8630 0.9322 0.0000 +vt 0.8751 0.9211 0.0000 +vt 0.8817 0.9137 0.0000 +vt 0.8888 0.9061 0.0000 +vt 0.9247 0.9098 0.0000 +vt 0.9158 0.9182 0.0000 +vt 0.9339 0.9017 0.0000 +vt 0.9436 0.8938 0.0000 +vt 0.9533 0.8856 0.0000 +vt 0.9616 0.8755 0.0000 +vt 0.8828 0.9552 0.0000 +vt 0.8726 0.9634 0.0000 +vt 0.8911 0.9456 0.0000 +vt 0.8991 0.9360 0.0000 +vt 0.9074 0.9269 0.0000 +vt 0.9492 0.9813 0.0000 +vt 0.9478 0.9784 0.0000 +vt 0.9560 0.9697 0.0000 +vt 0.9627 0.9656 0.0000 +vt 0.9669 0.9590 0.0000 +vt 0.9478 0.9506 0.0000 +vt 0.9548 0.9433 0.0000 +vt 0.9698 0.9549 0.0000 +vt 0.9624 0.9364 0.0000 +vt 0.9727 0.9518 0.0000 +vt 0.9711 0.9312 0.0000 +vt 0.9756 0.9509 0.0000 +vt 0.9808 0.9283 0.0000 +vt 0.9786 0.9523 0.0000 +vt 0.9925 0.9285 0.0000 +vt 0.9252 0.9950 0.0000 +vt 0.9251 0.9832 0.0000 +vt 0.9488 0.9755 0.0000 +vt 0.9282 0.9735 0.0000 +vt 0.9518 0.9726 0.0000 +vt 0.9335 0.9650 0.0000 +vt 0.9405 0.9575 0.0000 +vt 0.9334 0.9360 0.0000 +vt 0.9420 0.9278 0.0000 +vt 0.9513 0.9199 0.0000 +vt 0.9616 0.9126 0.0000 +vt 0.9733 0.9059 0.0000 +vt 0.9868 0.8986 0.0000 +vt 0.8954 0.9889 0.0000 +vt 0.9029 0.9755 0.0000 +vt 0.9097 0.9639 0.0000 +vt 0.9171 0.9536 0.0000 +vt 0.9251 0.9445 0.0000 +vt 0.4262 0.0059 0.5000 +vt 0.6166 0.1053 0.5000 +vt 0.5507 0.1689 0.5000 +vt 0.3773 0.0531 0.5000 +vt 0.7581 0.2519 0.5000 +vt 0.6923 0.3154 0.5000 +vt 0.8996 0.3984 0.5000 +vt 0.8338 0.4620 0.5000 +vt 0.9923 0.5922 0.5000 +vt 0.9435 0.6394 0.5000 +vt 0.6604 0.3462 0.5000 +vt 0.5188 0.1997 0.5000 +vt 0.8019 0.4928 0.5000 +vt 0.7700 0.5236 0.5000 +vt 0.6285 0.3770 0.5000 +vt 0.4870 0.2304 0.5000 +vt 0.8946 0.6866 0.5000 +vt 0.7042 0.5872 0.5000 +vt 0.5627 0.4406 0.5000 +vt 0.4211 0.2940 0.5000 +vt 0.3284 0.1003 0.5000 +vt 0.0097 0.5435 0.0000 +vt 0.2352 0.5435 0.0000 +vt 0.2352 0.9945 0.0000 +vt 0.0097 0.9945 0.0000 +vt 0.4607 0.5435 0.0000 +vt 0.4607 0.9945 0.0000 +# 236 texture coords + +g palm_tree +s 1 +f 1/1/1 2/2/2 3/3/3 4/4/4 +f 2/2/2 5/5/5 6/6/6 3/3/3 +f 5/5/5 7/7/7 8/8/8 6/6/6 +f 7/7/7 9/9/9 10/10/10 8/8/8 +f 9/9/9 11/11/11 12/12/12 10/10/10 +f 11/13/11 13/14/13 14/15/14 12/16/12 +f 13/14/13 15/17/15 16/18/16 14/15/14 +f 15/17/15 17/19/17 18/20/18 16/18/16 +f 17/19/17 19/21/19 20/22/20 18/20/18 +f 19/21/19 1/1/1 4/4/4 20/22/20 +f 4/4/4 3/3/3 21/23/21 22/24/22 +f 3/3/3 6/6/6 23/25/23 21/23/21 +f 6/6/6 8/8/8 24/26/24 23/25/23 +f 8/8/8 10/10/10 25/27/25 24/26/24 +f 10/10/10 12/12/12 26/28/26 25/27/25 +f 12/16/12 14/15/14 27/29/27 26/30/26 +f 14/15/14 16/18/16 28/31/28 27/29/27 +f 16/18/16 18/20/18 29/32/29 28/31/28 +f 18/20/18 20/22/20 30/33/30 29/32/29 +f 20/22/20 4/4/4 22/24/22 30/33/30 +f 22/24/22 21/23/21 31/34/31 32/35/32 +f 21/23/21 23/25/23 33/36/33 31/34/31 +f 23/25/23 24/26/24 34/37/34 33/36/33 +f 24/26/24 25/27/25 35/38/35 34/37/34 +f 25/27/25 26/28/26 36/39/36 35/38/35 +f 26/30/26 27/29/27 37/40/37 36/41/36 +f 27/29/27 28/31/28 38/42/38 37/40/37 +f 28/31/28 29/32/29 39/43/39 38/42/38 +f 29/32/29 30/33/30 40/44/40 39/43/39 +f 30/33/30 22/24/22 32/35/32 40/44/40 +f 32/35/32 31/34/31 41/45/41 42/46/42 +f 31/34/31 33/36/33 43/47/43 41/45/41 +f 33/36/33 34/37/34 44/48/44 43/47/43 +f 34/37/34 35/38/35 45/49/45 44/48/44 +f 35/38/35 36/39/36 46/50/46 45/49/45 +f 36/41/36 37/40/37 47/51/47 46/52/46 +f 37/40/37 38/42/38 48/53/48 47/51/47 +f 38/42/38 39/43/39 49/54/49 48/53/48 +f 39/43/39 40/44/40 50/55/50 49/54/49 +f 40/44/40 32/35/32 42/46/42 50/55/50 +f 42/46/42 41/45/41 51/56/51 52/57/52 +f 41/45/41 43/47/43 53/58/53 51/56/51 +f 43/47/43 44/48/44 54/59/54 53/58/53 +f 44/48/44 45/49/45 55/60/55 54/59/54 +f 45/49/45 46/50/46 56/61/56 55/60/55 +f 46/52/46 47/51/47 57/62/57 56/63/56 +f 47/51/47 48/53/48 58/64/58 57/62/57 +f 48/53/48 49/54/49 59/65/59 58/64/58 +f 49/54/49 50/55/50 60/66/60 59/65/59 +f 50/55/50 42/46/42 52/57/52 60/66/60 +f 52/57/52 51/56/51 61/67/61 62/68/62 +f 51/56/51 53/58/53 63/69/63 61/67/61 +f 53/58/53 54/59/54 64/70/64 63/69/63 +f 54/59/54 55/60/55 65/71/65 64/70/64 +f 55/60/55 56/61/56 66/72/66 65/71/65 +f 56/63/56 57/62/57 67/73/67 66/74/66 +f 57/62/57 58/64/58 68/75/68 67/73/67 +f 58/64/58 59/65/59 69/76/69 68/75/68 +f 59/65/59 60/66/60 70/77/70 69/76/69 +f 60/66/60 52/57/52 62/68/62 70/77/70 +f 62/68/62 61/67/61 71/78/71 72/79/72 +f 61/67/61 63/69/63 73/80/73 71/78/71 +f 63/69/63 64/70/64 74/81/74 73/80/73 +f 64/70/64 65/71/65 75/82/75 74/81/74 +f 65/71/65 66/72/66 76/83/76 75/82/75 +f 66/74/66 67/73/67 77/84/77 76/85/76 +f 67/73/67 68/75/68 78/86/78 77/84/77 +f 68/75/68 69/76/69 79/87/79 78/86/78 +f 69/76/69 70/77/70 80/88/80 79/87/79 +f 70/77/70 62/68/62 72/79/72 80/88/80 +f 72/79/72 71/78/71 81/89/81 82/90/82 +f 71/78/71 73/80/73 83/91/83 81/89/81 +f 73/80/73 74/81/74 84/92/84 83/91/83 +f 74/81/74 75/82/75 85/93/85 84/92/84 +f 75/82/75 76/83/76 86/94/86 85/93/85 +f 76/85/76 77/84/77 87/95/87 86/96/86 +f 77/84/77 78/86/78 88/97/88 87/95/87 +f 78/86/78 79/87/79 89/98/89 88/97/88 +f 79/87/79 80/88/80 90/99/90 89/98/89 +f 80/88/80 72/79/72 82/90/82 90/99/90 +f 82/90/82 81/89/81 91/100/91 92/101/92 +f 81/89/81 83/91/83 93/102/93 91/100/91 +f 83/91/83 84/92/84 94/103/94 93/102/93 +f 84/92/84 85/93/85 95/104/95 94/103/94 +f 85/93/85 86/94/86 96/105/96 95/104/95 +f 86/96/86 87/95/87 97/106/97 96/107/96 +f 87/95/87 88/97/88 98/108/98 97/106/97 +f 88/97/88 89/98/89 99/109/99 98/108/98 +f 89/98/89 90/99/90 100/110/100 99/109/99 +f 90/99/90 82/90/82 92/101/92 100/110/100 +f 92/101/92 91/100/91 101/111/101 102/112/102 +f 91/100/91 93/102/93 103/113/103 101/111/101 +f 93/102/93 94/103/94 104/114/104 103/113/103 +f 94/103/94 95/104/95 105/115/105 104/114/104 +f 95/104/95 96/105/96 106/116/106 105/115/105 +f 96/107/96 97/106/97 107/117/107 106/118/106 +f 97/106/97 98/108/98 108/119/108 107/117/107 +f 98/108/98 99/109/99 109/120/109 108/119/108 +f 99/109/99 100/110/100 110/121/110 109/120/109 +f 100/110/100 92/101/92 102/112/102 110/121/110 +f 102/112/102 101/111/101 111/122/111 112/123/112 +f 101/111/101 103/113/103 113/124/113 111/122/111 +f 103/113/103 104/114/104 114/125/114 113/124/113 +f 104/114/104 105/115/105 115/126/115 114/125/114 +f 105/115/105 106/116/106 116/127/116 115/126/115 +f 106/118/106 107/117/107 117/128/117 116/129/116 +f 107/117/107 108/119/108 118/130/118 117/128/117 +f 108/119/108 109/120/109 119/131/119 118/130/118 +f 109/120/109 110/121/110 120/132/120 119/131/119 +f 110/121/110 102/112/102 112/123/112 120/132/120 +f 112/123/112 111/122/111 121/133/121 122/134/122 +f 111/122/111 113/124/113 123/135/123 121/133/121 +f 113/124/113 114/125/114 124/136/124 123/135/123 +f 114/125/114 115/126/115 125/137/125 124/136/124 +f 115/126/115 116/127/116 126/138/126 125/137/125 +f 116/129/116 117/128/117 127/139/127 126/140/126 +f 117/128/117 118/130/118 128/141/128 127/139/127 +f 118/130/118 119/131/119 129/142/129 128/141/128 +f 119/131/119 120/132/120 130/143/130 129/142/129 +f 120/132/120 112/123/112 122/134/122 130/143/130 +f 122/134/122 121/133/121 131/144/131 132/145/132 +f 121/133/121 123/135/123 133/146/133 131/144/131 +f 123/135/123 124/136/124 134/147/134 133/146/133 +f 124/136/124 125/137/125 135/148/135 134/147/134 +f 125/137/125 126/138/126 136/149/136 135/148/135 +f 126/140/126 127/139/127 137/150/137 136/151/136 +f 127/139/127 128/141/128 138/152/138 137/150/137 +f 128/141/128 129/142/129 139/153/139 138/152/138 +f 129/142/129 130/143/130 140/154/140 139/153/139 +f 130/143/130 122/134/122 132/145/132 140/154/140 +f 132/145/132 131/144/131 141/155/141 142/156/142 +f 131/144/131 133/146/133 143/157/143 141/155/141 +f 133/146/133 134/147/134 144/158/144 143/157/143 +f 134/147/134 135/148/135 145/159/145 144/158/144 +f 135/148/135 136/149/136 146/160/146 145/159/145 +f 136/151/136 137/150/137 147/161/147 146/162/146 +f 137/150/137 138/152/138 148/163/148 147/161/147 +f 138/152/138 139/153/139 149/164/149 148/163/148 +f 139/153/139 140/154/140 150/165/150 149/164/149 +f 140/154/140 132/145/132 142/156/142 150/165/150 +f 141/155/141 151/166/151 152/167/152 142/156/142 +f 143/157/143 153/168/153 151/166/151 141/155/141 +f 144/158/144 154/169/154 153/168/153 143/157/143 +f 145/159/145 155/170/155 154/169/154 144/158/144 +f 146/160/146 156/171/156 155/170/155 145/159/145 +f 147/161/147 157/172/157 156/173/156 146/162/146 +f 148/163/148 158/174/158 157/172/157 147/161/147 +f 149/164/149 159/175/159 158/174/158 148/163/148 +f 150/165/150 160/176/160 159/175/159 149/164/149 +f 142/156/142 152/167/152 160/176/160 150/165/150 +f 161/177/161 162/178/162 163/179/163 164/180/164 +f 165/181/165 164/180/164 166/182/166 167/183/167 +f 168/184/168 165/181/165 167/183/167 169/185/169 +f 170/186/170 168/184/168 169/185/169 171/187/171 +f 172/188/172 170/186/170 171/187/171 173/189/173 +f 161/190/161 172/188/172 173/189/173 174/191/174 +f 162/178/162 161/177/161 174/192/174 175/193/175 +f 176/194/176 162/178/162 175/193/175 177/195/177 +f 178/196/178 176/194/176 177/195/177 179/197/179 +f 163/179/163 178/196/178 179/197/179 180/198/180 +f 164/180/164 163/179/163 180/198/180 166/182/166 +f 181/199/181 152/167/152 151/166/151 182/200/182 +f 182/200/182 151/166/151 153/168/153 183/201/183 +f 183/201/183 153/168/153 154/169/154 184/202/184 +f 184/202/184 154/169/154 155/170/155 185/203/185 +f 185/203/185 155/170/155 156/171/156 186/204/186 +f 186/205/186 156/173/156 157/172/157 187/206/187 +f 187/206/187 157/172/157 158/174/158 188/207/188 +f 188/207/188 158/174/158 159/175/159 189/208/189 +f 189/208/189 159/175/159 160/176/160 190/209/190 +f 190/209/190 160/176/160 152/167/152 181/199/181 +f 166/182/166 181/199/181 182/200/182 167/183/167 +f 167/183/167 182/200/182 183/201/183 169/185/169 +f 169/185/169 183/201/183 184/202/184 171/187/171 +f 171/187/171 184/202/184 185/203/185 173/189/173 +f 173/189/173 185/203/185 186/204/186 174/191/174 +f 174/192/174 186/205/186 187/206/187 175/193/175 +f 175/193/175 187/206/187 188/207/188 177/195/177 +f 177/195/177 188/207/188 189/208/189 179/197/179 +f 179/197/179 189/208/189 190/209/190 180/198/180 +f 180/198/180 190/209/190 181/199/181 166/182/166 +f 168/184/168 170/186/170 172/188/172 165/181/165 +f 176/194/176 178/196/178 163/179/163 162/178/162 +f 165/181/165 172/188/172 161/190/161 164/180/164 +f 191/210/191 192/211/192 193/212/193 194/213/194 +f 192/211/192 195/214/195 196/215/196 193/212/193 +f 195/214/195 197/216/197 198/217/198 196/215/196 +f 199/218/199 200/219/200 198/217/198 197/216/197 +f 193/212/193 196/215/196 201/220/201 202/221/202 +f 196/215/196 198/217/198 203/222/203 201/220/201 +f 203/222/203 200/219/200 204/223/204 +f 202/221/202 201/220/201 205/224/205 206/225/206 +f 201/220/201 203/222/203 204/223/204 205/224/205 +f 207/226/207 208/227/208 204/223/204 200/219/200 +f 206/225/206 205/224/205 209/228/209 210/229/210 +f 205/224/205 204/223/204 208/227/208 209/228/209 +f 193/212/193 202/221/202 194/213/194 +f 206/225/206 210/229/210 211/230/211 194/213/194 +f 203/222/203 198/217/198 200/219/200 +f 202/221/202 206/225/206 194/213/194 +f 212/210/212 213/211/213 214/212/214 215/213/215 +f 213/211/213 216/214/216 217/215/217 214/212/214 +f 216/214/216 218/216/218 219/217/219 217/215/217 +f 220/218/220 221/219/221 219/217/219 218/216/218 +f 214/212/214 217/215/217 222/220/222 223/221/223 +f 217/215/217 219/217/219 224/222/224 222/220/222 +f 224/222/224 221/219/221 225/223/225 +f 223/221/223 222/220/222 226/224/226 227/225/227 +f 222/220/222 224/222/224 225/223/225 226/224/226 +f 228/226/228 229/227/229 225/223/225 221/219/221 +f 227/225/227 226/224/226 230/228/230 231/229/231 +f 226/224/226 225/223/225 229/227/229 230/228/230 +f 214/212/214 223/221/223 215/213/215 +f 227/225/227 231/229/231 232/230/232 215/213/215 +f 224/222/224 219/217/219 221/219/221 +f 223/221/223 227/225/227 215/213/215 +f 233/210/233 234/211/234 235/212/235 236/213/236 +f 234/211/234 237/214/237 238/215/238 235/212/235 +f 237/214/237 239/216/239 240/217/240 238/215/238 +f 241/218/241 242/219/242 240/217/240 239/216/239 +f 235/212/235 238/215/238 243/220/243 244/221/244 +f 238/215/238 240/217/240 245/222/245 243/220/243 +f 245/222/245 242/219/242 246/223/246 +f 244/221/244 243/220/243 247/224/247 248/225/248 +f 243/220/243 245/222/245 246/223/246 247/224/247 +f 249/226/249 250/227/250 246/223/246 242/219/242 +f 248/225/248 247/224/247 251/228/251 252/229/252 +f 247/224/247 246/223/246 250/227/250 251/228/251 +f 235/212/235 244/221/244 236/213/236 +f 248/225/248 252/229/252 253/230/253 236/213/236 +f 245/222/245 240/217/240 242/219/242 +f 244/221/244 248/225/248 236/213/236 +f 254/210/254 255/211/255 256/212/256 257/213/257 +f 255/211/255 258/214/258 259/215/259 256/212/256 +f 258/214/258 260/216/260 261/217/261 259/215/259 +f 262/218/262 263/219/263 261/217/261 260/216/260 +f 256/212/256 259/215/259 264/220/264 265/221/265 +f 259/215/259 261/217/261 266/222/266 264/220/264 +f 266/222/266 263/219/263 267/223/267 +f 265/221/265 264/220/264 268/224/268 269/225/269 +f 264/220/264 266/222/266 267/223/267 268/224/268 +f 270/226/270 271/227/271 267/223/267 263/219/263 +f 269/225/269 268/224/268 272/228/272 273/229/273 +f 268/224/268 267/223/267 271/227/271 272/228/272 +f 256/212/256 265/221/265 257/213/257 +f 269/225/269 273/229/273 274/230/274 257/213/257 +f 266/222/266 261/217/261 263/219/263 +f 265/221/265 269/225/269 257/213/257 +f 275/210/275 276/211/276 277/212/277 278/213/278 +f 276/211/276 279/214/279 280/215/280 277/212/277 +f 279/214/279 281/216/281 282/217/282 280/215/280 +f 283/218/283 284/219/284 282/217/282 281/216/281 +f 277/212/277 280/215/280 285/220/285 286/221/286 +f 280/215/280 282/217/282 287/222/287 285/220/285 +f 287/222/287 284/219/284 288/223/288 +f 286/221/286 285/220/285 289/224/289 290/225/290 +f 285/220/285 287/222/287 288/223/288 289/224/289 +f 291/226/291 292/227/292 288/223/288 284/219/284 +f 290/225/290 289/224/289 293/228/293 294/229/294 +f 289/224/289 288/223/288 292/227/292 293/228/293 +f 277/212/277 286/221/286 278/213/278 +f 290/225/290 294/229/294 295/230/295 278/213/278 +f 287/222/287 282/217/282 284/219/284 +f 286/221/286 290/225/290 278/213/278 +f 296/210/296 297/211/297 298/212/298 299/213/299 +f 297/211/297 300/214/300 301/215/301 298/212/298 +f 300/214/300 302/216/302 303/217/303 301/215/301 +f 304/218/304 305/219/305 303/217/303 302/216/302 +f 298/212/298 301/215/301 306/220/306 307/221/307 +f 301/215/301 303/217/303 308/222/308 306/220/306 +f 308/222/308 305/219/305 309/223/309 +f 307/221/307 306/220/306 310/224/310 311/225/311 +f 306/220/306 308/222/308 309/223/309 310/224/310 +f 312/226/312 313/227/313 309/223/309 305/219/305 +f 311/225/311 310/224/310 314/228/314 315/229/315 +f 310/224/310 309/223/309 313/227/313 314/228/314 +f 298/212/298 307/221/307 299/213/299 +f 311/225/311 315/229/315 316/230/316 299/213/299 +f 308/222/308 303/217/303 305/219/305 +f 307/221/307 311/225/311 299/213/299 +f 317/210/317 318/211/318 319/212/319 320/213/320 +f 318/211/318 321/214/321 322/215/322 319/212/319 +f 321/214/321 323/216/323 324/217/324 322/215/322 +f 325/218/325 326/219/326 324/217/324 323/216/323 +f 319/212/319 322/215/322 327/220/327 328/221/328 +f 322/215/322 324/217/324 329/222/329 327/220/327 +f 329/222/329 326/219/326 330/223/330 +f 328/221/328 327/220/327 331/224/331 332/225/332 +f 327/220/327 329/222/329 330/223/330 331/224/331 +f 333/226/333 334/227/334 330/223/330 326/219/326 +f 332/225/332 331/224/331 335/228/335 336/229/336 +f 331/224/331 330/223/330 334/227/334 335/228/335 +f 319/212/319 328/221/328 320/213/320 +f 332/225/332 336/229/336 337/230/337 320/213/320 +f 329/222/329 324/217/324 326/219/326 +f 328/221/328 332/225/332 320/213/320 +f 338/210/338 339/211/339 340/212/340 341/213/341 +f 339/211/339 342/214/342 343/215/343 340/212/340 +f 342/214/342 344/216/344 345/217/345 343/215/343 +f 346/218/346 347/219/347 345/217/345 344/216/344 +f 340/212/340 343/215/343 348/220/348 349/221/349 +f 343/215/343 345/217/345 350/222/350 348/220/348 +f 350/222/350 347/219/347 351/223/351 +f 349/221/349 348/220/348 352/224/352 353/225/353 +f 348/220/348 350/222/350 351/223/351 352/224/352 +f 354/226/354 355/227/355 351/223/351 347/219/347 +f 353/225/353 352/224/352 356/228/356 357/229/357 +f 352/224/352 351/223/351 355/227/355 356/228/356 +f 340/212/340 349/221/349 341/213/341 +f 353/225/353 357/229/357 358/230/358 341/213/341 +f 350/222/350 345/217/345 347/219/347 +f 349/221/349 353/225/353 341/213/341 +f 359/210/359 360/211/360 361/212/361 362/213/362 +f 360/211/360 363/214/363 364/215/364 361/212/361 +f 363/214/363 365/216/365 366/217/366 364/215/364 +f 367/218/367 368/219/368 366/217/366 365/216/365 +f 361/212/361 364/215/364 369/220/369 370/221/370 +f 364/215/364 366/217/366 371/222/371 369/220/369 +f 371/222/371 368/219/368 372/223/372 +f 370/221/370 369/220/369 373/224/373 374/225/374 +f 369/220/369 371/222/371 372/223/372 373/224/373 +f 375/226/375 376/227/376 372/223/372 368/219/368 +f 374/225/374 373/224/373 377/228/377 378/229/378 +f 373/224/373 372/223/372 376/227/376 377/228/377 +f 361/212/361 370/221/370 362/213/362 +f 374/225/374 378/229/378 379/230/379 362/213/362 +f 371/222/371 366/217/366 368/219/368 +f 370/221/370 374/225/374 362/213/362 +f 380/210/380 381/211/381 382/212/382 383/213/383 +f 381/211/381 384/214/384 385/215/385 382/212/382 +f 384/214/384 386/216/386 387/217/387 385/215/385 +f 388/218/388 389/219/389 387/217/387 386/216/386 +f 382/212/382 385/215/385 390/220/390 391/221/391 +f 385/215/385 387/217/387 392/222/392 390/220/390 +f 392/222/392 389/219/389 393/223/393 +f 391/221/391 390/220/390 394/224/394 395/225/395 +f 390/220/390 392/222/392 393/223/393 394/224/394 +f 396/226/396 397/227/397 393/223/393 389/219/389 +f 395/225/395 394/224/394 398/228/398 399/229/399 +f 394/224/394 393/223/393 397/227/397 398/228/398 +f 382/212/382 391/221/391 383/213/383 +f 395/225/395 399/229/399 400/230/400 383/213/383 +f 392/222/392 387/217/387 389/219/389 +f 391/221/391 395/225/395 383/213/383 +f 401/210/401 402/211/402 403/212/403 404/213/404 +f 402/211/402 405/214/405 406/215/406 403/212/403 +f 405/214/405 407/216/407 408/217/408 406/215/406 +f 409/218/409 410/219/410 408/217/408 407/216/407 +f 403/212/403 406/215/406 411/220/411 412/221/412 +f 406/215/406 408/217/408 413/222/413 411/220/411 +f 413/222/413 410/219/410 414/223/414 +f 412/221/412 411/220/411 415/224/415 416/225/416 +f 411/220/411 413/222/413 414/223/414 415/224/415 +f 417/226/417 418/227/418 414/223/414 410/219/410 +f 416/225/416 415/224/415 419/228/419 420/229/420 +f 415/224/415 414/223/414 418/227/418 419/228/419 +f 403/212/403 412/221/412 404/213/404 +f 416/225/416 420/229/420 421/230/421 404/213/404 +f 413/222/413 408/217/408 410/219/410 +f 412/221/412 416/225/416 404/213/404 +f 422/210/422 423/211/423 424/212/424 425/213/425 +f 423/211/423 426/214/426 427/215/427 424/212/424 +f 426/214/426 428/216/428 429/217/429 427/215/427 +f 430/218/430 431/219/431 429/217/429 428/216/428 +f 424/212/424 427/215/427 432/220/432 433/221/433 +f 427/215/427 429/217/429 434/222/434 432/220/432 +f 434/222/434 431/219/431 435/223/435 +f 433/221/433 432/220/432 436/224/436 437/225/437 +f 432/220/432 434/222/434 435/223/435 436/224/436 +f 438/226/438 439/227/439 435/223/435 431/219/431 +f 437/225/437 436/224/436 440/228/440 441/229/441 +f 436/224/436 435/223/435 439/227/439 440/228/440 +f 424/212/424 433/221/433 425/213/425 +f 437/225/437 441/229/441 442/230/442 425/213/425 +f 434/222/434 429/217/429 431/219/431 +f 433/221/433 437/225/437 425/213/425 +f 443/210/443 444/211/444 445/212/445 446/213/446 +f 444/211/444 447/214/447 448/215/448 445/212/445 +f 447/214/447 449/216/449 450/217/450 448/215/448 +f 451/218/451 452/219/452 450/217/450 449/216/449 +f 445/212/445 448/215/448 453/220/453 454/221/454 +f 448/215/448 450/217/450 455/222/455 453/220/453 +f 455/222/455 452/219/452 456/223/456 +f 454/221/454 453/220/453 457/224/457 458/225/458 +f 453/220/453 455/222/455 456/223/456 457/224/457 +f 459/226/459 460/227/460 456/223/456 452/219/452 +f 458/225/458 457/224/457 461/228/461 462/229/462 +f 457/224/457 456/223/456 460/227/460 461/228/461 +f 445/212/445 454/221/454 446/213/446 +f 458/225/458 462/229/462 463/230/463 446/213/446 +f 455/222/455 450/217/450 452/219/452 +f 454/221/454 458/225/458 446/213/446 +f 464/210/464 465/211/465 466/212/466 467/213/467 +f 465/211/465 468/214/468 469/215/469 466/212/466 +f 468/214/468 470/216/470 471/217/471 469/215/469 +f 472/218/472 473/219/473 471/217/471 470/216/470 +f 466/212/466 469/215/469 474/220/474 475/221/475 +f 469/215/469 471/217/471 476/222/476 474/220/474 +f 476/222/476 473/219/473 477/223/477 +f 475/221/475 474/220/474 478/224/478 479/225/479 +f 474/220/474 476/222/476 477/223/477 478/224/478 +f 480/226/480 481/227/481 477/223/477 473/219/473 +f 479/225/479 478/224/478 482/228/482 483/229/483 +f 478/224/478 477/223/477 481/227/481 482/228/482 +f 466/212/466 475/221/475 467/213/467 +f 479/225/479 483/229/483 484/230/484 467/213/467 +f 476/222/476 471/217/471 473/219/473 +f 475/221/475 479/225/479 467/213/467 +f 485/210/485 486/211/486 487/212/487 488/213/488 +f 486/211/486 489/214/489 490/215/490 487/212/487 +f 489/214/489 491/216/491 492/217/492 490/215/490 +f 493/218/493 494/219/494 492/217/492 491/216/491 +f 487/212/487 490/215/490 495/220/495 496/221/496 +f 490/215/490 492/217/492 497/222/497 495/220/495 +f 497/222/497 494/219/494 498/223/498 +f 496/221/496 495/220/495 499/224/499 500/225/500 +f 495/220/495 497/222/497 498/223/498 499/224/499 +f 501/226/501 502/227/502 498/223/498 494/219/494 +f 500/225/500 499/224/499 503/228/503 504/229/504 +f 499/224/499 498/223/498 502/227/502 503/228/503 +f 487/212/487 496/221/496 488/213/488 +f 500/225/500 504/229/504 505/230/505 488/213/488 +f 497/222/497 492/217/492 494/219/494 +f 496/221/496 500/225/500 488/213/488 +f 506/210/506 507/211/507 508/212/508 509/213/509 +f 507/211/507 510/214/510 511/215/511 508/212/508 +f 510/214/510 512/216/512 513/217/513 511/215/511 +f 514/218/514 515/219/515 513/217/513 512/216/512 +f 508/212/508 511/215/511 516/220/516 517/221/517 +f 511/215/511 513/217/513 518/222/518 516/220/516 +f 518/222/518 515/219/515 519/223/519 +f 517/221/517 516/220/516 520/224/520 521/225/521 +f 516/220/516 518/222/518 519/223/519 520/224/520 +f 522/226/522 523/227/523 519/223/519 515/219/515 +f 521/225/521 520/224/520 524/228/524 525/229/525 +f 520/224/520 519/223/519 523/227/523 524/228/524 +f 508/212/508 517/221/517 509/213/509 +f 521/225/521 525/229/525 526/230/526 509/213/509 +f 518/222/518 513/217/513 515/219/515 +f 517/221/517 521/225/521 509/213/509 +f 527/210/527 528/211/528 529/212/529 530/213/530 +f 528/211/528 531/214/531 532/215/532 529/212/529 +f 531/214/531 533/216/533 534/217/534 532/215/532 +f 535/218/535 536/219/536 534/217/534 533/216/533 +f 529/212/529 532/215/532 537/220/537 538/221/538 +f 532/215/532 534/217/534 539/222/539 537/220/537 +f 539/222/539 536/219/536 540/223/540 +f 538/221/538 537/220/537 541/224/541 542/225/542 +f 537/220/537 539/222/539 540/223/540 541/224/541 +f 543/226/543 544/227/544 540/223/540 536/219/536 +f 542/225/542 541/224/541 545/228/545 546/229/546 +f 541/224/541 540/223/540 544/227/544 545/228/545 +f 529/212/529 538/221/538 530/213/530 +f 542/225/542 546/229/546 547/230/547 530/213/530 +f 539/222/539 534/217/534 536/219/536 +f 538/221/538 542/225/542 530/213/530 +f 548/231/548 549/232/549 550/233/549 551/234/548 +f 552/235/550 553/236/550 550/233/549 549/232/549 +f 554/231/551 555/232/552 556/233/552 557/234/551 +f 558/235/553 559/236/553 556/233/552 555/232/552 +f 560/231/554 561/232/555 562/233/555 563/234/554 +f 564/235/556 565/236/556 562/233/555 561/232/555 +f 566/231/557 567/232/558 568/233/558 569/234/557 +f 570/235/559 571/236/559 568/233/558 567/232/558 +f 572/231/560 573/232/561 574/233/561 575/234/560 +f 576/235/562 577/236/562 574/233/561 573/232/561 +f 578/231/563 579/232/564 580/233/564 581/234/563 +f 582/235/565 583/236/565 580/233/564 579/232/564 +f 584/231/566 585/232/567 586/233/567 587/234/566 +f 588/235/568 589/236/568 586/233/567 585/232/567 +f 590/231/569 591/232/570 592/233/570 593/234/569 +f 594/235/571 595/236/571 592/233/570 591/232/570 +f 596/231/572 597/232/573 598/233/573 599/234/572 +f 600/235/574 601/236/574 598/233/573 597/232/573 +f 602/231/575 603/232/576 604/233/576 605/234/575 +f 606/235/577 607/236/577 604/233/576 603/232/576 +f 608/231/578 609/232/579 610/233/579 611/234/578 +f 612/235/580 613/236/580 610/233/579 609/232/579 +f 614/231/581 615/232/582 616/233/582 617/234/581 +f 618/235/583 619/236/583 616/233/582 615/232/582 +f 620/210/584 621/211/585 622/212/586 623/213/587 +f 621/211/585 624/214/588 625/215/589 622/212/586 +f 624/214/588 626/216/590 627/217/591 625/215/589 +f 628/218/592 629/219/593 627/217/591 626/216/590 +f 622/212/586 625/215/589 630/220/594 631/221/595 +f 625/215/589 627/217/591 632/222/596 630/220/594 +f 632/222/596 629/219/593 633/223/597 +f 631/221/595 630/220/594 634/224/598 635/225/599 +f 630/220/594 632/222/596 633/223/597 634/224/598 +f 636/226/600 637/227/601 633/223/597 629/219/593 +f 635/225/599 634/224/598 638/228/602 639/229/603 +f 634/224/598 633/223/597 637/227/601 638/228/602 +f 622/212/586 631/221/595 623/213/587 +f 635/225/599 639/229/603 640/230/604 623/213/587 +f 632/222/596 627/217/591 629/219/593 +f 631/221/595 635/225/599 623/213/587 +f 641/210/605 642/211/606 643/212/607 644/213/608 +f 642/211/606 645/214/609 646/215/610 643/212/607 +f 645/214/609 647/216/611 648/217/612 646/215/610 +f 649/218/613 650/219/614 648/217/612 647/216/611 +f 643/212/607 646/215/610 651/220/615 652/221/616 +f 646/215/610 648/217/612 653/222/617 651/220/615 +f 653/222/617 650/219/614 654/223/618 +f 652/221/616 651/220/615 655/224/619 656/225/620 +f 651/220/615 653/222/617 654/223/618 655/224/619 +f 657/226/621 658/227/622 654/223/618 650/219/614 +f 656/225/620 655/224/619 659/228/623 660/229/624 +f 655/224/619 654/223/618 658/227/622 659/228/623 +f 643/212/607 652/221/616 644/213/608 +f 656/225/620 660/229/624 661/230/625 644/213/608 +f 653/222/617 648/217/612 650/219/614 +f 652/221/616 656/225/620 644/213/608 +f 662/210/626 663/211/627 664/212/628 665/213/629 +f 663/211/627 666/214/630 667/215/631 664/212/628 +f 666/214/630 668/216/632 669/217/633 667/215/631 +f 670/218/634 671/219/635 669/217/633 668/216/632 +f 664/212/628 667/215/631 672/220/636 673/221/637 +f 667/215/631 669/217/633 674/222/638 672/220/636 +f 674/222/638 671/219/635 675/223/639 +f 673/221/637 672/220/636 676/224/640 677/225/641 +f 672/220/636 674/222/638 675/223/639 676/224/640 +f 678/226/642 679/227/643 675/223/639 671/219/635 +f 677/225/641 676/224/640 680/228/644 681/229/645 +f 676/224/640 675/223/639 679/227/643 680/228/644 +f 664/212/628 673/221/637 665/213/629 +f 677/225/641 681/229/645 682/230/646 665/213/629 +f 674/222/638 669/217/633 671/219/635 +f 673/221/637 677/225/641 665/213/629 +f 683/210/647 684/211/648 685/212/649 686/213/650 +f 684/211/648 687/214/651 688/215/652 685/212/649 +f 687/214/651 689/216/653 690/217/654 688/215/652 +f 691/218/655 692/219/656 690/217/654 689/216/653 +f 685/212/649 688/215/652 693/220/657 694/221/658 +f 688/215/652 690/217/654 695/222/659 693/220/657 +f 695/222/659 692/219/656 696/223/660 +f 694/221/658 693/220/657 697/224/661 698/225/662 +f 693/220/657 695/222/659 696/223/660 697/224/661 +f 699/226/663 700/227/664 696/223/660 692/219/656 +f 698/225/662 697/224/661 701/228/665 702/229/666 +f 697/224/661 696/223/660 700/227/664 701/228/665 +f 685/212/649 694/221/658 686/213/650 +f 698/225/662 702/229/666 703/230/667 686/213/650 +f 695/222/659 690/217/654 692/219/656 +f 694/221/658 698/225/662 686/213/650 +f 704/210/668 705/211/669 706/212/670 707/213/671 +f 705/211/669 708/214/672 709/215/673 706/212/670 +f 708/214/672 710/216/674 711/217/675 709/215/673 +f 712/218/676 713/219/677 711/217/675 710/216/674 +f 706/212/670 709/215/673 714/220/678 715/221/679 +f 709/215/673 711/217/675 716/222/680 714/220/678 +f 716/222/680 713/219/677 717/223/681 +f 715/221/679 714/220/678 718/224/682 719/225/683 +f 714/220/678 716/222/680 717/223/681 718/224/682 +f 720/226/684 721/227/685 717/223/681 713/219/677 +f 719/225/683 718/224/682 722/228/686 723/229/687 +f 718/224/682 717/223/681 721/227/685 722/228/686 +f 706/212/670 715/221/679 707/213/671 +f 719/225/683 723/229/687 724/230/688 707/213/671 +f 716/222/680 711/217/675 713/219/677 +f 715/221/679 719/225/683 707/213/671 +# 472 polygons - 88 triangles + diff --git a/public/models/palm/readme.txt b/public/models/palm/readme.txt new file mode 100644 index 0000000..63bb2e6 --- /dev/null +++ b/public/models/palm/readme.txt @@ -0,0 +1,6 @@ +Provided by Nobiax. + +Absolutely free to use or to modify in any kind of work (personal, commercial or else). + +Give me a link of the result at nobiax.deviantart.com or my other account on OpenGameArt.com or ShareCG.com +( watch my journal on deviantart ) ;) diff --git a/public/models/props/concrete_road_barrier_02.glb b/public/models/props/concrete_road_barrier_02.glb new file mode 100644 index 0000000..43175bf Binary files /dev/null and b/public/models/props/concrete_road_barrier_02.glb differ diff --git a/public/models/props/fire_hydrant.glb b/public/models/props/fire_hydrant.glb new file mode 100644 index 0000000..070137a Binary files /dev/null and b/public/models/props/fire_hydrant.glb differ diff --git a/public/models/props/metal_trash_can.glb b/public/models/props/metal_trash_can.glb new file mode 100644 index 0000000..7c67617 Binary files /dev/null and b/public/models/props/metal_trash_can.glb differ diff --git a/public/models/props/painted_wooden_bench.glb b/public/models/props/painted_wooden_bench.glb new file mode 100644 index 0000000..780d17c Binary files /dev/null and b/public/models/props/painted_wooden_bench.glb differ diff --git a/public/models/props/street_lamp_02.glb b/public/models/props/street_lamp_02.glb new file mode 100644 index 0000000..1eec6dd Binary files /dev/null and b/public/models/props/street_lamp_02.glb differ diff --git a/src/main.js b/src/main.js index f6f07b8..361b2cf 100644 --- a/src/main.js +++ b/src/main.js @@ -6,6 +6,7 @@ import { Sky } from "three/examples/jsm/objects/Sky.js"; import { playerController } from "three-player-controller"; import { ChunkStreamer } from "./world/streaming.js"; import { createMaterials } from "./world/materials.js"; +import { PropLayer } from "./world/props.js"; const container = document.querySelector("#container"); const scene = new Scene(); @@ -69,6 +70,10 @@ scene.add(seafloor); seafloor.updateMatrixWorld(true); player.addCollider({ motion: "static", shape: { kind: "mesh", source: seafloor } }); +// Requisiten (Palmen, Laternen) — ein Ladevorgang für alle Chunks, siehe Task 10. +const props = new PropLayer(); +await props.load(); + // Schattenkamera folgt dem Spieler, statt eine feste Box zu benutzen. function updateShadow(target) { sun.position.set(target.x + 120, 240, target.z + 80); @@ -89,7 +94,7 @@ function updateShadow(target) { // Zeitschranke, die danach die Kollision ohne vorhandenen Boden einschaltet, würde in eine // endlose Fall-Auffang-Schleife laufen, sobald der Chunk dauerhaft ausbleibt. Nach 15s gibt // es nur noch eine einmalige Warnung, kein Verhaltenswechsel. -const streamer = new ChunkStreamer({ scene, player, materials }); +const streamer = new ChunkStreamer({ scene, player, materials, props }); player.setSkipCapsuleCollision(true); let settled = false; let warnedSlowSpawn = false; diff --git a/src/world/props.js b/src/world/props.js new file mode 100644 index 0000000..8f0a13b --- /dev/null +++ b/src/world/props.js @@ -0,0 +1,171 @@ +import { CylinderGeometry, Group, InstancedMesh, Matrix4, Mesh, MeshStandardMaterial, + Object3D, RepeatWrapping, SRGBColorSpace, TextureLoader } from "three"; +import { GLTFLoader } from "three/examples/jsm/loaders/GLTFLoader.js"; +import { MeshoptDecoder } from "three/examples/jsm/libs/meshopt_decoder.module.js"; +import { OBJLoader } from "three/examples/jsm/loaders/OBJLoader.js"; + +const PALM_MODEL_HEIGHT = 439.74; // Einheiten im OBJ, gemessen +const TRUNK_RADIUS = 0.22; + +/** Kleiner, wiederholbarer Zufall aus einem Schlüssel. */ +function hashUnit(seed, key) { + let h = 2166136261 ^ seed; + for (const ch of key) { h = Math.imul(h ^ ch.charCodeAt(0), 16777619); } + return ((h >>> 0) % 100000) / 100000; +} + +export function lampPoints(lines, spacing = 35) { + const out = []; + for (const line of lines) { + let total = 0; + for (let i = 0; i < line.length - 1; i++) { + total += Math.hypot(line[i + 1][0] - line[i][0], line[i + 1][1] - line[i][1]); + } + // Erste Laterne bei halber Teilung: die Mittellinien sind an Kreuzungen getrennt, + // ein Start bei 0 setzt je einmündendem Ast eine Laterne in denselben Punkt — + // an einer Kreuzung mit vier Ästen also vier, mitten auf der Fahrbahn. + let travelled = 0, next = Math.min(spacing / 2, total / 2); + for (let i = 0; i < line.length - 1; i++) { + const [x0, z0] = line[i], [x1, z1] = line[i + 1]; + const len = Math.hypot(x1 - x0, z1 - z0); + while (next <= travelled + len) { + const t = (next - travelled) / (len || 1); + out.push({ x: x0 + (x1 - x0) * t, z: z0 + (z1 - z0) * t, angle: Math.atan2(z1 - z0, x1 - x0) }); + next += spacing; + } + travelled += len; + } + } + return out; +} + +export function palmTransforms(points, seed = 1) { + return points.map(([x, z]) => { + const key = `${x.toFixed(1)},${z.toFixed(1)}`; + return { + x, z, + height: 10 + hashUnit(seed, key) * 8, + rotation: hashUnit(seed, `${key}:r`) * Math.PI * 2, + }; + }); +} + +export class PropLayer { + async load() { + const texLoader = new TextureLoader(); + const [obj, diffuse, normal] = await Promise.all([ + new OBJLoader().loadAsync("./models/palm/palm_tree.obj"), + texLoader.loadAsync("./models/palm/diffuse.png"), + texLoader.loadAsync("./models/palm/normal.png"), + ]); + diffuse.colorSpace = SRGBColorSpace; + for (const t of [diffuse, normal]) t.wrapS = t.wrapT = RepeatWrapping; + this.palmGeometry = null; + obj.traverse((o) => { if (o.isMesh && !this.palmGeometry) this.palmGeometry = o.geometry; }); + this.palmMaterial = new MeshStandardMaterial({ + map: diffuse, normalMap: normal, alphaTest: 0.5, side: 2, roughness: 0.9, + }); + + const gltfLoader = new GLTFLoader(); + // props.mjs komprimiert die .glb mit --compress meshopt (EXT_meshopt_compression); + // ohne registrierten Decoder wirft GLTFLoader beim Laden ("setMeshoptDecoder must be + // called before loading compressed files") — am echten Modell aufgefallen, im + // Referenzcode fehlte das. + gltfLoader.setMeshoptDecoder(MeshoptDecoder); + this.lamp = (await gltfLoader.loadAsync("./models/props/street_lamp_02.glb")).scene; + // Anders als die einteilige Palme hat street_lamp_02.glb zwei Materialien — Metallmast + // und durchsichtiges Laternenglas (glTF-Mesh "street_lamp_02_stem_mesh", primitives: + // [material 1, material 0], per gltf-transform inspect nachgeprüft) — GLTFLoader baut + // daraus zwei separate Meshes unter derselben Modellwurzel. Alle werden gesammelt, je + // mit ihrer lokalen Transformation gegenüber der Wurzel, sonst fehlte an jeder Laterne + // ein Teil (Glas oder Mast, je nach Traversierreihenfolge). + this.lamp.updateMatrixWorld(true); + this.lampParts = []; + this.lamp.traverse((o) => { + if (o.isMesh) this.lampParts.push({ geometry: o.geometry, material: o.material, matrix: o.matrixWorld.clone() }); + }); + + this.trunkGeometry = new CylinderGeometry(TRUNK_RADIUS, TRUNK_RADIUS * 1.2, 6, 6); + } + + /** + * Sichtbare Instanzen (Palmen, Laternen) plus einfache Stammzylinder für den + * Chunk-Collider. Palmen siehe unten, Laternen in #buildLamps. + */ + build(chunk) { + const visual = new Group(); + const colliders = []; + const palms = palmTransforms(chunk.palms ?? [], 20260912); + if (palms.length) { + const mesh = new InstancedMesh(this.palmGeometry, this.palmMaterial, palms.length); + mesh.castShadow = true; + const dummy = new Object3D(); + palms.forEach((p, i) => { + const s = p.height / PALM_MODEL_HEIGHT; + dummy.position.set(p.x, 0, p.z); + dummy.rotation.set(0, p.rotation, 0); + dummy.scale.setScalar(s); + dummy.updateMatrix(); + mesh.setMatrixAt(i, dummy.matrix); + // visible = false: reiner Kollisionskörper. Ohne Material rendert new Mesh() + // sonst als weißer Standardzylinder mitten im Palmenstamm (am echten Modell + // gesehen) — colliderBuild.ts (three-player-controller) prüft beim Einsammeln + // der BVH-Geometrie nur isMesh/geometry/name/excludeFromCollider, nicht + // .visible, die Kollision bleibt also unverändert bestehen. + const trunk = new Mesh(this.trunkGeometry); + trunk.visible = false; + trunk.position.set(p.x, 3, p.z); + colliders.push(trunk); + }); + mesh.instanceMatrix.needsUpdate = true; + mesh.userData.excludeFromCollider = true; + visual.add(mesh); + } + this.#buildLamps(chunk, visual); + return { visual, colliders }; + } + + /** + * Laternen entlang der Mittellinien (lampPoints, oben). + * + * Ohne diese Methode wäre lampPoints() eine getestete, aber nirgends aufgerufene Funktion, + * und this.lamp ein geladenes, nie benutztes Modell — im gesamten Umsetzungsplan ruft keine + * andere Aufgabe lampPoints() auf. Die Verdrahtung hier verwendet ausschließlich bereits + * spezifizierte, getestete Bausteine (lampPoints exakt wie oben, this.lamp aus load()). + * + * Platzierung exakt auf der Mittellinie, ohne seitlichen Versatz zur Fahrbahnkante: anders + * als bei den Palmen (Python-seitige Suche vom Fahrbahnrand nach außen gegen Straßen- und + * Gebäudepolygone, Ruling 22) kennen die Chunk-Daten keine separate Gehwegspur — nur + * Fahrbahn-, Sand-, Park- und Stadtfläche — und lampPoints(lines, spacing) bekommt bewusst + * keine Straßen- oder Gebäudepolygone übergeben. Ein erfundener fester Versatz ließe sich + * an keiner echten Geometrie prüfen und wäre nach Ruling 22 vermutlich ebenso falsch wie der + * ursprüngliche 4-m-Versatz der Palmen (60 % auf der Fahrbahn). Ruling 18 nimmt "mitten auf + * der Fahrbahn" für Laternen bereits ausdrücklich hin ("an einer Kreuzung ... stehen vier + * Laternen im selben Punkt, mitten auf der Fahrbahn") und behebt dort nur das Stapeln an + * Kreuzungen — genau dafür ist lampPoints() da. Das Modell ist bei 1,7 m laut Poly-Haven- + * Angabe bereits maßstäblich, anders als die Palme also keine Zufallsskalierung. + */ + #buildLamps(chunk, visual) { + const points = lampPoints(chunk.centerlines ?? []); + if (!points.length || !this.lampParts?.length) return; + const dummy = new Object3D(); + const local = new Matrix4(); + // Ein InstancedMesh je Teil (Mast, Glas, ...), nicht je Laterne — dieselbe + // Platzierungsmatrix wird für jedes Teil mit dessen eigener lokaler Transformation + // verkettet, damit ein mehrteiliges Modell an jedem Punkt vollständig zusammenbleibt. + for (const part of this.lampParts) { + const mesh = new InstancedMesh(part.geometry, part.material, points.length); + mesh.castShadow = true; + mesh.userData.excludeFromCollider = true; + points.forEach((p, i) => { + dummy.position.set(p.x, 0, p.z); + dummy.rotation.set(0, p.angle, 0); + dummy.updateMatrix(); + local.multiplyMatrices(dummy.matrix, part.matrix); + mesh.setMatrixAt(i, local); + }); + mesh.instanceMatrix.needsUpdate = true; + visual.add(mesh); + } + } +} diff --git a/src/world/streaming.js b/src/world/streaming.js index 38d4b71..7b248c7 100644 --- a/src/world/streaming.js +++ b/src/world/streaming.js @@ -69,6 +69,15 @@ export class ChunkStreamer { // Straßen und Bodenflächen sind reine Auflagen; Kollision trägt die Landplatte. (DECALS.has(name) ? group : collide).add(mesh); } + // this.props ist seit Task 8 ein optionales Konstruktorfeld (siehe dortiger + // Kommentar); die bestehenden Streaming-Tests bauen einen ChunkStreamer ohne + // props auf und dürfen dabei nicht auf einmal an einem unbedingten Aufruf + // scheitern — daher die Wache, statt props stillschweigend zur Pflicht zu machen. + if (this.props) { + const props = this.props.build(chunk); + group.add(props.visual); + for (const trunk of props.colliders) collide.add(trunk); // wandern in dieselbe BVH + } group.add(collide); this.scene.add(group); group.updateMatrixWorld(true); diff --git a/tests/props.test.js b/tests/props.test.js new file mode 100644 index 0000000..5c31d1c --- /dev/null +++ b/tests/props.test.js @@ -0,0 +1,34 @@ +import { describe, expect, it } from "vitest"; +import { lampPoints, palmTransforms } from "../src/world/props.js"; + +describe("props", () => { + it("setzt Laternen im gewünschten Abstand entlang der Linie", () => { + const pts = lampPoints([[[0, 0], [100, 0]]], 35); + expect(pts.length).toBe(3); // 17,5 / 52,5 / 87,5 Meter + expect(pts[0].x).toBeCloseTo(17.5); // nicht auf der Kreuzung + expect(pts[1].x).toBeCloseTo(52.5); + }); + + it("setzt auf einer kurzen Linie eine Laterne in die Mitte", () => { + const pts = lampPoints([[[0, 0], [10, 0]]], 35); + expect(pts).toHaveLength(1); + expect(pts[0].x).toBeCloseTo(5); + }); + + it("stapelt an einer Kreuzung keine Laternen", () => { + // Zwei gegenüberliegende Äste, wie centerlines() sie seit Task 4 liefert. + const pts = lampPoints([[[0, 0], [60, 0]], [[0, 0], [-60, 0]]], 35); + const keys = new Set(pts.map((p) => `${p.x.toFixed(2)},${p.z.toFixed(2)}`)); + expect(keys.size).toBe(pts.length); + }); + + it("skaliert Palmen reproduzierbar zwischen 10 und 18 Metern", () => { + const a = palmTransforms([[5, 5], [9, 9]], 7); + const b = palmTransforms([[5, 5], [9, 9]], 7); + expect(a).toEqual(b); + for (const t of a) { + expect(t.height).toBeGreaterThanOrEqual(10); + expect(t.height).toBeLessThanOrEqual(18); + } + }); +}); diff --git a/tools/assets/palm.sh b/tools/assets/palm.sh new file mode 100644 index 0000000..1fea63d --- /dev/null +++ b/tools/assets/palm.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash +# Nobiax-Palme (CC0) holen und die TGA-Texturen nach PNG wandeln. +set -e +mkdir -p public/models/palm && cd public/models/palm +curl -sL -o palm.7z "https://opengameart.org/sites/default/files/palm_tree_v2.7z" +tar -xf palm.7z +sips -s format png diffus.tga --out diffuse.png > /dev/null +sips -s format png normal.tga --out normal.png > /dev/null +rm -f palm.7z diffus.tga normal.tga specular.tga palm_tree.FBX preview.jpg +echo "Palme bereit: $(ls)" diff --git a/tools/assets/props.mjs b/tools/assets/props.mjs new file mode 100644 index 0000000..0a1f439 --- /dev/null +++ b/tools/assets/props.mjs @@ -0,0 +1,41 @@ +// Lädt die fünf Poly-Haven-Requisiten in 1k (gltf + zugehörige Texturen/`.bin`) nach +// public/models/props/raw/ und vereinfacht sie danach mit @gltf-transform/cli zu je einer +// kompakten .glb unter public/models/props/. Gleiches Muster wie textures.mjs, aber Modelle +// stehen unter dem Schlüssel "gltf" statt unter den Map-Namen ("Diffuse", "nor_gl", "arm"), +// und die 1k-Auflösung liefert neben der .gltf-Datei selbst noch eine `include`-Liste mit den +// referenzierten Texturen und der gemeinsamen `.bin`-Geometriedatei — ohne die kann +// gltf-transform die .gltf-Datei nicht öffnen. +import { execFileSync } from "node:child_process"; +import { mkdir, writeFile } from "node:fs/promises"; +import { dirname, join } from "node:path"; + +const UA = { "User-Agent": "leonida-assets/0.1 (local hobby project)" }; +const SLUGS = ["street_lamp_02", "painted_wooden_bench", "metal_trash_can", "fire_hydrant", "concrete_road_barrier_02"]; +const RAW_DIR = "public/models/props/raw"; +const OUT_DIR = "public/models/props"; + +async function fetchTo(url, path) { + const buf = Buffer.from(await (await fetch(url, { headers: UA })).arrayBuffer()); + await mkdir(dirname(path), { recursive: true }); + await writeFile(path, buf); + return buf.length; +} + +await mkdir(OUT_DIR, { recursive: true }); +for (const slug of SLUGS) { + const files = await (await fetch(`https://api.polyhaven.com/files/${slug}`, { headers: UA })).json(); + const entry = files.gltf?.["1k"]?.gltf; + if (!entry) { console.warn(`${slug}: keine 1k-gltf-Datei gefunden`); continue; } + + const gltfPath = join(RAW_DIR, slug, `${slug}_1k.gltf`); + const gltfSize = await fetchTo(entry.url, gltfPath); + console.log(`${slug}_1k.gltf ${(gltfSize / 1e6).toFixed(2)} MB`); + for (const [relPath, include] of Object.entries(entry.include ?? {})) { + const size = await fetchTo(include.url, join(RAW_DIR, slug, relPath)); + console.log(` ${relPath} ${(size / 1e6).toFixed(2)} MB`); + } + + const outPath = join(OUT_DIR, `${slug}.glb`); + execFileSync("npx", ["--yes", "@gltf-transform/cli@4.5.0", "optimize", gltfPath, outPath, + "--texture-size", "512", "--simplify-error", "0.01", "--compress", "meshopt"], { stdio: "inherit" }); +}