ref: aeb153cdd6cb37dc1e9d61b22a92430a756ddeb5
parent: 55ceca8db396829cba474164545c6bcfcc45eea4
author: rodri <[email protected]>
date: Sun May 12 16:34:03 EDT 2024
began work on a solar system planetarium.
--- a/mdl/earth.mtl
+++ b/mdl/earth.mtl
@@ -19,6 +19,7 @@
Ke 0.000000 0.000000 0.000000
Ni 1.000000
d 1.000000
+map_Kd earth_clouds.png
illum 2
newmtl Earth
@@ -29,4 +30,5 @@
Ke 0.000000 0.000000 0.000000
Ni 1.000000
d 1.000000
+map_Kd earth_diffuse.png
illum 2
binary files /dev/null b/mdl/jupiter_diffuse.png differ
binary files /dev/null b/mdl/luna_diffuse.png differ
binary files /dev/null b/mdl/mars_diffuse.png differ
binary files /dev/null b/mdl/mercury_diffuse.png differ
--- /dev/null
+++ b/mdl/planet.mtl
@@ -1,0 +1,43 @@
+newmtl Sol
+Kd 1.0 1.0 1.0
+map_Kd sol_diffuse.jpg
+
+newmtl Mercury
+Kd 1.0 1.0 1.0
+map_Kd mercury_diffuse.png
+
+newmtl Venus
+Kd 1.0 1.0 1.0
+map_Kd venus_diffuse.png
+
+newmtl Earth
+Kd 1.0 1.0 1.0
+map_Kd earth_diffuse.png
+
+newmtl Luna
+Kd 1.0 1.0 1.0
+map_Kd luna_diffuse.png
+
+newmtl Mars
+Kd 1.0 1.0 1.0
+map_Kd mars_diffuse.png
+
+newmtl Jupiter
+Kd 1.0 1.0 1.0
+map_Kd jupiter_diffuse.png
+
+newmtl Saturn
+Kd 1.0 1.0 1.0
+map_Kd saturn_diffuse.png
+
+newmtl Uranus
+Kd 0.8 0.1 0.1
+#map_Kd uranus_diffuse.png
+#
+newmtl Neptune
+Kd 0.1 0.8 0.1
+#map_Kd neptune_diffuse.png
+#
+newmtl Pluto
+Kd 0.1 0.1 0.8
+#map_Kd pluto_diffuse.png
--- /dev/null
+++ b/mdl/planet.obj
@@ -1,0 +1,1598 @@
+mtllib planet.mtl
+v -0.172738 3.165391 0.157983
+v -0.238083 3.128375 -0.480715
+v -0.292668 2.967402 -1.087829
+v -0.334600 2.699311 -1.635929
+v -0.806228 3.062041 0.219991
+v -1.393834 2.838628 0.271873
+v -1.910322 2.515532 0.311878
+v -0.100249 3.072352 0.790632
+v -0.025072 2.858158 1.380146
+v 0.048896 2.541766 1.900402
+v 0.469477 3.137852 0.089276
+v 1.081685 2.983978 0.018142
+v 1.634928 2.720081 -0.051656
+v 0.392176 3.103807 -0.535798
+v 0.311232 2.949461 -1.130624
+v 0.242365 2.688665 -1.669382
+v 0.996850 2.957232 -0.579283
+v 0.893126 2.821520 -1.147104
+v 0.794946 2.587096 -1.658159
+v 1.545925 2.701632 -0.621124
+v 1.420203 2.592841 -1.155290
+v 1.284297 2.407707 -1.621118
+v -0.857194 3.028987 -0.406146
+v -1.432204 2.813550 -0.327450
+v -1.939337 2.499154 -0.260192
+v -0.884311 2.877951 -1.004932
+v -1.433786 2.683912 -0.902979
+v -1.915744 2.398839 -0.806225
+v -0.899037 2.621040 -1.548023
+v -1.417664 2.457247 -1.423610
+v -1.859800 2.225704 -1.289141
+v -0.722934 2.974831 0.838000
+v -0.623024 2.772021 1.415005
+v -0.523653 2.467751 1.926263
+v -1.304630 2.762130 0.862015
+v -1.185105 2.583189 1.413209
+v -1.060439 2.311533 1.899153
+v -1.818447 2.450137 0.874400
+v -1.680903 2.303245 1.394318
+v -1.525171 2.088722 1.839998
+v 0.527675 3.048005 0.711143
+v 1.126586 2.902927 0.615075
+v 1.669473 2.649052 0.519501
+v 0.574690 2.840643 1.294209
+v 1.145620 2.715707 1.177704
+v 1.659734 2.490959 1.055891
+v 0.620432 2.531803 1.810949
+v 1.156887 2.435084 1.675255
+v 1.624702 2.262980 1.521105
+v 0.342073 -0.144258 3.152249
+v 0.300056 0.500634 3.119909
+v 0.246725 1.113024 2.962229
+v 0.185589 1.664417 2.696251
+v -0.305026 -0.175536 3.154464
+v -0.927702 -0.199123 3.028897
+v -1.496111 -0.214373 2.791092
+v 0.369860 -0.782710 3.053697
+v 0.382201 -1.376704 2.834273
+v 0.379647 -1.899936 2.514082
+v 0.974102 -0.107022 3.018968
+v 1.553661 -0.066261 2.766992
+v 2.055885 -0.024284 2.418108
+v 0.920695 0.523623 2.992096
+v 0.842166 1.124221 2.846292
+v 0.755228 1.667309 2.593108
+v 1.493429 0.535996 2.748977
+v 1.394891 1.109932 2.626181
+v 1.282557 1.626494 2.405007
+v 1.992221 0.549430 2.409083
+v 1.875595 1.090222 2.316907
+v 1.732780 1.563260 2.151322
+v -0.333003 0.457039 3.123255
+v -0.943083 0.406518 3.003304
+v -1.501808 0.363610 2.772518
+v -0.357788 1.060377 2.970200
+v -0.939690 0.985652 2.867049
+v -1.469456 0.911967 2.661487
+v -0.390000 1.605696 2.710007
+v -0.936736 1.507150 2.631639
+v -1.419328 1.393792 2.473327
+v -0.264298 -0.800973 3.059916
+v -0.224267 -1.384661 2.847265
+v -0.198545 -1.900858 2.534130
+v -0.877659 -0.797657 2.944139
+v -0.812367 -1.357246 2.751807
+v -0.754290 -1.850037 2.466355
+v -1.440184 -0.785647 2.717191
+v -1.349868 -1.315222 2.553927
+v -1.249211 -1.769699 2.319943
+v 0.988152 -0.732717 2.925949
+v 1.556676 -0.665254 2.684901
+v 2.051172 -0.596224 2.347702
+v 0.973504 -1.317894 2.718445
+v 1.518380 -1.227823 2.502293
+v 1.990473 -1.130625 2.198682
+v 0.943993 -1.835650 2.411175
+v 1.460274 -1.724358 2.229055
+v 1.897110 -1.592450 1.984836
+v 0.172738 -3.165391 -0.157983
+v 0.238083 -3.128375 0.480715
+v 0.292668 -2.967402 1.087829
+v 0.334600 -2.699311 1.635929
+v -0.469477 -3.137852 -0.089276
+v -1.081685 -2.983978 -0.018142
+v -1.634928 -2.720081 0.051656
+v 0.100249 -3.072352 -0.790632
+v 0.025072 -2.858158 -1.380146
+v -0.048896 -2.541766 -1.900402
+v 0.806228 -3.062041 -0.219991
+v 1.393834 -2.838628 -0.271873
+v 1.910322 -2.515532 -0.311878
+v 0.857194 -3.028987 0.406147
+v 0.884311 -2.877951 1.004932
+v 0.899037 -2.621040 1.548024
+v 1.432204 -2.813550 0.327450
+v 1.433786 -2.683912 0.902979
+v 1.417664 -2.457247 1.423610
+v 1.939337 -2.499154 0.260192
+v 1.915744 -2.398838 0.806225
+v 1.859800 -2.225703 1.289141
+v -0.392176 -3.103807 0.535798
+v -0.996850 -2.957232 0.579283
+v -1.545925 -2.701632 0.621124
+v -0.311232 -2.949461 1.130624
+v -0.893126 -2.821520 1.147104
+v -1.420203 -2.592841 1.155290
+v -0.242365 -2.688665 1.669382
+v -0.794946 -2.587096 1.658159
+v -1.284297 -2.407707 1.621118
+v -0.527675 -3.048005 -0.711143
+v -0.574690 -2.840643 -1.294209
+v -0.620432 -2.531803 -1.810949
+v -1.126586 -2.902927 -0.615075
+v -1.145620 -2.715707 -1.177704
+v -1.156887 -2.435084 -1.675255
+v -1.669473 -2.649052 -0.519501
+v -1.659734 -2.490959 -1.055891
+v -1.624702 -2.262980 -1.521105
+v 0.722934 -2.974831 -0.838000
+v 1.304630 -2.762130 -0.862015
+v 1.818447 -2.450137 -0.874400
+v 0.623024 -2.772021 -1.415005
+v 1.185105 -2.583189 -1.413209
+v 1.680903 -2.303245 -1.394318
+v 0.523653 -2.467751 -1.926263
+v 1.060439 -2.311533 -1.899153
+v 1.525171 -2.088722 -1.839998
+v -0.342073 0.144258 -3.152249
+v -0.300056 -0.500634 -3.119909
+v -0.246725 -1.113024 -2.962229
+v -0.185589 -1.664417 -2.696251
+v -0.974102 0.107022 -3.018968
+v -1.553662 0.066261 -2.766992
+v -2.055885 0.024284 -2.418108
+v -0.369860 0.782710 -3.053697
+v -0.382201 1.376704 -2.834273
+v -0.379647 1.899936 -2.514082
+v 0.305026 0.175536 -3.154464
+v 0.927702 0.199123 -3.028897
+v 1.496112 0.214373 -2.791091
+v 0.333003 -0.457039 -3.123255
+v 0.357788 -1.060377 -2.970200
+v 0.390000 -1.605696 -2.710007
+v 0.943083 -0.406518 -3.003304
+v 0.939689 -0.985652 -2.867049
+v 0.936736 -1.507150 -2.631639
+v 1.501808 -0.363610 -2.772518
+v 1.469456 -0.911967 -2.661487
+v 1.419328 -1.393792 -2.473327
+v -0.920695 -0.523623 -2.992096
+v -1.493429 -0.535996 -2.748977
+v -1.992221 -0.549430 -2.409083
+v -0.842166 -1.124221 -2.846292
+v -1.394891 -1.109932 -2.626181
+v -1.875594 -1.090222 -2.316907
+v -0.755228 -1.667309 -2.593108
+v -1.282557 -1.626495 -2.405008
+v -1.732780 -1.563261 -2.151322
+v -0.988152 0.732716 -2.925949
+v -0.973504 1.317894 -2.718445
+v -0.943993 1.835650 -2.411175
+v -1.556676 0.665255 -2.684901
+v -1.518381 1.227823 -2.502293
+v -1.460274 1.724358 -2.229055
+v -2.051173 0.596224 -2.347702
+v -1.990473 1.130625 -2.198682
+v -1.897110 1.592451 -1.984836
+v 0.264298 0.800973 -3.059916
+v 0.877659 0.797657 -2.944139
+v 1.440184 0.785647 -2.717191
+v 0.224267 1.384660 -2.847265
+v 0.812367 1.357246 -2.751807
+v 1.349868 1.315222 -2.553927
+v 0.198545 1.900858 -2.534130
+v 0.754290 1.850037 -2.466355
+v 1.249211 1.769699 -2.319943
+v 3.152972 0.168369 -0.323907
+v 3.155188 0.135767 0.317571
+v 3.032000 0.098418 0.933695
+v 2.798556 0.058483 1.496383
+v 3.119020 -0.473930 -0.348712
+v 2.961620 -1.083672 -0.359106
+v 2.697986 -1.633661 -0.355697
+v 3.021382 0.194105 -0.952930
+v 2.771306 0.211630 -1.532833
+v 2.423068 0.220631 -2.038274
+v 3.056856 0.805306 -0.285670
+v 2.839228 1.399040 -0.236572
+v 2.519089 1.922591 -0.179801
+v 3.062540 0.760208 0.342684
+v 2.948128 0.696670 0.947464
+v 2.724362 0.630311 1.501684
+v 2.851575 1.345471 0.364312
+v 2.756739 1.259709 0.942348
+v 2.560883 1.165560 1.468962
+v 2.538798 1.863988 0.393130
+v 2.471405 1.757273 0.937359
+v 2.326277 1.628460 1.418116
+v 3.123129 -0.492437 0.279402
+v 2.971104 -1.090307 0.241383
+v 2.713883 -1.631655 0.216883
+v 3.006415 -0.501910 0.885467
+v 2.871665 -1.073445 0.822043
+v 2.639273 -1.588306 0.765517
+v 2.780788 -0.513983 1.441366
+v 2.671399 -1.052943 1.352567
+v 2.485628 -1.524583 1.253712
+v 2.992484 -0.436200 -0.963984
+v 2.751350 -0.392398 -1.533165
+v 2.412622 -0.356540 -2.031410
+v 2.846140 -1.037384 -0.947534
+v 2.627492 -0.970125 -1.493198
+v 2.319366 -0.904239 -1.969109
+v 2.594321 -1.581873 -0.917430
+v 2.406727 -1.491391 -1.434543
+v 2.153621 -1.386091 -1.874877
+v 2.930684 0.818103 -0.903492
+v 2.724485 1.401294 -0.829490
+v 2.416602 1.917344 -0.747211
+v 2.690936 0.809087 -1.476056
+v 2.508811 1.368143 -1.381502
+v 2.234208 1.860494 -1.273333
+v 2.353558 0.791344 -1.977129
+v 2.204192 1.320586 -1.863354
+v 1.988532 1.774713 -1.723552
+v -3.152972 -0.168369 0.323907
+v -3.021381 -0.194105 0.952930
+v -2.771306 -0.211630 1.532833
+v -2.423068 -0.220631 2.038274
+v -3.119020 0.473930 0.348712
+v -2.961620 1.083672 0.359106
+v -2.697986 1.633661 0.355697
+v -3.155188 -0.135767 -0.317571
+v -3.032000 -0.098418 -0.933695
+v -2.798556 -0.058483 -1.496383
+v -3.056856 -0.805306 0.285670
+v -2.839228 -1.399040 0.236572
+v -2.519089 -1.922591 0.179801
+v -2.930684 -0.818103 0.903492
+v -2.690936 -0.809087 1.476056
+v -2.353558 -0.791344 1.977129
+v -2.724485 -1.401294 0.829490
+v -2.508811 -1.368143 1.381502
+v -2.204192 -1.320586 1.863354
+v -2.416602 -1.917344 0.747211
+v -2.234208 -1.860494 1.273333
+v -1.988532 -1.774713 1.723552
+v -2.992484 0.436200 0.963984
+v -2.846140 1.037384 0.947534
+v -2.594320 1.581873 0.917429
+v -2.751350 0.392398 1.533165
+v -2.627492 0.970125 1.493198
+v -2.406727 1.491391 1.434543
+v -2.412622 0.356540 2.031410
+v -2.319366 0.904239 1.969109
+v -2.153621 1.386091 1.874877
+v -3.123129 0.492437 -0.279402
+v -3.006415 0.501910 -0.885467
+v -2.780788 0.513983 -1.441366
+v -2.971104 1.090307 -0.241383
+v -2.871665 1.073446 -0.822043
+v -2.671399 1.052943 -1.352567
+v -2.713883 1.631655 -0.216883
+v -2.639273 1.588306 -0.765517
+v -2.485628 1.524583 -1.253712
+v -3.062539 -0.760208 -0.342684
+v -2.851575 -1.345471 -0.364312
+v -2.538798 -1.863988 -0.393130
+v -2.948128 -0.696670 -0.947464
+v -2.756739 -1.259709 -0.942348
+v -2.471405 -1.757274 -0.937359
+v -2.724362 -0.630311 -1.501685
+v -2.560883 -1.165560 -1.468962
+v -2.326277 -1.628460 -1.418116
+v 2.017313 2.000923 1.414655
+v 2.104101 2.171842 0.964551
+v 2.141823 2.300636 0.440644
+v 2.115063 2.363708 -0.117855
+v 2.021784 2.352476 -0.672861
+v 1.872038 2.271853 -1.186868
+v 1.689439 2.141826 -1.622613
+v 1.205818 2.138170 -2.012146
+v 0.737408 2.262713 -2.100204
+v 0.200165 2.336825 -2.138617
+v -0.363538 2.341218 -2.112116
+v -0.914469 2.271850 -2.019144
+v -1.416054 2.138113 -1.870231
+v -1.834067 1.964060 -1.689131
+v -2.218873 1.919305 -1.211350
+v -2.319590 2.032861 -0.749317
+v -2.367494 2.102762 -0.218771
+v -2.345323 2.111524 0.339745
+v -2.250238 2.054675 0.888391
+v -2.092438 1.939470 1.390919
+v -1.897038 1.786537 1.812189
+v -1.417143 1.792179 2.203248
+v -0.966364 1.953165 2.307766
+v -0.441083 2.076959 2.359277
+v 0.119331 2.141436 2.339767
+v 0.676377 2.138164 2.246168
+v 1.192064 2.071123 2.089002
+v 1.628814 1.958140 1.893977
+v 2.243505 -1.505392 1.665826
+v 2.377472 -1.061308 1.815421
+v 2.460303 -0.541055 1.930975
+v 2.471028 0.017436 1.992037
+v 2.404098 0.576476 1.990599
+v 2.268059 1.098001 1.929974
+v 2.087475 1.543227 1.826307
+v -1.828529 1.332389 2.226145
+v -1.932270 0.873776 2.361639
+v -1.993483 0.342388 2.446077
+v -1.995537 -0.221458 2.458309
+v -1.934485 -0.778926 2.392810
+v -1.817933 -1.292191 2.258287
+v -1.666451 -1.724388 2.079404
+v -1.205818 -2.138170 2.012146
+v -0.737408 -2.262713 2.100204
+v -0.200165 -2.336825 2.138617
+v 0.363538 -2.341218 2.112116
+v 0.914469 -2.271850 2.019144
+v 1.416054 -2.138112 1.870231
+v 1.834067 -1.964060 1.689131
+v 1.897038 -1.786537 -1.812189
+v 2.092438 -1.939470 -1.390919
+v 2.250238 -2.054675 -0.888391
+v 2.345323 -2.111523 -0.339745
+v 2.367494 -2.102762 0.218771
+v 2.319590 -2.032861 0.749317
+v 2.218873 -1.919304 1.211350
+v -1.689439 -2.141826 1.622613
+v -1.872038 -2.271853 1.186868
+v -2.021784 -2.352476 0.672861
+v -2.115063 -2.363708 0.117855
+v -2.141823 -2.300636 -0.440644
+v -2.104101 -2.171842 -0.964551
+v -2.017313 -2.000923 -1.414655
+v -1.628814 -1.958140 -1.893977
+v -1.192064 -2.071123 -2.089002
+v -0.676377 -2.138164 -2.246168
+v -0.119331 -2.141436 -2.339767
+v 0.441083 -2.076959 -2.359277
+v 0.966364 -1.953165 -2.307766
+v 1.417143 -1.792179 -2.203248
+v 1.666451 1.724388 -2.079404
+v 1.817933 1.292191 -2.258287
+v 1.934485 0.778926 -2.392810
+v 1.995537 0.221458 -2.458309
+v 1.993483 -0.342388 -2.446077
+v 1.932271 -0.873776 -2.361639
+v 1.828529 -1.332389 -2.226145
+v -2.087475 -1.543227 -1.826307
+v -2.268059 -1.098001 -1.929974
+v -2.404098 -0.576476 -1.990599
+v -2.471028 -0.017436 -1.992037
+v -2.460303 0.541055 -1.930975
+v -2.377472 1.061308 -1.815421
+v -2.243505 1.505392 -1.665826
+v 1.530344 2.014376 -1.916985
+v -2.112132 1.807618 -1.531637
+v 1.923516 1.845829 1.722642
+v -1.725258 1.647547 2.093697
+v 1.725258 -1.647547 -2.093697
+v -1.923516 -1.845829 -1.722642
+v 2.112132 -1.807618 1.531637
+v -1.530344 -2.014376 1.916985
+vt 0.377979 0.825310
+vt 0.408469 0.825310
+vt 0.408469 0.865983
+vt 0.377979 0.865983
+vt 0.408469 0.906657
+vt 0.377979 0.906657
+vt 0.408469 0.947331
+vt 0.377979 0.947331
+vt 0.408469 0.988004
+vt 0.377979 0.988004
+vt 0.438960 0.825310
+vt 0.438960 0.865984
+vt 0.438960 0.906657
+vt 0.438960 0.947331
+vt 0.438960 0.988004
+vt 0.469450 0.825310
+vt 0.469450 0.865983
+vt 0.469450 0.906657
+vt 0.469450 0.947331
+vt 0.469450 0.988004
+vt 0.499940 0.825310
+vt 0.499940 0.865983
+vt 0.499940 0.906657
+vt 0.499940 0.947331
+vt 0.499940 0.988004
+vt 0.347489 0.865983
+vt 0.347489 0.825310
+vt 0.316998 0.865984
+vt 0.316998 0.825310
+vt 0.286508 0.865983
+vt 0.286508 0.825310
+vt 0.256018 0.865983
+vt 0.256018 0.825310
+vt 0.347489 0.906657
+vt 0.316998 0.906657
+vt 0.286508 0.906657
+vt 0.256018 0.906657
+vt 0.347489 0.947331
+vt 0.316998 0.947331
+vt 0.286508 0.947331
+vt 0.256018 0.947331
+vt 0.347489 0.988004
+vt 0.316998 0.988004
+vt 0.286508 0.988004
+vt 0.256018 0.988004
+vt 0.347489 0.784636
+vt 0.377979 0.784636
+vt 0.347489 0.743963
+vt 0.377979 0.743962
+vt 0.347489 0.703289
+vt 0.377979 0.703289
+vt 0.347489 0.662615
+vt 0.377979 0.662615
+vt 0.316998 0.784636
+vt 0.316998 0.743962
+vt 0.316998 0.703289
+vt 0.316998 0.662615
+vt 0.286508 0.784636
+vt 0.286508 0.743963
+vt 0.286508 0.703289
+vt 0.286508 0.662615
+vt 0.256018 0.784636
+vt 0.256018 0.743963
+vt 0.256018 0.703289
+vt 0.256018 0.662615
+vt 0.408469 0.784636
+vt 0.438960 0.784636
+vt 0.469450 0.784636
+vt 0.499940 0.784636
+vt 0.408469 0.743963
+vt 0.438960 0.743963
+vt 0.469450 0.743963
+vt 0.499940 0.743963
+vt 0.408469 0.703289
+vt 0.438960 0.703289
+vt 0.469450 0.703289
+vt 0.499940 0.703289
+vt 0.408469 0.662615
+vt 0.438960 0.662615
+vt 0.469450 0.662615
+vt 0.499940 0.662615
+vt 0.377979 0.500000
+vt 0.408469 0.500000
+vt 0.408469 0.540654
+vt 0.377979 0.540654
+vt 0.408469 0.581308
+vt 0.377979 0.581308
+vt 0.408469 0.621961
+vt 0.377979 0.621961
+vt 0.438960 0.500000
+vt 0.438960 0.540654
+vt 0.438960 0.581308
+vt 0.438960 0.621961
+vt 0.469450 0.500000
+vt 0.469450 0.540654
+vt 0.469450 0.581308
+vt 0.469450 0.621961
+vt 0.499940 0.500000
+vt 0.499940 0.540654
+vt 0.499940 0.581308
+vt 0.499940 0.621961
+vt 0.347489 0.540654
+vt 0.347489 0.500000
+vt 0.316998 0.540654
+vt 0.316998 0.500000
+vt 0.286508 0.540654
+vt 0.286508 0.500000
+vt 0.256018 0.540654
+vt 0.256018 0.500000
+vt 0.347489 0.581308
+vt 0.316998 0.581308
+vt 0.286508 0.581308
+vt 0.256018 0.581308
+vt 0.347489 0.621961
+vt 0.316998 0.621961
+vt 0.286508 0.621961
+vt 0.256018 0.621961
+vt 0.347489 0.459346
+vt 0.377979 0.459346
+vt 0.347489 0.418692
+vt 0.377979 0.418692
+vt 0.347489 0.378039
+vt 0.377979 0.378039
+vt 0.347489 0.337385
+vt 0.377979 0.337385
+vt 0.316998 0.459346
+vt 0.316998 0.418692
+vt 0.316998 0.378039
+vt 0.316998 0.337385
+vt 0.286508 0.459346
+vt 0.286508 0.418692
+vt 0.286508 0.378039
+vt 0.286508 0.337385
+vt 0.256018 0.459346
+vt 0.256018 0.418692
+vt 0.256018 0.378039
+vt 0.256018 0.337385
+vt 0.408469 0.459346
+vt 0.438960 0.459346
+vt 0.469450 0.459346
+vt 0.499940 0.459346
+vt 0.408469 0.418692
+vt 0.438960 0.418692
+vt 0.469450 0.418692
+vt 0.499940 0.418692
+vt 0.408469 0.378039
+vt 0.438960 0.378039
+vt 0.469450 0.378039
+vt 0.499940 0.378039
+vt 0.408469 0.337385
+vt 0.438960 0.337385
+vt 0.469450 0.337385
+vt 0.499940 0.337385
+vt 0.377979 0.174690
+vt 0.408469 0.174690
+vt 0.408469 0.215364
+vt 0.377979 0.215364
+vt 0.408469 0.256038
+vt 0.377979 0.256038
+vt 0.408469 0.296711
+vt 0.377979 0.296711
+vt 0.438960 0.174690
+vt 0.438960 0.215364
+vt 0.438960 0.256037
+vt 0.438960 0.296711
+vt 0.469450 0.174690
+vt 0.469450 0.215364
+vt 0.469450 0.256038
+vt 0.469450 0.296711
+vt 0.499940 0.174690
+vt 0.499940 0.215364
+vt 0.499940 0.256038
+vt 0.499940 0.296711
+vt 0.347489 0.215364
+vt 0.347489 0.174690
+vt 0.316998 0.215364
+vt 0.316998 0.174690
+vt 0.286508 0.215364
+vt 0.286508 0.174690
+vt 0.256018 0.215364
+vt 0.256018 0.174690
+vt 0.347489 0.256038
+vt 0.316998 0.256037
+vt 0.286508 0.256038
+vt 0.256018 0.256038
+vt 0.347489 0.296711
+vt 0.316998 0.296711
+vt 0.286508 0.296711
+vt 0.256018 0.296711
+vt 0.347489 0.134017
+vt 0.377979 0.134017
+vt 0.347489 0.093343
+vt 0.377979 0.093343
+vt 0.347489 0.052669
+vt 0.377979 0.052669
+vt 0.347489 0.011996
+vt 0.377979 0.011996
+vt 0.316998 0.134017
+vt 0.316998 0.093343
+vt 0.316998 0.052669
+vt 0.316998 0.011996
+vt 0.286508 0.134017
+vt 0.286508 0.093343
+vt 0.286508 0.052669
+vt 0.286508 0.011996
+vt 0.256018 0.134017
+vt 0.256018 0.093343
+vt 0.256018 0.052669
+vt 0.256018 0.011996
+vt 0.408469 0.134017
+vt 0.438960 0.134017
+vt 0.469450 0.134017
+vt 0.499940 0.134017
+vt 0.408469 0.093343
+vt 0.438960 0.093343
+vt 0.469450 0.093343
+vt 0.499940 0.093343
+vt 0.408469 0.052669
+vt 0.438960 0.052669
+vt 0.469450 0.052669
+vt 0.499940 0.052669
+vt 0.408469 0.011996
+vt 0.438960 0.011996
+vt 0.469450 0.011996
+vt 0.499940 0.011996
+vt 0.866003 0.500000
+vt 0.835498 0.500000
+vt 0.835498 0.459346
+vt 0.866003 0.459346
+vt 0.835498 0.418692
+vt 0.866003 0.418692
+vt 0.835498 0.378039
+vt 0.866003 0.378039
+vt 0.835498 0.337385
+vt 0.866003 0.337385
+vt 0.804993 0.500000
+vt 0.804993 0.459346
+vt 0.804993 0.418692
+vt 0.804993 0.378039
+vt 0.804993 0.337385
+vt 0.774488 0.500000
+vt 0.774488 0.459346
+vt 0.774488 0.418692
+vt 0.774488 0.378039
+vt 0.774488 0.337385
+vt 0.743982 0.500000
+vt 0.743982 0.459346
+vt 0.743982 0.418692
+vt 0.743982 0.378039
+vt 0.743982 0.337385
+vt 0.896509 0.459346
+vt 0.896509 0.500000
+vt 0.927014 0.459346
+vt 0.927014 0.500000
+vt 0.957519 0.459346
+vt 0.957519 0.500000
+vt 0.988024 0.459346
+vt 0.988024 0.500000
+vt 0.896509 0.418692
+vt 0.927014 0.418692
+vt 0.957519 0.418692
+vt 0.988024 0.418692
+vt 0.896509 0.378039
+vt 0.927014 0.378039
+vt 0.957519 0.378039
+vt 0.988024 0.378039
+vt 0.896509 0.337385
+vt 0.927014 0.337385
+vt 0.957519 0.337385
+vt 0.988024 0.337385
+vt 0.896509 0.540654
+vt 0.866003 0.540654
+vt 0.896509 0.581308
+vt 0.866003 0.581308
+vt 0.896509 0.621961
+vt 0.866003 0.621961
+vt 0.896509 0.662615
+vt 0.866003 0.662615
+vt 0.927014 0.540654
+vt 0.927014 0.581308
+vt 0.927014 0.621961
+vt 0.927014 0.662615
+vt 0.957519 0.540654
+vt 0.957519 0.581308
+vt 0.957519 0.621961
+vt 0.957519 0.662615
+vt 0.988024 0.540654
+vt 0.988024 0.581308
+vt 0.988024 0.621961
+vt 0.988024 0.662615
+vt 0.835498 0.540654
+vt 0.804993 0.540654
+vt 0.774488 0.540654
+vt 0.743982 0.540654
+vt 0.835498 0.581308
+vt 0.804993 0.581308
+vt 0.774488 0.581308
+vt 0.743982 0.581308
+vt 0.835498 0.621961
+vt 0.804993 0.621961
+vt 0.774488 0.621961
+vt 0.743982 0.621961
+vt 0.835498 0.662615
+vt 0.804993 0.662615
+vt 0.774488 0.662615
+vt 0.743982 0.662615
+vt 0.621961 0.500000
+vt 0.621961 0.540654
+vt 0.591456 0.540654
+vt 0.591456 0.500000
+vt 0.560951 0.540654
+vt 0.560951 0.500000
+vt 0.530446 0.540654
+vt 0.530446 0.500000
+vt 0.621961 0.581308
+vt 0.591456 0.581308
+vt 0.560951 0.581308
+vt 0.530446 0.581308
+vt 0.621961 0.621961
+vt 0.591456 0.621961
+vt 0.560951 0.621961
+vt 0.530446 0.621961
+vt 0.621961 0.662615
+vt 0.591456 0.662615
+vt 0.560951 0.662615
+vt 0.530446 0.662615
+vt 0.591456 0.459346
+vt 0.621961 0.459346
+vt 0.591456 0.418692
+vt 0.621961 0.418692
+vt 0.591456 0.378039
+vt 0.621961 0.378039
+vt 0.591456 0.337385
+vt 0.621961 0.337385
+vt 0.560951 0.459346
+vt 0.560951 0.418692
+vt 0.560951 0.378039
+vt 0.560951 0.337385
+vt 0.530446 0.459346
+vt 0.530446 0.418692
+vt 0.530446 0.378039
+vt 0.530446 0.337385
+vt 0.652467 0.459346
+vt 0.652467 0.500000
+vt 0.682972 0.459346
+vt 0.682972 0.500000
+vt 0.713477 0.459346
+vt 0.713477 0.500000
+vt 0.652467 0.418692
+vt 0.682972 0.418692
+vt 0.713477 0.418692
+vt 0.652467 0.378039
+vt 0.682972 0.378039
+vt 0.713477 0.378039
+vt 0.652467 0.337385
+vt 0.682972 0.337385
+vt 0.713477 0.337385
+vt 0.652467 0.540654
+vt 0.652467 0.581308
+vt 0.652467 0.621961
+vt 0.652467 0.662615
+vt 0.682972 0.540654
+vt 0.682972 0.581308
+vt 0.682972 0.621961
+vt 0.682972 0.662615
+vt 0.713477 0.540654
+vt 0.713477 0.581308
+vt 0.713477 0.621961
+vt 0.713477 0.662615
+vt 0.133997 0.500000
+vt 0.133997 0.459346
+vt 0.164502 0.459346
+vt 0.164502 0.500000
+vt 0.195007 0.459346
+vt 0.195007 0.500000
+vt 0.225512 0.459346
+vt 0.225512 0.500000
+vt 0.133997 0.418692
+vt 0.164502 0.418692
+vt 0.195007 0.418692
+vt 0.225512 0.418692
+vt 0.133997 0.378039
+vt 0.164502 0.378039
+vt 0.195007 0.378039
+vt 0.225512 0.378039
+vt 0.133997 0.337385
+vt 0.164502 0.337385
+vt 0.195007 0.337385
+vt 0.225512 0.337385
+vt 0.164502 0.540654
+vt 0.133997 0.540654
+vt 0.164502 0.581308
+vt 0.133997 0.581308
+vt 0.164502 0.621961
+vt 0.133997 0.621961
+vt 0.164502 0.662615
+vt 0.133997 0.662615
+vt 0.195007 0.540654
+vt 0.195007 0.581308
+vt 0.195007 0.621961
+vt 0.195007 0.662615
+vt 0.225512 0.540654
+vt 0.225512 0.581308
+vt 0.225512 0.621961
+vt 0.225512 0.662615
+vt 0.103491 0.540654
+vt 0.103491 0.500000
+vt 0.072986 0.540654
+vt 0.072986 0.500000
+vt 0.042481 0.540654
+vt 0.042481 0.500000
+vt 0.011976 0.540654
+vt 0.011976 0.500000
+vt 0.103491 0.581308
+vt 0.072986 0.581308
+vt 0.042481 0.581308
+vt 0.011976 0.581308
+vt 0.103491 0.621961
+vt 0.072986 0.621961
+vt 0.042481 0.621961
+vt 0.011976 0.621961
+vt 0.103491 0.662615
+vt 0.072986 0.662615
+vt 0.042481 0.662615
+vt 0.011976 0.662615
+vt 0.103491 0.459346
+vt 0.103491 0.418692
+vt 0.103491 0.378039
+vt 0.103491 0.337385
+vt 0.072986 0.459346
+vt 0.072986 0.418692
+vt 0.072986 0.378039
+vt 0.072986 0.337385
+vt 0.042481 0.459346
+vt 0.042481 0.418692
+vt 0.042481 0.378039
+vt 0.042481 0.337385
+vt 0.011976 0.459346
+vt 0.011976 0.418692
+vt 0.011976 0.378039
+vt 0.011976 0.337385
+vn -0.0542 0.9973 0.0498
+vn 0.1455 0.9889 0.0284
+vn 0.1218 0.9785 -0.1664
+vn -0.0746 0.9860 -0.1489
+vn 0.0966 0.9306 -0.3529
+vn -0.0917 0.9362 -0.3394
+vn 0.0746 0.8487 -0.5235
+vn -0.1051 0.8519 -0.5130
+vn 0.0612 0.7363 -0.6738
+vn -0.1144 0.7376 -0.6655
+vn 0.3375 0.9413 0.0061
+vn 0.3113 0.9330 -0.1802
+vn 0.2783 0.8915 -0.3575
+vn 0.2462 0.8183 -0.5195
+vn 0.2276 0.7138 -0.6623
+vn 0.5127 0.8584 -0.0160
+vn 0.4851 0.8528 -0.1933
+vn 0.4455 0.8201 -0.3591
+vn 0.3997 0.7652 -0.5047
+vn 0.3716 0.6763 -0.6360
+vn 0.6663 0.7447 -0.0371
+vn 0.6374 0.7413 -0.2101
+vn 0.5914 0.7168 -0.3694
+vn 0.5360 0.6776 -0.5035
+vn 0.4821 0.6346 -0.6040
+vn -0.2676 0.9552 -0.1260
+vn -0.2514 0.9654 0.0691
+vn -0.4480 0.8882 -0.1015
+vn -0.4358 0.8960 0.0854
+vn -0.6087 0.7893 -0.0801
+vn -0.5996 0.7943 0.0981
+vn -0.7459 0.6626 -0.0669
+vn -0.7389 0.6652 0.1071
+vn -0.2763 0.9084 -0.3138
+vn -0.4480 0.8486 -0.2814
+vn -0.6009 0.7593 -0.2497
+vn -0.7315 0.6413 -0.2314
+vn -0.2809 0.8277 -0.4858
+vn -0.4420 0.7779 -0.4466
+vn -0.5806 0.7084 -0.4013
+vn -0.7013 0.6072 -0.3734
+vn -0.2861 0.7161 -0.6366
+vn -0.4416 0.6751 -0.5909
+vn -0.5704 0.6224 -0.5359
+vn -0.6654 0.5695 -0.4826
+vn -0.2257 0.9383 0.2618
+vn -0.0317 0.9686 0.2467
+vn -0.1946 0.8752 0.4428
+vn -0.0082 0.9020 0.4316
+vn -0.1632 0.7795 0.6047
+vn 0.0152 0.8024 0.5965
+vn -0.1369 0.6546 0.7434
+vn 0.0376 0.6746 0.7372
+vn -0.4082 0.8722 0.2696
+vn -0.3704 0.8171 0.4418
+vn -0.3300 0.7321 0.5958
+vn -0.2997 0.6167 0.7279
+vn -0.5710 0.7740 0.2734
+vn -0.5278 0.7295 0.4349
+vn -0.4762 0.6657 0.5745
+vn -0.4384 0.5679 0.6966
+vn -0.7093 0.6476 0.2781
+vn -0.6608 0.6123 0.4339
+vn -0.6016 0.5660 0.5636
+vn -0.5435 0.5190 0.6597
+vn 0.1640 0.9611 0.2222
+vn 0.3517 0.9161 0.1923
+vn 0.5236 0.8364 0.1619
+vn 0.6748 0.7252 0.1368
+vn 0.1788 0.8966 0.4050
+vn 0.3571 0.8585 0.3681
+vn 0.5199 0.7884 0.3286
+vn 0.6635 0.6857 0.2992
+vn 0.1932 0.7995 0.5687
+vn 0.3596 0.7706 0.5261
+vn 0.5058 0.7201 0.4750
+vn 0.6376 0.6340 0.4376
+vn 0.2112 0.6737 0.7081
+vn 0.3710 0.6534 0.6598
+vn 0.5054 0.6194 0.6007
+vn 0.6060 0.5815 0.5427
+vn 0.1077 -0.0454 0.9931
+vn 0.3043 -0.0338 0.9520
+vn 0.2880 0.1627 0.9437
+vn 0.0946 0.1552 0.9833
+vn 0.2637 0.3510 0.8985
+vn 0.0780 0.3472 0.9345
+vn 0.2362 0.5229 0.8190
+vn 0.0588 0.5219 0.8509
+vn 0.4862 -0.0210 0.8736
+vn 0.4677 0.1668 0.8680
+vn 0.4365 0.3460 0.8305
+vn 0.4001 0.5097 0.7616
+vn 0.6455 -0.0077 0.7637
+vn 0.6258 0.1710 0.7610
+vn 0.5891 0.3388 0.7335
+vn 0.5418 0.4868 0.6852
+vn 0.7784 0.0056 0.6277
+vn 0.7577 0.1798 0.6273
+vn 0.7160 0.3414 0.6089
+vn 0.6614 0.4784 0.5777
+vn -0.1026 0.1419 0.9845
+vn -0.0936 -0.0551 0.9941
+vn -0.2938 0.1262 0.9475
+vn -0.2888 -0.0626 0.9553
+vn -0.4707 0.1125 0.8751
+vn -0.4688 -0.0675 0.8807
+vn -0.6281 0.1058 0.7709
+vn -0.6286 -0.0698 0.7746
+vn -0.1104 0.3310 0.9371
+vn -0.2921 0.3071 0.9057
+vn -0.4600 0.2828 0.8417
+vn -0.6095 0.2705 0.7452
+vn -0.1205 0.5037 0.8554
+vn -0.2901 0.4725 0.8322
+vn -0.4410 0.4339 0.7856
+vn -0.5783 0.4115 0.7044
+vn -0.0812 -0.2501 0.9648
+vn 0.1163 -0.2440 0.9627
+vn -0.0688 -0.4331 0.8987
+vn 0.1202 -0.4304 0.8946
+vn -0.0605 -0.5966 0.8002
+vn 0.1195 -0.5963 0.7938
+vn -0.0612 -0.7363 0.6738
+vn 0.1144 -0.7376 0.6655
+vn -0.2734 -0.2493 0.9290
+vn -0.2524 -0.4241 0.8697
+vn -0.2330 -0.5804 0.7803
+vn -0.2276 -0.7138 0.6623
+vn -0.4515 -0.2455 0.8578
+vn -0.4228 -0.4099 0.8082
+vn -0.3880 -0.5524 0.7378
+vn -0.3716 -0.6763 0.6360
+vn -0.6097 -0.2435 0.7543
+vn -0.5740 -0.4026 0.7130
+vn -0.5282 -0.5357 0.6589
+vn -0.4821 -0.6346 0.6040
+vn 0.3090 -0.2288 0.9231
+vn 0.4874 -0.2078 0.8481
+vn 0.6441 -0.1859 0.7419
+vn 0.7752 -0.1684 0.6088
+vn 0.3047 -0.4123 0.8586
+vn 0.4750 -0.3837 0.7919
+vn 0.6249 -0.3520 0.6968
+vn 0.7500 -0.3297 0.5733
+vn 0.2953 -0.5764 0.7619
+vn 0.4558 -0.5413 0.7065
+vn 0.5930 -0.4972 0.6333
+vn 0.7097 -0.4664 0.5280
+vn 0.2861 -0.7161 0.6366
+vn 0.4416 -0.6751 0.5909
+vn 0.5704 -0.6224 0.5359
+vn 0.6654 -0.5695 0.4826
+vn 0.0542 -0.9973 -0.0498
+vn 0.2514 -0.9654 -0.0691
+vn 0.2676 -0.9552 0.1260
+vn 0.0746 -0.9860 0.1489
+vn 0.2763 -0.9084 0.3138
+vn 0.0917 -0.9362 0.3394
+vn 0.2809 -0.8277 0.4858
+vn 0.1051 -0.8519 0.5131
+vn 0.4358 -0.8960 -0.0854
+vn 0.4480 -0.8882 0.1015
+vn 0.4480 -0.8486 0.2814
+vn 0.4420 -0.7779 0.4466
+vn 0.5996 -0.7943 -0.0981
+vn 0.6087 -0.7893 0.0801
+vn 0.6009 -0.7593 0.2497
+vn 0.5806 -0.7084 0.4013
+vn 0.7389 -0.6652 -0.1071
+vn 0.7459 -0.6626 0.0669
+vn 0.7315 -0.6413 0.2314
+vn 0.7013 -0.6072 0.3734
+vn -0.1218 -0.9785 0.1664
+vn -0.1455 -0.9889 -0.0284
+vn -0.3113 -0.9330 0.1802
+vn -0.3375 -0.9413 -0.0061
+vn -0.4851 -0.8528 0.1933
+vn -0.5127 -0.8584 0.0160
+vn -0.6374 -0.7413 0.2101
+vn -0.6663 -0.7447 0.0371
+vn -0.0966 -0.9306 0.3529
+vn -0.2783 -0.8915 0.3575
+vn -0.4455 -0.8201 0.3591
+vn -0.5914 -0.7168 0.3694
+vn -0.0746 -0.8487 0.5235
+vn -0.2462 -0.8183 0.5195
+vn -0.3997 -0.7652 0.5047
+vn -0.5360 -0.6776 0.5035
+vn -0.1640 -0.9611 -0.2222
+vn 0.0317 -0.9686 -0.2467
+vn -0.1788 -0.8966 -0.4050
+vn 0.0082 -0.9020 -0.4316
+vn -0.1932 -0.7995 -0.5687
+vn -0.0152 -0.8024 -0.5965
+vn -0.2112 -0.6737 -0.7081
+vn -0.0376 -0.6746 -0.7372
+vn -0.3517 -0.9161 -0.1923
+vn -0.3571 -0.8585 -0.3681
+vn -0.3596 -0.7706 -0.5261
+vn -0.3710 -0.6534 -0.6598
+vn -0.5236 -0.8364 -0.1619
+vn -0.5199 -0.7884 -0.3286
+vn -0.5058 -0.7201 -0.4750
+vn -0.5054 -0.6194 -0.6007
+vn -0.6748 -0.7252 -0.1368
+vn -0.6635 -0.6857 -0.2992
+vn -0.6376 -0.6340 -0.4376
+vn -0.6060 -0.5815 -0.5427
+vn 0.2257 -0.9383 -0.2618
+vn 0.4082 -0.8722 -0.2696
+vn 0.5710 -0.7740 -0.2734
+vn 0.7093 -0.6476 -0.2781
+vn 0.1946 -0.8752 -0.4428
+vn 0.3704 -0.8171 -0.4418
+vn 0.5278 -0.7295 -0.4349
+vn 0.6608 -0.6123 -0.4339
+vn 0.1632 -0.7795 -0.6047
+vn 0.3300 -0.7321 -0.5958
+vn 0.4762 -0.6657 -0.5745
+vn 0.6016 -0.5660 -0.5636
+vn 0.1369 -0.6546 -0.7434
+vn 0.2997 -0.6167 -0.7279
+vn 0.4384 -0.5679 -0.6966
+vn 0.5435 -0.5190 -0.6597
+vn -0.1077 0.0454 -0.9931
+vn 0.0936 0.0551 -0.9941
+vn 0.1026 -0.1419 -0.9845
+vn -0.0946 -0.1552 -0.9833
+vn 0.1104 -0.3310 -0.9371
+vn -0.0780 -0.3472 -0.9345
+vn 0.1205 -0.5037 -0.8554
+vn -0.0588 -0.5219 -0.8509
+vn 0.2888 0.0626 -0.9553
+vn 0.2938 -0.1262 -0.9475
+vn 0.2921 -0.3071 -0.9057
+vn 0.2901 -0.4725 -0.8322
+vn 0.4688 0.0675 -0.8807
+vn 0.4707 -0.1125 -0.8751
+vn 0.4600 -0.2828 -0.8417
+vn 0.4410 -0.4339 -0.7856
+vn 0.6286 0.0698 -0.7746
+vn 0.6281 -0.1058 -0.7709
+vn 0.6095 -0.2705 -0.7452
+vn 0.5783 -0.4115 -0.7044
+vn -0.2880 -0.1627 -0.9437
+vn -0.3043 0.0338 -0.9520
+vn -0.4677 -0.1668 -0.8680
+vn -0.4862 0.0210 -0.8736
+vn -0.6258 -0.1710 -0.7610
+vn -0.6455 0.0077 -0.7637
+vn -0.7577 -0.1798 -0.6273
+vn -0.7784 -0.0056 -0.6277
+vn -0.2637 -0.3510 -0.8985
+vn -0.4365 -0.3460 -0.8305
+vn -0.5891 -0.3388 -0.7335
+vn -0.7160 -0.3414 -0.6089
+vn -0.2362 -0.5229 -0.8190
+vn -0.4001 -0.5097 -0.7616
+vn -0.5418 -0.4868 -0.6852
+vn -0.6614 -0.4784 -0.5777
+vn -0.3090 0.2288 -0.9231
+vn -0.1163 0.2440 -0.9627
+vn -0.3047 0.4123 -0.8586
+vn -0.1202 0.4304 -0.8946
+vn -0.2953 0.5764 -0.7619
+vn -0.1195 0.5963 -0.7938
+vn -0.4874 0.2078 -0.8481
+vn -0.4750 0.3837 -0.7919
+vn -0.4558 0.5413 -0.7065
+vn -0.6441 0.1859 -0.7419
+vn -0.6249 0.3520 -0.6968
+vn -0.5930 0.4972 -0.6333
+vn -0.7752 0.1684 -0.6088
+vn -0.7500 0.3297 -0.5733
+vn -0.7097 0.4664 -0.5280
+vn 0.0812 0.2501 -0.9648
+vn 0.2734 0.2493 -0.9290
+vn 0.4515 0.2455 -0.8578
+vn 0.6097 0.2435 -0.7543
+vn 0.0688 0.4331 -0.8987
+vn 0.2524 0.4241 -0.8697
+vn 0.4228 0.4099 -0.8082
+vn 0.5740 0.4026 -0.7130
+vn 0.0605 0.5966 -0.8002
+vn 0.2330 0.5804 -0.7803
+vn 0.3880 0.5524 -0.7378
+vn 0.5282 0.5357 -0.6589
+vn 0.9933 0.0532 -0.1021
+vn 0.9637 0.2514 -0.0902
+vn 0.9656 0.2377 0.1056
+vn 0.9943 0.0431 0.0974
+vn 0.9302 0.2180 0.2952
+vn 0.9563 0.0314 0.2907
+vn 0.8600 0.1969 0.4707
+vn 0.8830 0.0187 0.4690
+vn 0.8960 0.4376 -0.0749
+vn 0.8999 0.4212 0.1125
+vn 0.8712 0.3939 0.2930
+vn 0.8103 0.3632 0.4599
+vn 0.7953 0.6035 -0.0569
+vn 0.8015 0.5854 0.1215
+vn 0.7818 0.5518 0.2904
+vn 0.7397 0.5086 0.4406
+vn 0.9845 -0.1527 0.0859
+vn 0.9831 -0.1466 -0.1099
+vn 0.9374 -0.3402 0.0741
+vn 0.9343 -0.3379 -0.1132
+vn 0.8566 -0.5117 0.0662
+vn 0.8514 -0.5123 -0.1122
+vn 0.9484 -0.1559 0.2759
+vn 0.9071 -0.3344 0.2555
+vn 0.8345 -0.4977 0.2365
+vn 0.8776 -0.1596 0.4520
+vn 0.8447 -0.3269 0.4237
+vn 0.7893 -0.4746 0.3895
+vn 0.9438 -0.1352 -0.3017
+vn 0.9526 0.0612 -0.2979
+vn 0.8686 -0.1216 -0.4802
+vn 0.8748 0.0667 -0.4798
+vn 0.7620 -0.1101 -0.6381
+vn 0.7651 0.0696 -0.6401
+vn 0.8984 -0.3237 -0.2968
+vn 0.8308 -0.3021 -0.4673
+vn 0.7342 -0.2802 -0.6183
+vn 0.8193 -0.4962 -0.2872
+vn 0.7621 -0.4675 -0.4479
+vn 0.6858 -0.4313 -0.5862
+vn 0.9244 0.2557 -0.2828
+vn 0.8603 0.4386 -0.2598
+vn 0.7635 0.6020 -0.2337
+vn 0.8498 0.2531 -0.4624
+vn 0.7938 0.4277 -0.4324
+vn 0.7080 0.5838 -0.3972
+vn 0.7436 0.2474 -0.6211
+vn 0.6984 0.4117 -0.5853
+vn 0.6344 0.5542 -0.5389
+vn -0.9933 -0.0532 0.1021
+vn -0.9637 -0.2514 0.0902
+vn -0.9244 -0.2557 0.2828
+vn -0.9526 -0.0612 0.2979
+vn -0.8498 -0.2531 0.4624
+vn -0.8748 -0.0667 0.4798
+vn -0.7436 -0.2474 0.6211
+vn -0.7651 -0.0696 0.6401
+vn -0.8960 -0.4376 0.0749
+vn -0.8603 -0.4386 0.2598
+vn -0.7938 -0.4277 0.4324
+vn -0.6984 -0.4117 0.5853
+vn -0.7953 -0.6035 0.0569
+vn -0.7635 -0.6020 0.2337
+vn -0.7080 -0.5838 0.3972
+vn -0.6344 -0.5542 0.5389
+vn -0.9438 0.1352 0.3017
+vn -0.9831 0.1466 0.1099
+vn -0.8984 0.3237 0.2968
+vn -0.9343 0.3379 0.1132
+vn -0.8193 0.4962 0.2872
+vn -0.8514 0.5123 0.1122
+vn -0.8686 0.1216 0.4802
+vn -0.8308 0.3021 0.4673
+vn -0.7621 0.4675 0.4479
+vn -0.7620 0.1101 0.6381
+vn -0.7342 0.2802 0.6183
+vn -0.6858 0.4313 0.5862
+vn -0.9845 0.1527 -0.0859
+vn -0.9943 -0.0431 -0.0974
+vn -0.9484 0.1559 -0.2759
+vn -0.9563 -0.0314 -0.2907
+vn -0.8776 0.1596 -0.4520
+vn -0.8830 -0.0187 -0.4690
+vn -0.9374 0.3402 -0.0741
+vn -0.9071 0.3344 -0.2555
+vn -0.8447 0.3269 -0.4237
+vn -0.8566 0.5117 -0.0662
+vn -0.8345 0.4977 -0.2365
+vn -0.7893 0.4746 -0.3895
+vn -0.9656 -0.2377 -0.1056
+vn -0.8999 -0.4212 -0.1125
+vn -0.8015 -0.5854 -0.1215
+vn -0.9302 -0.2180 -0.2952
+vn -0.8712 -0.3939 -0.2930
+vn -0.7818 -0.5518 -0.2904
+vn -0.8600 -0.1969 -0.4707
+vn -0.8103 -0.3632 -0.4599
+vn -0.7397 -0.5086 -0.4406
+f 1/1/1 11/2/2 14/3/3 2/4/4
+f 2/4/4 14/3/3 15/5/5 3/6/6
+f 3/6/6 15/5/5 16/7/7 4/8/8
+f 4/8/8 16/7/7 304/9/9 305/10/10
+f 11/2/2 12/11/11 17/12/12 14/3/3
+f 14/3/3 17/12/12 18/13/13 15/5/5
+f 15/5/5 18/13/13 19/14/14 16/7/7
+f 16/7/7 19/14/14 303/15/15 304/9/9
+f 12/11/11 13/16/16 20/17/17 17/12/12
+f 17/12/12 20/17/17 21/18/18 18/13/13
+f 18/13/13 21/18/18 22/19/19 19/14/14
+f 19/14/14 22/19/19 302/20/20 303/15/15
+f 13/16/16 298/21/21 299/22/22 20/17/17
+f 20/17/17 299/22/22 300/23/23 21/18/18
+f 21/18/18 300/23/23 301/24/24 22/19/19
+f 22/19/19 301/24/24 379/25/25 302/20/20
+f 1/1/1 2/4/4 23/26/26 5/27/27
+f 5/27/27 23/26/26 24/28/28 6/29/29
+f 6/29/29 24/28/28 25/30/30 7/31/31
+f 7/31/31 25/30/30 311/32/32 312/33/33
+f 2/4/4 3/6/6 26/34/34 23/26/26
+f 23/26/26 26/34/34 27/35/35 24/28/28
+f 24/28/28 27/35/35 28/36/36 25/30/30
+f 25/30/30 28/36/36 310/37/37 311/32/32
+f 3/6/6 4/8/8 29/38/38 26/34/34
+f 26/34/34 29/38/38 30/39/39 27/35/35
+f 27/35/35 30/39/39 31/40/40 28/36/36
+f 28/36/36 31/40/40 309/41/41 310/37/37
+f 4/8/8 305/10/10 306/42/42 29/38/38
+f 29/38/38 306/42/42 307/43/43 30/39/39
+f 30/39/39 307/43/43 308/44/44 31/40/40
+f 31/40/40 308/44/44 380/45/45 309/41/41
+f 1/1/1 5/27/27 32/46/46 8/47/47
+f 8/47/47 32/46/46 33/48/48 9/49/49
+f 9/49/49 33/48/48 34/50/50 10/51/51
+f 10/51/51 34/50/50 318/52/52 319/53/53
+f 5/27/27 6/29/29 35/54/54 32/46/46
+f 32/46/46 35/54/54 36/55/55 33/48/48
+f 33/48/48 36/55/55 37/56/56 34/50/50
+f 34/50/50 37/56/56 317/57/57 318/52/52
+f 6/29/29 7/31/31 38/58/58 35/54/54
+f 35/54/54 38/58/58 39/59/59 36/55/55
+f 36/55/55 39/59/59 40/60/60 37/56/56
+f 37/56/56 40/60/60 316/61/61 317/57/57
+f 7/31/31 312/33/33 313/62/62 38/58/58
+f 38/58/58 313/62/62 314/63/63 39/59/59
+f 39/59/59 314/63/63 315/64/64 40/60/60
+f 40/60/60 315/64/64 382/65/65 316/61/61
+f 1/1/1 8/47/47 41/66/66 11/2/2
+f 11/2/2 41/66/66 42/67/67 12/11/11
+f 12/11/11 42/67/67 43/68/68 13/16/16
+f 13/16/16 43/68/68 297/69/69 298/21/21
+f 8/47/47 9/49/49 44/70/70 41/66/66
+f 41/66/66 44/70/70 45/71/71 42/67/67
+f 42/67/67 45/71/71 46/72/72 43/68/68
+f 43/68/68 46/72/72 296/73/73 297/69/69
+f 9/49/49 10/51/51 47/74/74 44/70/70
+f 44/70/70 47/74/74 48/75/75 45/71/71
+f 45/71/71 48/75/75 49/76/76 46/72/72
+f 46/72/72 49/76/76 295/77/77 296/73/73
+f 10/51/51 319/53/53 320/78/78 47/74/74
+f 47/74/74 320/78/78 321/79/79 48/75/75
+f 48/75/75 321/79/79 322/80/80 49/76/76
+f 49/76/76 322/80/80 381/81/81 295/77/77
+f 50/82/82 60/83/83 63/84/84 51/85/85
+f 51/85/85 63/84/84 64/86/86 52/87/87
+f 52/87/87 64/86/86 65/88/88 53/89/89
+f 53/89/89 65/88/88 320/78/78 319/53/53
+f 60/83/83 61/90/90 66/91/91 63/84/84
+f 63/84/84 66/91/91 67/92/92 64/86/86
+f 64/86/86 67/92/92 68/93/93 65/88/88
+f 65/88/88 68/93/93 321/79/79 320/78/78
+f 61/90/90 62/94/94 69/95/95 66/91/91
+f 66/91/91 69/95/95 70/96/96 67/92/92
+f 67/92/92 70/96/96 71/97/97 68/93/93
+f 68/93/93 71/97/97 322/80/80 321/79/79
+f 62/94/94 326/98/98 327/99/99 69/95/95
+f 69/95/95 327/99/99 328/100/100 70/96/96
+f 70/96/96 328/100/100 329/101/101 71/97/97
+f 71/97/97 329/101/101 381/81/81 322/80/80
+f 50/82/82 51/85/85 72/102/102 54/103/103
+f 54/103/103 72/102/102 73/104/104 55/105/105
+f 55/105/105 73/104/104 74/106/106 56/107/107
+f 56/107/107 74/106/106 332/108/108 333/109/109
+f 51/85/85 52/87/87 75/110/110 72/102/102
+f 72/102/102 75/110/110 76/111/111 73/104/104
+f 73/104/104 76/111/111 77/112/112 74/106/106
+f 74/106/106 77/112/112 331/113/113 332/108/108
+f 52/87/87 53/89/89 78/114/114 75/110/110
+f 75/110/110 78/114/114 79/115/115 76/111/111
+f 76/111/111 79/115/115 80/116/116 77/112/112
+f 77/112/112 80/116/116 330/117/117 331/113/113
+f 53/89/89 319/53/53 318/52/52 78/114/114
+f 78/114/114 318/52/52 317/57/57 79/115/115
+f 79/115/115 317/57/57 316/61/61 80/116/116
+f 80/116/116 316/61/61 382/65/65 330/117/117
+f 50/82/82 54/103/103 81/118/118 57/119/119
+f 57/119/119 81/118/118 82/120/120 58/121/121
+f 58/121/121 82/120/120 83/122/122 59/123/123
+f 59/123/123 83/122/122 339/124/124 340/125/125
+f 54/103/103 55/105/105 84/126/126 81/118/118
+f 81/118/118 84/126/126 85/127/127 82/120/120
+f 82/120/120 85/127/127 86/128/128 83/122/122
+f 83/122/122 86/128/128 338/129/129 339/124/124
+f 55/105/105 56/107/107 87/130/130 84/126/126
+f 84/126/126 87/130/130 88/131/131 85/127/127
+f 85/127/127 88/131/131 89/132/132 86/128/128
+f 86/128/128 89/132/132 337/133/133 338/129/129
+f 56/107/107 333/109/109 334/134/134 87/130/130
+f 87/130/130 334/134/134 335/135/135 88/131/131
+f 88/131/131 335/135/135 336/136/136 89/132/132
+f 89/132/132 336/136/136 386/137/137 337/133/133
+f 50/82/82 57/119/119 90/138/138 60/83/83
+f 60/83/83 90/138/138 91/139/139 61/90/90
+f 61/90/90 91/139/139 92/140/140 62/94/94
+f 62/94/94 92/140/140 325/141/141 326/98/98
+f 57/119/119 58/121/121 93/142/142 90/138/138
+f 90/138/138 93/142/142 94/143/143 91/139/139
+f 91/139/139 94/143/143 95/144/144 92/140/140
+f 92/140/140 95/144/144 324/145/145 325/141/141
+f 58/121/121 59/123/123 96/146/146 93/142/142
+f 93/142/142 96/146/146 97/147/147 94/143/143
+f 94/143/143 97/147/147 98/148/148 95/144/144
+f 95/144/144 98/148/148 323/149/149 324/145/145
+f 59/123/123 340/125/125 341/150/150 96/146/146
+f 96/146/146 341/150/150 342/151/151 97/147/147
+f 97/147/147 342/151/151 343/152/152 98/148/148
+f 98/148/148 343/152/152 385/153/153 323/149/149
+f 99/154/154 109/155/155 112/156/156 100/157/157
+f 100/157/157 112/156/156 113/158/158 101/159/159
+f 101/159/159 113/158/158 114/160/160 102/161/161
+f 102/161/161 114/160/160 341/150/150 340/125/125
+f 109/155/155 110/162/162 115/163/163 112/156/156
+f 112/156/156 115/163/163 116/164/164 113/158/158
+f 113/158/158 116/164/164 117/165/165 114/160/160
+f 114/160/160 117/165/165 342/151/151 341/150/150
+f 110/162/162 111/166/166 118/167/167 115/163/163
+f 115/163/163 118/167/167 119/168/168 116/164/164
+f 116/164/164 119/168/168 120/169/169 117/165/165
+f 117/165/165 120/169/169 343/152/152 342/151/151
+f 111/166/166 347/170/170 348/171/171 118/167/167
+f 118/167/167 348/171/171 349/172/172 119/168/168
+f 119/168/168 349/172/172 350/173/173 120/169/169
+f 120/169/169 350/173/173 385/153/153 343/152/152
+f 99/154/154 100/157/157 121/174/174 103/175/175
+f 103/175/175 121/174/174 122/176/176 104/177/177
+f 104/177/177 122/176/176 123/178/178 105/179/179
+f 105/179/179 123/178/178 353/180/180 354/181/181
+f 100/157/157 101/159/159 124/182/182 121/174/174
+f 121/174/174 124/182/182 125/183/183 122/176/176
+f 122/176/176 125/183/183 126/184/184 123/178/178
+f 123/178/178 126/184/184 352/185/185 353/180/180
+f 101/159/159 102/161/161 127/186/186 124/182/182
+f 124/182/182 127/186/186 128/187/187 125/183/183
+f 125/183/183 128/187/187 129/188/188 126/184/184
+f 126/184/184 129/188/188 351/189/189 352/185/185
+f 102/161/161 340/125/125 339/124/124 127/186/186
+f 127/186/186 339/124/124 338/129/129 128/187/187
+f 128/187/187 338/129/129 337/133/133 129/188/188
+f 129/188/188 337/133/133 386/137/137 351/189/189
+f 99/154/154 103/175/175 130/190/190 106/191/191
+f 106/191/191 130/190/190 131/192/192 107/193/193
+f 107/193/193 131/192/192 132/194/194 108/195/195
+f 108/195/195 132/194/194 360/196/196 361/197/197
+f 103/175/175 104/177/177 133/198/198 130/190/190
+f 130/190/190 133/198/198 134/199/199 131/192/192
+f 131/192/192 134/199/199 135/200/200 132/194/194
+f 132/194/194 135/200/200 359/201/201 360/196/196
+f 104/177/177 105/179/179 136/202/202 133/198/198
+f 133/198/198 136/202/202 137/203/203 134/199/199
+f 134/199/199 137/203/203 138/204/204 135/200/200
+f 135/200/200 138/204/204 358/205/205 359/201/201
+f 105/179/179 354/181/181 355/206/206 136/202/202
+f 136/202/202 355/206/206 356/207/207 137/203/203
+f 137/203/203 356/207/207 357/208/208 138/204/204
+f 138/204/204 357/208/208 384/209/209 358/205/205
+f 99/154/154 106/191/191 139/210/210 109/155/155
+f 109/155/155 139/210/210 140/211/211 110/162/162
+f 110/162/162 140/211/211 141/212/212 111/166/166
+f 111/166/166 141/212/212 346/213/213 347/170/170
+f 106/191/191 107/193/193 142/214/214 139/210/210
+f 139/210/210 142/214/214 143/215/215 140/211/211
+f 140/211/211 143/215/215 144/216/216 141/212/212
+f 141/212/212 144/216/216 345/217/217 346/213/213
+f 107/193/193 108/195/195 145/218/218 142/214/214
+f 142/214/214 145/218/218 146/219/219 143/215/215
+f 143/215/215 146/219/219 147/220/220 144/216/216
+f 144/216/216 147/220/220 344/221/221 345/217/217
+f 108/195/195 361/197/197 362/222/222 145/218/218
+f 145/218/218 362/222/222 363/223/223 146/219/219
+f 146/219/219 363/223/223 364/224/224 147/220/220
+f 147/220/220 364/224/224 383/225/225 344/221/221
+f 148/226/226 158/227/227 161/228/228 149/229/229
+f 149/229/229 161/228/228 162/230/230 150/231/231
+f 150/231/231 162/230/230 163/232/232 151/233/233
+f 151/233/233 163/232/232 362/234/222 361/235/197
+f 158/227/227 159/236/234 164/237/235 161/228/228
+f 161/228/228 164/237/235 165/238/236 162/230/230
+f 162/230/230 165/238/236 166/239/237 163/232/232
+f 163/232/232 166/239/237 363/240/223 362/234/222
+f 159/236/234 160/241/238 167/242/239 164/237/235
+f 164/237/235 167/242/239 168/243/240 165/238/236
+f 165/238/236 168/243/240 169/244/241 166/239/237
+f 166/239/237 169/244/241 364/245/224 363/240/223
+f 160/241/238 368/246/242 369/247/243 167/242/239
+f 167/242/239 369/247/243 370/248/244 168/243/240
+f 168/243/240 370/248/244 371/249/245 169/244/241
+f 169/244/241 371/249/245 383/250/225 364/245/224
+f 148/226/226 149/229/229 170/251/246 152/252/247
+f 152/252/247 170/251/246 171/253/248 153/254/249
+f 153/254/249 171/253/248 172/255/250 154/256/251
+f 154/256/251 172/255/250 374/257/252 375/258/253
+f 149/229/229 150/231/231 173/259/254 170/251/246
+f 170/251/246 173/259/254 174/260/255 171/253/248
+f 171/253/248 174/260/255 175/261/256 172/255/250
+f 172/255/250 175/261/256 373/262/257 374/257/252
+f 150/231/231 151/233/233 176/263/258 173/259/254
+f 173/259/254 176/263/258 177/264/259 174/260/255
+f 174/260/255 177/264/259 178/265/260 175/261/256
+f 175/261/256 178/265/260 372/266/261 373/262/257
+f 151/233/233 361/235/197 360/267/196 176/263/258
+f 176/263/258 360/267/196 359/268/201 177/264/259
+f 177/264/259 359/268/201 358/269/205 178/265/260
+f 178/265/260 358/269/205 384/270/209 372/266/261
+f 148/226/226 152/252/247 179/271/262 155/272/263
+f 155/272/263 179/271/262 180/273/264 156/274/265
+f 156/274/265 180/273/264 181/275/266 157/276/267
+f 157/276/267 181/275/266 306/277/42 305/278/10
+f 152/252/247 153/254/249 182/279/268 179/271/262
+f 179/271/262 182/279/268 183/280/269 180/273/264
+f 180/273/264 183/280/269 184/281/270 181/275/266
+f 181/275/266 184/281/270 307/282/43 306/277/42
+f 153/254/249 154/256/251 185/283/271 182/279/268
+f 182/279/268 185/283/271 186/284/272 183/280/269
+f 183/280/269 186/284/272 187/285/273 184/281/270
+f 184/281/270 187/285/273 308/286/44 307/282/43
+f 154/256/251 375/258/253 376/287/274 185/283/271
+f 185/283/271 376/287/274 377/288/275 186/284/272
+f 186/284/272 377/288/275 378/289/276 187/285/273
+f 187/285/273 378/289/276 380/290/45 308/286/44
+f 148/226/226 155/272/263 188/291/277 158/227/227
+f 158/227/227 188/291/277 189/292/278 159/236/234
+f 159/236/234 189/292/278 190/293/279 160/241/238
+f 160/241/238 190/293/279 367/294/280 368/246/242
+f 155/272/263 156/274/265 191/295/281 188/291/277
+f 188/291/277 191/295/281 192/296/282 189/292/278
+f 189/292/278 192/296/282 193/297/283 190/293/279
+f 190/293/279 193/297/283 366/298/284 367/294/280
+f 156/274/265 157/276/267 194/299/285 191/295/281
+f 191/295/281 194/299/285 195/300/286 192/296/282
+f 192/296/282 195/300/286 196/301/287 193/297/283
+f 193/297/283 196/301/287 365/302/288 366/298/284
+f 157/276/267 305/278/10 304/303/9 194/299/285
+f 194/299/285 304/303/9 303/304/15 195/300/286
+f 195/300/286 303/304/15 302/305/20 196/301/287
+f 196/301/287 302/305/20 379/306/25 365/302/288
+f 197/307/289 207/308/290 210/309/291 198/310/292
+f 198/310/292 210/309/291 211/311/293 199/312/294
+f 199/312/294 211/311/293 212/313/295 200/314/296
+f 200/314/296 212/313/295 327/99/99 326/98/98
+f 207/308/290 208/315/297 213/316/298 210/309/291
+f 210/309/291 213/316/298 214/317/299 211/311/293
+f 211/311/293 214/317/299 215/318/300 212/313/295
+f 212/313/295 215/318/300 328/100/100 327/99/99
+f 208/315/297 209/319/301 216/320/302 213/316/298
+f 213/316/298 216/320/302 217/321/303 214/317/299
+f 214/317/299 217/321/303 218/322/304 215/318/300
+f 215/318/300 218/322/304 329/101/101 328/100/100
+f 209/319/301 298/323/21 297/324/69 216/320/302
+f 216/320/302 297/324/69 296/325/73 217/321/303
+f 217/321/303 296/325/73 295/326/77 218/322/304
+f 218/322/304 295/326/77 381/81/81 329/101/101
+f 197/307/289 198/310/292 219/327/305 201/328/306
+f 201/328/306 219/327/305 220/329/307 202/330/308
+f 202/330/308 220/329/307 221/331/309 203/332/310
+f 203/332/310 221/331/309 348/333/171 347/334/170
+f 198/310/292 199/312/294 222/335/311 219/327/305
+f 219/327/305 222/335/311 223/336/312 220/329/307
+f 220/329/307 223/336/312 224/337/313 221/331/309
+f 221/331/309 224/337/313 349/338/172 348/333/171
+f 199/312/294 200/314/296 225/339/314 222/335/311
+f 222/335/311 225/339/314 226/340/315 223/336/312
+f 223/336/312 226/340/315 227/341/316 224/337/313
+f 224/337/313 227/341/316 350/342/173 349/338/172
+f 200/314/296 326/98/98 325/141/141 225/339/314
+f 225/339/314 325/141/141 324/145/145 226/340/315
+f 226/340/315 324/145/145 323/149/149 227/341/316
+f 227/341/316 323/149/149 385/153/153 350/342/173
+f 197/307/289 201/328/306 228/343/317 204/344/318
+f 204/344/318 228/343/317 229/345/319 205/346/320
+f 205/346/320 229/345/319 230/347/321 206/348/322
+f 206/348/322 230/347/321 369/247/243 368/246/242
+f 201/328/306 202/330/308 231/349/323 228/343/317
+f 228/343/317 231/349/323 232/350/324 229/345/319
+f 229/345/319 232/350/324 233/351/325 230/347/321
+f 230/347/321 233/351/325 370/248/244 369/247/243
+f 202/330/308 203/332/310 234/352/326 231/349/323
+f 231/349/323 234/352/326 235/353/327 232/350/324
+f 232/350/324 235/353/327 236/354/328 233/351/325
+f 233/351/325 236/354/328 371/249/245 370/248/244
+f 203/332/310 347/334/170 346/355/213 234/352/326
+f 234/352/326 346/355/213 345/356/217 235/353/327
+f 235/353/327 345/356/217 344/357/221 236/354/328
+f 236/354/328 344/357/221 383/250/225 371/249/245
+f 197/307/289 204/344/318 237/358/329 207/308/290
+f 207/308/290 237/358/329 238/359/330 208/315/297
+f 208/315/297 238/359/330 239/360/331 209/319/301
+f 209/319/301 239/360/331 299/361/22 298/323/21
+f 204/344/318 205/346/320 240/362/332 237/358/329
+f 237/358/329 240/362/332 241/363/333 238/359/330
+f 238/359/330 241/363/333 242/364/334 239/360/331
+f 239/360/331 242/364/334 300/365/23 299/361/22
+f 205/346/320 206/348/322 243/366/335 240/362/332
+f 240/362/332 243/366/335 244/367/336 241/363/333
+f 241/363/333 244/367/336 245/368/337 242/364/334
+f 242/364/334 245/368/337 301/369/24 300/365/23
+f 206/348/322 368/246/242 367/294/280 243/366/335
+f 243/366/335 367/294/280 366/298/284 244/367/336
+f 244/367/336 366/298/284 365/302/288 245/368/337
+f 245/368/337 365/302/288 379/306/25 301/369/24
+f 246/370/338 256/371/339 259/372/340 247/373/341
+f 247/373/341 259/372/340 260/374/342 248/375/343
+f 248/375/343 260/374/342 261/376/344 249/377/345
+f 249/377/345 261/376/344 334/134/134 333/109/109
+f 256/371/339 257/378/346 262/379/347 259/372/340
+f 259/372/340 262/379/347 263/380/348 260/374/342
+f 260/374/342 263/380/348 264/381/349 261/376/344
+f 261/376/344 264/381/349 335/135/135 334/134/134
+f 257/378/346 258/382/350 265/383/351 262/379/347
+f 262/379/347 265/383/351 266/384/352 263/380/348
+f 263/380/348 266/384/352 267/385/353 264/381/349
+f 264/381/349 267/385/353 336/136/136 335/135/135
+f 258/382/350 354/386/181 353/387/180 265/383/351
+f 265/383/351 353/387/180 352/388/185 266/384/352
+f 266/384/352 352/388/185 351/389/189 267/385/353
+f 267/385/353 351/389/189 386/137/137 336/136/136
+f 246/370/338 247/373/341 268/390/354 250/391/355
+f 250/391/355 268/390/354 269/392/356 251/393/357
+f 251/393/357 269/392/356 270/394/358 252/395/359
+f 252/395/359 270/394/358 313/396/62 312/397/33
+f 247/373/341 248/375/343 271/398/360 268/390/354
+f 268/390/354 271/398/360 272/399/361 269/392/356
+f 269/392/356 272/399/361 273/400/362 270/394/358
+f 270/394/358 273/400/362 314/401/63 313/396/62
+f 248/375/343 249/377/345 274/402/363 271/398/360
+f 271/398/360 274/402/363 275/403/364 272/399/361
+f 272/399/361 275/403/364 276/404/365 273/400/362
+f 273/400/362 276/404/365 315/405/64 314/401/63
+f 249/377/345 333/109/109 332/108/108 274/402/363
+f 274/402/363 332/108/108 331/113/113 275/403/364
+f 275/403/364 331/113/113 330/117/117 276/404/365
+f 276/404/365 330/117/117 382/65/65 315/405/64
+f 246/370/338 250/391/355 277/406/366 253/407/367
+f 253/407/367 277/406/366 278/408/368 254/409/369
+f 254/409/369 278/408/368 279/410/370 255/411/371
+f 255/411/371 279/410/370 376/412/274 375/413/253
+f 250/391/355 251/393/357 280/414/372 277/406/366
+f 277/406/366 280/414/372 281/415/373 278/408/368
+f 278/408/368 281/415/373 282/416/374 279/410/370
+f 279/410/370 282/416/374 377/417/275 376/412/274
+f 251/393/357 252/395/359 283/418/375 280/414/372
+f 280/414/372 283/418/375 284/419/376 281/415/373
+f 281/415/373 284/419/376 285/420/377 282/416/374
+f 282/416/374 285/420/377 378/421/276 377/417/275
+f 252/395/359 312/397/33 311/422/32 283/418/375
+f 283/418/375 311/422/32 310/423/37 284/419/376
+f 284/419/376 310/423/37 309/424/41 285/420/377
+f 285/420/377 309/424/41 380/425/45 378/421/276
+f 246/370/338 253/407/367 286/426/378 256/371/339
+f 256/371/339 286/426/378 287/427/379 257/378/346
+f 257/378/346 287/427/379 288/428/380 258/382/350
+f 258/382/350 288/428/380 355/429/206 354/386/181
+f 253/407/367 254/409/369 289/430/381 286/426/378
+f 286/426/378 289/430/381 290/431/382 287/427/379
+f 287/427/379 290/431/382 291/432/383 288/428/380
+f 288/428/380 291/432/383 356/433/207 355/429/206
+f 254/409/369 255/411/371 292/434/384 289/430/381
+f 289/430/381 292/434/384 293/435/385 290/431/382
+f 290/431/382 293/435/385 294/436/386 291/432/383
+f 291/432/383 294/436/386 357/437/208 356/433/207
+f 255/411/371 375/413/253 374/438/252 292/434/384
+f 292/434/384 374/438/252 373/439/257 293/435/385
+f 293/435/385 373/439/257 372/440/261 294/436/386
+f 294/436/386 372/440/261 384/441/209 357/437/208
binary files /dev/null b/mdl/saturn_diffuse.png differ
binary files /dev/null b/mdl/sol_diffuse.jpg differ
binary files /dev/null b/mdl/venus_diffuse.png differ
--- a/mkfile
+++ b/mkfile
@@ -3,6 +3,7 @@
BIN=$home/bin/$objtype
TARG=\
vis\
+ solar\
OFILES=\
alloc.$O\
--- /dev/null
+++ b/solar.c
@@ -1,0 +1,685 @@
+#include <u.h>
+#include <libc.h>
+#include <bio.h>
+#include <thread.h>
+#include <draw.h>
+#include <memdraw.h>
+#include <mouse.h>
+#include <keyboard.h>
+#include <geometry.h>
+#include "libobj/obj.h"
+#include "libgraphics/graphics.h"
+#include "fns.h"
+
+enum {
+ K↑,
+ K↓,
+ K←,
+ K→,
+ Krise,
+ Kfall,
+ KR↑,
+ KR↓,
+ KR←,
+ KR→,
+ KR↺,
+ KR↻,
+ Kzoomin,
+ Kzoomout,
+ Khud,
+ Ke
+};
+
+enum {
+ Sfov,
+ Scampos,
+ Scambx, Scamby, Scambz,
+ Sfps,
+ Sframes,
+ Se
+};
+
+enum {
+ Cmdwinht = 50,
+ Cmdmargin = 10,
+ Cmdpadding = 3,
+
+ Cmdlookat = 0,
+ Cmdgoto,
+};
+
+typedef struct Planet Planet;
+typedef struct Camcfg Camcfg;
+typedef struct HReq HReq;
+typedef struct Cmdbut Cmdbut;
+typedef struct Cmdbox Cmdbox;
+
+struct Planet
+{
+ int id; /* Horizons API ID */
+ char *name;
+ double scale;
+ Entity *body;
+ Material *mtl;
+};
+
+struct Camcfg
+{
+ Point3 p, lookat, up;
+ double fov, clipn, clipf;
+ int ptype;
+};
+
+struct HReq
+{
+ int pfd[2];
+ int pid; /* planet id */
+ char *t0, *t1; /* start and end times */
+};
+
+struct Cmdbut
+{
+ char *label;
+ Rectangle r;
+ void (*handler)(Cmdbut*, Mousectl*);
+};
+
+struct Cmdbox
+{
+ Rectangle r;
+ Cmdbut *cmds;
+ ulong ncmds;
+};
+
+Rune keys[Ke] = {
+ [K↑] = Kup,
+ [K↓] = Kdown,
+ [K←] = Kleft,
+ [K→] = Kright,
+ [Krise] = Kpgup,
+ [Kfall] = Kpgdown,
+ [KR↑] = 'w',
+ [KR↓] = 's',
+ [KR←] = 'a',
+ [KR→] = 'd',
+ [KR↺] = 'q',
+ [KR↻] = 'e',
+ [Kzoomin] = 'z',
+ [Kzoomout] = 'x',
+ [Khud] = 'h',
+};
+Planet planets[] = {
+ { .id = 10, .name = "Sol", .scale = 100 },
+ { .id = 1, .name = "Mercury", .scale = 0.333333 },
+ { .id = 2, .name = "Venus", .scale = 0.8 },
+ { .id = 399, .name = "Earth", .scale = 1 },
+ { .id = 301, .name = "Luna", .scale = 0.25 },
+ { .id = 4, .name = "Mars", .scale = 0.5 },
+ { .id = 5, .name = "Jupiter", .scale = 11 },
+ { .id = 6, .name = "Saturn", .scale = 9 },
+ { .id = 7, .name = "Uranus", .scale = 4 },
+ { .id = 8, .name = "Neptune", .scale = 3.666666 },
+ { .id = 9, .name = "Pluto", .scale = 0.166666 },
+};
+char stats[Se][256];
+Rectangle viewr, cmdr;
+Cmdbox cmdbox;
+Image *screenb;
+Mousectl *mctl;
+Keyboardctl *kctl;
+Channel *drawc;
+int kdown;
+Model *model;
+Scene *scene;
+double θ, ω = 0;
+
+Camera camera;
+Camcfg cameracfg = {
+ 2,0,4,1,
+ 0,0,0,1,
+ 0,1,0,0,
+ 80*DEG, 0.01, 1e12, PERSPECTIVE
+};
+Point3 center = {0,0,0,1};
+
+static int doprof;
+static int showhud;
+
+static int
+min(int a, int b)
+{
+ return a < b? a: b;
+}
+
+static int
+max(int a, int b)
+{
+ return a > b? a: b;
+}
+
+static void
+sailor(void *arg)
+{
+ char buf[128], pidstr[8];
+ HReq *r;
+
+ r = arg;
+
+ close(r->pfd[0]);
+ dup(r->pfd[1], 1);
+ close(r->pfd[1]);
+
+ getwd(buf, sizeof(buf)-1);
+ snprint(buf+strlen(buf), sizeof(buf)-strlen(buf), "/tools/horizonget");
+ snprint(pidstr, sizeof pidstr, "%d", r->pid);
+
+ execl(buf, "horizonget", pidstr, r->t0, r->t1, nil);
+ sysfatal("execl: %r");
+}
+
+static char *
+getplanetstate(int id, char *t0, char *t1)
+{
+ Biobuf *bin;
+ char *line, *lastline;
+ HReq r;
+
+ r.pid = id;
+ r.t0 = t0;
+ r.t1 = t1;
+ lastline = nil;
+
+ if(pipe(r.pfd) < 0)
+ sysfatal("pipe: %r");
+ switch(fork()){
+ case -1:
+ sysfatal("fork: %r");
+ case 0:
+ sailor(&r);
+ default:
+ close(r.pfd[1]);
+ bin = Bfdopen(r.pfd[0], OREAD);
+ if(bin == nil)
+ sysfatal("Bfdopen: %r");
+ while((line = Brdline(bin, '\n')) != nil){
+ line[Blinelen(bin)-1] = 0;
+ lastline = line;
+ }
+ if(lastline != nil)
+ lastline = strdup(lastline);
+ Bterm(bin);
+ close(r.pfd[0]);
+ }
+
+ return lastline;
+}
+
+static Planet *
+getplanet(Entity *e)
+{
+ int i;
+
+ for(i = 0; i < nelem(planets); i++)
+ if(e == planets[i].body)
+ return &planets[i];
+ return nil;
+}
+
+Point3
+identvshader(VSparams *sp)
+{
+ Planet *p;
+ Point3 pos;
+
+ p = getplanet(sp->su->entity);
+ assert(p != nil);
+
+ Matrix3 S = {
+ p->scale, 0, 0, 0,
+ 0, p->scale, 0, 0,
+ 0, 0, p->scale, 0,
+ 0, 0, 0, 1,
+ };
+ pos = xform3(sp->v->p, S);
+
+ sp->v->mtl = p->mtl;
+ sp->v->c = p->mtl->diffuse;
+ return world2clip(&camera, model2world(sp->su->entity, pos));
+}
+
+Color
+identshader(FSparams *sp)
+{
+ Color tc, c;
+
+ if(sp->v.mtl != nil && sp->v.mtl->diffusemap != nil && sp->v.uv.w != 0)
+ tc = texture(sp->v.mtl->diffusemap, sp->v.uv, neartexsampler);
+ else if(sp->su->entity->mdl->tex != nil && sp->v.uv.w != 0)
+ tc = texture(sp->su->entity->mdl->tex, sp->v.uv, neartexsampler);
+ else
+ tc = Pt3(1,1,1,1);
+
+ c.a = 1;
+ c.b = fclamp(sp->v.c.b*tc.b, 0, 1);
+ c.g = fclamp(sp->v.c.g*tc.g, 0, 1);
+ c.r = fclamp(sp->v.c.r*tc.r, 0, 1);
+
+ return c;
+}
+
+Shadertab shader = { "ident", identvshader, identshader };
+
+void
+zoomin(void)
+{
+ camera.fov = fclamp(camera.fov - 1*DEG, 1*DEG, 180*DEG);
+ reloadcamera(&camera);
+}
+
+void
+zoomout(void)
+{
+ camera.fov = fclamp(camera.fov + 1*DEG, 1*DEG, 180*DEG);
+ reloadcamera(&camera);
+}
+
+void
+drawstats(void)
+{
+ int i;
+
+ snprint(stats[Sfov], sizeof(stats[Sfov]), "FOV %g°", camera.fov/DEG);
+ snprint(stats[Scampos], sizeof(stats[Scampos]), "%V", camera.p);
+ snprint(stats[Scambx], sizeof(stats[Scambx]), "bx %V", camera.bx);
+ snprint(stats[Scamby], sizeof(stats[Scamby]), "by %V", camera.by);
+ snprint(stats[Scambz], sizeof(stats[Scambz]), "bz %V", camera.bz);
+ snprint(stats[Sfps], sizeof(stats[Sfps]), "FPS %.0f/%.0f/%.0f/%.0f", !camera.stats.max? 0: 1e9/camera.stats.max, !camera.stats.avg? 0: 1e9/camera.stats.avg, !camera.stats.min? 0: 1e9/camera.stats.min, !camera.stats.v? 0: 1e9/camera.stats.v);
+ snprint(stats[Sframes], sizeof(stats[Sframes]), "frame %llud", camera.stats.nframes);
+ for(i = 0; i < Se; i++)
+ stringbg(screen, addpt(screen->r.min, Pt(10,10 + i*font->height)), display->black, ZP, font, stats[i], display->white, ZP);
+}
+
+void
+redraw(void)
+{
+ int i;
+
+ lockdisplay(display);
+ camera.vp->draw(camera.vp, screenb);
+ draw(screen, rectaddpt(viewr, screen->r.min), display->black, nil, ZP);
+ draw(screen, rectaddpt(viewr, screen->r.min), screenb, nil, ZP);
+ draw(screen, rectaddpt(cmdbox.r, screen->r.min), display->white, nil, ZP);
+ for(i = 0; i < cmdbox.ncmds; i++){
+ border(screen, rectaddpt(cmdbox.cmds[i].r, screen->r.min), 1, display->black, ZP);
+ string(screen, addpt(screen->r.min, addpt(cmdbox.cmds[i].r.min, Pt(Cmdpadding,Cmdpadding))), display->black, ZP, font, cmdbox.cmds[i].label);
+ }
+ if(showhud)
+ drawstats();
+ flushimage(display, 1);
+ unlockdisplay(display);
+}
+
+void
+drawproc(void *)
+{
+ uvlong t0, Δt;
+
+ threadsetname("drawproc");
+
+ t0 = nsec();
+ for(;;){
+ shootcamera(&camera, &shader);
+ if(doprof)
+ fprint(2, "R %llud %llud\nE %llud %llud\nT %llud %llud\nr %llud %llud\n\n",
+ camera.times.R[camera.times.cur-1].t0, camera.times.R[camera.times.cur-1].t1,
+ camera.times.E[camera.times.cur-1].t0, camera.times.E[camera.times.cur-1].t1,
+ camera.times.Tn[camera.times.cur-1].t0, camera.times.Tn[camera.times.cur-1].t1,
+ camera.times.Rn[camera.times.cur-1].t0, camera.times.Rn[camera.times.cur-1].t1);
+ Δt = nsec() - t0;
+ if(Δt > HZ2MS(60)*1000000ULL){
+ nbsend(drawc, nil);
+ t0 += Δt;
+ }
+ }
+}
+
+static char *
+genplanetmenu(int idx)
+{
+ if(idx < nelem(planets))
+ return planets[idx].name;
+ return nil;
+}
+
+void
+lookat_cmd(Cmdbut *, Mousectl *mc)
+{
+ static Menu menu = { .gen = genplanetmenu };
+ Planet *p;
+ int idx;
+
+ idx = menuhit(1, mc, &menu, _screen);
+ if(idx < 0)
+ return;
+ p = &planets[idx];
+ placecamera(&camera, camera.p, p->body->p, cameracfg.up);
+ nbsend(drawc, nil);
+}
+
+void
+goto_cmd(Cmdbut *, Mousectl *mc)
+{
+ static Menu menu = { .gen = genplanetmenu };
+ Planet *p;
+ int idx;
+
+ idx = menuhit(1, mc, &menu, _screen);
+ if(idx < 0)
+ return;
+ p = &planets[idx];
+ placecamera(&camera, addpt3(p->body->p, Vec3(0,0,10)), p->body->p, cameracfg.up);
+ nbsend(drawc, nil);
+}
+
+Cmdbut cmds[] = {
+ { .label = "look at", .handler = lookat_cmd },
+ { .label = "go to", .handler = goto_cmd },
+};
+
+void
+lmb(void)
+{
+ Cmdbut *cmd;
+ int i;
+
+ cmd = nil;
+ for(i = 0; i < cmdbox.ncmds; i++)
+ if(ptinrect(subpt(mctl->xy, screen->r.min), cmdbox.cmds[i].r))
+ cmd = &cmdbox.cmds[i];
+
+ if(cmd == nil)
+ return;
+ cmd->handler(cmd, mctl);
+}
+
+void
+mmb(void)
+{
+ enum {
+ QUIT,
+ };
+ static char *items[] = {
+ [QUIT] "quit",
+ nil,
+ };
+ static Menu menu = { .item = items };
+
+ switch(menuhit(2, mctl, &menu, _screen)){
+ case QUIT:
+ threadexitsall(nil);
+ }
+ nbsend(drawc, nil);
+}
+
+void
+mouse(void)
+{
+ static Mouse om;
+
+ if((om.buttons ^ mctl->buttons) == 0)
+ return;
+ if((mctl->buttons & 1) != 0)
+ lmb();
+ if((mctl->buttons & 2) != 0)
+ mmb();
+ if((mctl->buttons & 8) != 0)
+ zoomin();
+ if((mctl->buttons & 16) != 0)
+ zoomout();
+
+ om = mctl->Mouse;
+}
+
+void
+kbdproc(void *)
+{
+ Rune r, *a;
+ char buf[128], *s;
+ int fd, n;
+
+ threadsetname("kbdproc");
+
+ if((fd = open("/dev/kbd", OREAD)) < 0)
+ sysfatal("kbdproc: %r");
+ memset(buf, 0, sizeof buf);
+
+ for(;;){
+ if(buf[0] != 0){
+ n = strlen(buf)+1;
+ memmove(buf, buf+n, sizeof(buf)-n);
+ }
+ if(buf[0] == 0){
+ if((n = read(fd, buf, sizeof(buf)-1)) <= 0)
+ break;
+ buf[n-1] = 0;
+ buf[n] = 0;
+ }
+ if(buf[0] == 'c'){
+ chartorune(&r, buf+1);
+ if(r == Kdel){
+ close(fd);
+ threadexitsall(nil);
+ }else
+ nbsend(kctl->c, &r);
+ }
+ if(buf[0] != 'k' && buf[0] != 'K')
+ continue;
+ s = buf+1;
+ kdown = 0;
+ while(*s){
+ s += chartorune(&r, s);
+ for(a = keys; a < keys+Ke; a++)
+ if(r == *a){
+ kdown |= 1 << a-keys;
+ break;
+ }
+ }
+ }
+}
+
+void
+keyproc(void *c)
+{
+ threadsetname("keyproc");
+
+ for(;;){
+ nbsend(c, nil);
+ sleep(HZ2MS(100)); /* key poll rate */
+ }
+}
+
+void
+handlekeys(void)
+{
+ static int okdown;
+
+ if(kdown & 1<<K↑)
+ placecamera(&camera, subpt3(camera.p, mulpt3(camera.bz, 0.1)), camera.bz, camera.by);
+ if(kdown & 1<<K↓)
+ placecamera(&camera, addpt3(camera.p, mulpt3(camera.bz, 0.1)), camera.bz, camera.by);
+ if(kdown & 1<<K←)
+ placecamera(&camera, subpt3(camera.p, mulpt3(camera.bx, 0.1)), camera.bz, camera.by);
+ if(kdown & 1<<K→)
+ placecamera(&camera, addpt3(camera.p, mulpt3(camera.bx, 0.1)), camera.bz, camera.by);
+ if(kdown & 1<<Krise)
+ placecamera(&camera, addpt3(camera.p, mulpt3(camera.by, 0.1)), camera.bz, camera.by);
+ if(kdown & 1<<Kfall)
+ placecamera(&camera, subpt3(camera.p, mulpt3(camera.by, 0.1)), camera.bz, camera.by);
+ if(kdown & 1<<KR↑)
+ aimcamera(&camera, qrotate(camera.bz, camera.bx, 1*DEG));
+ if(kdown & 1<<KR↓)
+ aimcamera(&camera, qrotate(camera.bz, camera.bx, -1*DEG));
+ if(kdown & 1<<KR←)
+ aimcamera(&camera, qrotate(camera.bz, camera.by, 1*DEG));
+ if(kdown & 1<<KR→)
+ aimcamera(&camera, qrotate(camera.bz, camera.by, -1*DEG));
+ if(kdown & 1<<KR↺)
+ placecamera(&camera, camera.p, camera.bz, qrotate(camera.by, camera.bz, 1*DEG));
+ if(kdown & 1<<KR↻)
+ placecamera(&camera, camera.p, camera.bz, qrotate(camera.by, camera.bz, -1*DEG));
+ if(kdown & 1<<Kzoomin)
+ zoomin();
+ if(kdown & 1<<Kzoomout)
+ zoomout();
+
+ if((okdown & 1<<Khud) == 0 && (kdown & 1<<Khud) != 0)
+ showhud ^= 1;
+
+ okdown = kdown;
+}
+
+void
+resize(void)
+{
+ lockdisplay(display);
+ if(getwindow(display, Refnone) < 0)
+ fprint(2, "can't reattach to window\n");
+ unlockdisplay(display);
+ nbsend(drawc, nil);
+}
+
+static void
+confproc(void)
+{
+ char buf[64];
+ int fd;
+
+ snprint(buf, sizeof buf, "/proc/%d/ctl", getpid());
+ fd = open(buf, OWRITE);
+ if(fd < 0)
+ sysfatal("open: %r");
+
+ if(doprof)
+ fprint(fd, "profile\n");
+ close(fd);
+}
+
+void
+usage(void)
+{
+ fprint(2, "usage: %s\n", argv0);
+ exits("usage");
+}
+
+void
+threadmain(int argc, char *argv[])
+{
+ Viewport *v;
+ Renderer *rctl;
+ Channel *keyc;
+ Entity *subject;
+ OBJ *obj;
+ Point lblsiz;
+ char *s, *p;
+ int i, j;
+
+ GEOMfmtinstall();
+ ARGBEGIN{
+ case 'p': doprof++; break;
+ default: usage();
+ }ARGEND;
+ if(argc != 0)
+ usage();
+
+ confproc();
+
+ if((obj = objparse("mdl/planet.obj")) == nil)
+ sysfatal("objparse: %r");
+ model = newmodel();
+ loadobjmodel(model, obj);
+ objfree(obj);
+ scene = newscene(nil);
+ fprint(2, "loading planet states...\n");
+ for(i = 0; i < nelem(planets); i++){
+ subject = newentity(model);
+// subject->p.x = i*2e3;
+ scene->addent(scene, subject);
+ planets[i].body = subject;
+ for(j = 0; j < model->nmaterials; j++)
+ if(strcmp(planets[i].name, model->materials[j].name) == 0)
+ planets[i].mtl = &model->materials[j];
+ if(i == 0){
+ subject->p = Pt3(0,0,0,1);
+ continue;
+ }
+ s = getplanetstate(planets[i].id, nil, nil);
+ if(s == nil)
+ sysfatal("couldn't load planet: %s", planets[i].name);
+ p = strchr(s, '=');
+ subject->p.x = strtod(++p, nil);
+ p = strchr(p, '=');
+ subject->p.y = strtod(++p, nil);
+ p = strchr(p, '=');
+ subject->p.z = strtod(++p, nil);
+ subject->p.w = 1;
+ subject->p = divpt3(subject->p, 1e5);
+ free(s);
+ fprint(2, "%s ready\n", planets[i].name);
+ }
+
+ if(memimageinit() != 0)
+ sysfatal("memimageinit: %r");
+ if((rctl = initgraphics()) == nil)
+ sysfatal("initgraphics: %r");
+ if(initdraw(nil, nil, "solar") < 0)
+ sysfatal("initdraw: %r");
+ if((mctl = initmouse(nil, screen)) == nil)
+ sysfatal("initmouse: %r");
+
+ viewr = rectsubpt(Rpt(screen->r.min, subpt(screen->r.max, Pt(0,Cmdwinht))), screen->r.min);
+ cmdbox.r = Rect(viewr.min.x, viewr.max.y, Dx(viewr), Dy(screen->r));
+ cmdbox.cmds = cmds;
+ cmdbox.ncmds = nelem(cmds);
+ for(i = 0; i < nelem(cmds); i++){
+ lblsiz = stringsize(font, cmds[i].label);
+ cmds[i].r = Rect(0,0,Cmdpadding+lblsiz.x+Cmdpadding,Cmdpadding+lblsiz.y+Cmdpadding);
+ if(i == 0)
+ cmds[i].r = rectaddpt(cmds[i].r, addpt(cmdbox.r.min, Pt(Cmdmargin,Cmdmargin)));
+ else
+ cmds[i].r = rectaddpt(cmds[i].r, Pt(cmds[i-1].r.max.x+Cmdmargin,cmds[i-1].r.min.y));
+ }
+ screenb = eallocimage(display, viewr, RGBA32, 0, DNofill);
+ v = mkviewport(screenb->r);
+ placecamera(&camera, cameracfg.p, cameracfg.lookat, cameracfg.up);
+ configcamera(&camera, v, cameracfg.fov, cameracfg.clipn, cameracfg.clipf, cameracfg.ptype);
+ camera.s = scene;
+ camera.rctl = rctl;
+
+ kctl = emalloc(sizeof *kctl);
+ kctl->c = chancreate(sizeof(Rune), 16);
+ keyc = chancreate(sizeof(void*), 1);
+ drawc = chancreate(sizeof(void*), 1);
+ display->locking = 1;
+ unlockdisplay(display);
+
+ proccreate(kbdproc, nil, mainstacksize);
+ proccreate(keyproc, keyc, mainstacksize);
+ proccreate(drawproc, nil, mainstacksize);
+
+ for(;;){
+ enum {MOUSE, RESIZE, KEY, DRAW};
+ Alt a[] = {
+ {mctl->c, &mctl->Mouse, CHANRCV},
+ {mctl->resizec, nil, CHANRCV},
+ {keyc, nil, CHANRCV},
+ {drawc, nil, CHANRCV},
+ {nil, nil, CHANEND}
+ };
+ switch(alt(a)){
+ case MOUSE: mouse(); break;
+ case RESIZE: resize(); break;
+ case KEY: handlekeys(); break;
+ case DRAW: redraw(); break;
+ }
+ }
+}
--- /dev/null
+++ b/tools/horizon.api.get
@@ -1,0 +1,29 @@
+#!/bin/rc
+#
+# NASA JPL Horizons API
+# https://ssd.jpl.nasa.gov/horizons/
+#
+rfork ne
+center=()
+target=()
+t0=()
+t1=()
+step=()
+flagfmt=''
+args='center target t0 t1 step'
+
+fn usage {
+ aux/usage
+ exit usage
+}
+
+if(! ifs=() eval `{aux/getflags $*} || ! ~ $#* 5)
+ usage
+
+center=$1
+target=$2
+t0=$3
+t1=$4
+step=$5
+
+hget 'https://ssd.jpl.nasa.gov/api/horizons.api?format=text&COMMAND='''$target'''&OBJ_DATA=''YES''&MAKE_EPHEM=''YES''&EPHEM_TYPE=''VECTORS''&CENTER='''$center'''&START_TIME='''$t0'''&STOP_TIME='''$t1'''&STEP_SIZE='''$step'''&VEC_TABLE=''1'''
--- /dev/null
+++ b/tools/horizon.getdata.awk
@@ -1,0 +1,3 @@
+#!/bin/awk -f
+BEGIN{ doprint=0 }
+{ if($1 == "$$EOE") doprint=0; if(doprint) print; if($1 == "$$SOE") doprint=1; }
--- /dev/null
+++ b/tools/horizonget
@@ -1,0 +1,31 @@
+#!/bin/rc
+rfork ne
+cwd=`{basename -d $0}
+center='@sun'
+target=()
+t0=`{date -f 'YYYY-MM-DD' `{echo `{date -n} - 86400 | bc}}
+t1=`{date -f 'YYYY-MM-DD'}
+step='1 d'
+flagfmt=''
+args='target [t0 t1]'
+
+fn usage {
+ aux/usage
+ exit usage
+}
+
+if(! ifs=() eval `{aux/getflags $*})
+ usage
+
+switch($#*){
+case 1
+ target=$1
+case 3
+ target=$1
+ t0=$2
+ t1=$3
+case *
+ usage
+}
+
+$cwd^/horizon.api.get $center $target $t0 $t1 $step | $cwd^/horizon.getdata.awk | tr A-Z a-z