Browse Source

New sorting, texture glow and bloom effect

Tankernn 8 years ago
parent
commit
b9970ba70f
27 changed files with 2948 additions and 168 deletions
  1. 1 0
      .classpath
  2. BIN
      res/barrelS.png
  3. 1361 0
      res/cherry.obj
  4. BIN
      res/cherry.png
  5. BIN
      res/cherryS.png
  6. 1226 0
      res/lantern.obj
  7. BIN
      res/lantern.png
  8. BIN
      res/lanternS.png
  9. 5 0
      src/main/java/eu/tankernn/gameEngine/normalMapping/renderer/NormalMappingRenderer.java
  10. 9 0
      src/main/java/eu/tankernn/gameEngine/normalMapping/renderer/NormalMappingShader.java
  11. 10 0
      src/main/java/eu/tankernn/gameEngine/normalMapping/renderer/normalMapFShader.glsl
  12. 2 2
      src/main/java/eu/tankernn/gameEngine/particles/ParticleMaster.java
  13. 15 5
      src/main/java/eu/tankernn/gameEngine/postProcessing/PostProcessing.java
  14. 35 0
      src/main/java/eu/tankernn/gameEngine/postProcessing/bloom/BrightFilter.java
  15. 23 0
      src/main/java/eu/tankernn/gameEngine/postProcessing/bloom/BrightFilterShader.java
  16. 36 0
      src/main/java/eu/tankernn/gameEngine/postProcessing/bloom/CombineFilter.java
  17. 33 0
      src/main/java/eu/tankernn/gameEngine/postProcessing/bloom/CombineShader.java
  18. 13 0
      src/main/java/eu/tankernn/gameEngine/postProcessing/bloom/brightFilterFragment.glsl
  19. 14 0
      src/main/java/eu/tankernn/gameEngine/postProcessing/bloom/combineFragment.glsl
  20. 12 0
      src/main/java/eu/tankernn/gameEngine/postProcessing/bloom/simpleVertex.glsl
  21. 5 0
      src/main/java/eu/tankernn/gameEngine/renderEngine/EntityRenderer.java
  22. 12 0
      src/main/java/eu/tankernn/gameEngine/shaders/StaticShader.java
  23. 10 0
      src/main/java/eu/tankernn/gameEngine/shaders/fragmentShader.glsl
  24. 74 63
      src/main/java/eu/tankernn/gameEngine/tester/MainLoop.java
  25. 33 19
      src/main/java/eu/tankernn/gameEngine/textures/ModelTexture.java
  26. 19 0
      src/main/java/eu/tankernn/gameEngine/util/DistanceSorter.java
  27. 0 79
      src/main/java/eu/tankernn/gameEngine/util/Sorter.java

+ 1 - 0
.classpath

@@ -7,6 +7,7 @@
 	</classpathentry>
 	<classpathentry including="**/*.java" kind="src" output="target/classes" path="src/main/java">
 		<attributes>
+			<attribute name="org.eclipse.jdt.launching.CLASSPATH_ATTR_LIBRARY_PATH_ENTRY" value="Tankernn game engine/lib/lwjgl-2.9.3/native/windows"/>
 			<attribute name="optional" value="true"/>
 			<attribute name="maven.pomderived" value="true"/>
 		</attributes>

BIN
res/barrelS.png


+ 1361 - 0
res/cherry.obj

@@ -0,0 +1,1361 @@
+# Blender v2.67 (sub 0) OBJ File: 'cherry tree.blend'
+# www.blender.org
+o Circle
+v -0.156483 5.645121 -0.888575
+v -0.098597 5.571278 -0.793035
+v -0.037956 5.497434 -0.886851
+v -0.095842 5.571278 -0.982391
+v 0.294029 6.098169 -0.985469
+v 0.382393 6.050913 -0.882652
+v 0.473710 6.003657 -0.982854
+v 0.385346 6.050913 -1.085670
+v 0.574531 6.728470 -0.981387
+v 0.637153 6.677375 -0.898715
+v 0.702154 6.626280 -0.979531
+v 0.639532 6.677375 -1.062203
+v 1.640737 7.026845 -0.985176
+v 0.000000 -0.014164 -1.545568
+v -0.455197 -0.014164 -0.638768
+v -1.084697 -0.014164 -0.037769
+v -0.474591 -0.014164 0.454880
+v 0.000000 -0.014164 1.160506
+v 0.564882 -0.014164 0.436821
+v 1.196111 -0.014164 -0.037769
+v 0.600998 -0.014164 -0.519295
+v 0.000000 0.693605 -1.127659
+v -0.319799 0.760099 -1.013092
+v -0.452264 0.920630 -0.736504
+v -0.319799 1.081161 -0.459916
+v 0.000000 1.147655 -0.345349
+v 0.319799 1.081161 -0.459916
+v 0.452264 0.920630 -0.736504
+v 0.319799 0.760100 -1.013092
+v -0.118411 1.180123 -1.633835
+v -0.453433 1.202298 -1.496848
+v -0.592203 1.255834 -1.166131
+v -0.453433 1.309370 -0.835415
+v -0.118411 1.331545 -0.698428
+v 0.216610 1.309370 -0.835415
+v 0.355380 1.255834 -1.166131
+v 0.216610 1.202298 -1.496847
+v -0.135327 1.609458 -1.724540
+v -0.497877 1.586086 -1.576196
+v -0.648050 1.529662 -1.218064
+v -0.497877 1.473239 -0.859933
+v -0.135327 1.449867 -0.711589
+v 0.227222 1.473239 -0.859933
+v 0.377395 1.529662 -1.218064
+v 0.227222 1.586086 -1.576196
+v -0.101495 2.123602 -1.303155
+v -0.401519 2.064414 -1.193882
+v -0.525792 1.921520 -0.930072
+v -0.401519 1.778627 -0.666263
+v -0.101495 1.719438 -0.556990
+v 0.198528 1.778627 -0.666263
+v 0.322802 1.921520 -0.930072
+v 0.198528 2.064414 -1.193882
+v 0.000000 2.503191 -0.544728
+v -0.183678 2.466955 -0.477830
+v -0.259761 2.379474 -0.316322
+v -0.183678 2.291992 -0.154814
+v 0.000000 2.255756 -0.087915
+v 0.183678 2.291992 -0.154814
+v 0.259761 2.379474 -0.316322
+v 0.183678 2.466955 -0.477829
+v 0.287570 3.303728 -0.053160
+v 0.141401 3.294366 0.006658
+v 0.080855 3.271766 0.151070
+v 0.141401 3.249166 0.295481
+v 0.287570 3.239804 0.355299
+v 0.433740 3.249166 0.295481
+v 0.494285 3.271766 0.151070
+v 0.433740 3.294367 0.006658
+v 0.422897 3.492550 -0.028373
+v 0.244298 3.502553 0.044927
+v 0.170319 3.526705 0.221886
+v 0.244298 3.550855 0.398845
+v 0.422897 3.560859 0.472144
+v 0.601497 3.550855 0.398845
+v 0.675476 3.526705 0.221886
+v 0.601497 3.502554 0.044927
+v 0.338318 3.636839 -0.089645
+v 0.177405 3.677869 -0.037117
+v 0.110752 3.776922 0.089695
+v 0.177405 3.875975 0.216508
+v 0.338318 3.917005 0.269036
+v 0.499231 3.875975 0.216508
+v 0.565884 3.776922 0.089695
+v 0.499231 3.677869 -0.037117
+v 0.186075 3.893491 -0.488543
+v 0.071208 3.920191 -0.449162
+v 0.023629 3.984650 -0.354087
+v 0.071208 4.049109 -0.259011
+v 0.186075 4.075809 -0.219630
+v 0.300941 4.049109 -0.259011
+v 0.348521 3.984650 -0.354087
+v 0.300941 3.920191 -0.449162
+v 0.236823 4.493791 -0.872714
+v 0.121956 4.502303 -0.825902
+v 0.074377 4.522854 -0.712889
+v 0.121956 4.543404 -0.599876
+v 0.236823 4.551917 -0.553064
+v 0.351689 4.543404 -0.599876
+v 0.399268 4.522854 -0.712889
+v 0.351689 4.502303 -0.825902
+v -0.135327 5.318167 -0.835619
+v -0.217322 5.337891 -0.807969
+v -0.251286 5.385506 -0.741216
+v -0.217322 5.433120 -0.674462
+v -0.135327 5.452843 -0.646812
+v -0.053332 5.433120 -0.674462
+v -0.019368 5.385506 -0.741216
+v -0.053332 5.337891 -0.807969
+v -0.084579 6.218250 -1.425709
+v -0.143421 6.232404 -1.405867
+v -0.167794 6.266573 -1.357963
+v -0.143421 6.300743 -1.310059
+v -0.084579 6.314897 -1.290217
+v -0.025738 6.300743 -1.310059
+v -0.001365 6.266573 -1.357963
+v -0.025738 6.232404 -1.405867
+v 0.000000 6.580946 -1.683842
+v -0.058842 6.586358 -1.660077
+v -0.083215 6.599421 -1.602704
+v -0.058842 6.612485 -1.545331
+v 0.000000 6.617896 -1.521566
+v 0.058842 6.612485 -1.545331
+v 0.083215 6.599421 -1.602704
+v 0.058842 6.586358 -1.660077
+v -0.236823 7.302945 -1.719558
+v -0.283298 7.311936 -1.702536
+v -0.302549 7.333645 -1.661442
+v -0.283298 7.355353 -1.620347
+v -0.236823 7.364345 -1.603326
+v -0.190347 7.355353 -1.620347
+v -0.171096 7.333645 -1.661442
+v -0.190347 7.311936 -1.702536
+v -0.050748 7.842706 -2.327138
+v 0.274658 3.933725 -0.157549
+v 0.135834 3.895260 -0.087232
+v 0.135834 3.818328 0.053401
+v 0.274658 3.779863 0.123717
+v 0.413482 3.818328 0.053401
+v 0.413482 3.895260 -0.087232
+v 0.332746 4.658611 0.412323
+v 0.188062 4.608477 0.479139
+v 0.188062 4.508209 0.612771
+v 0.332746 4.458075 0.679587
+v 0.477429 4.508209 0.612771
+v 0.477429 4.608477 0.479139
+v 0.332746 4.947105 1.160786
+v 0.214675 4.879166 1.155200
+v 0.214675 4.743289 1.144027
+v 0.332746 4.675350 1.138440
+v 0.450817 4.743289 1.144027
+v 0.450817 4.879166 1.155200
+v 0.332746 4.313617 2.779490
+v -0.316401 2.265745 -0.477551
+v -0.271643 2.160267 -0.698320
+v -0.054186 2.198790 -0.812759
+v 0.118514 2.342792 -0.706427
+v 0.073757 2.448270 -0.485658
+v -0.143701 2.409746 -0.371219
+v -0.419609 3.040718 -0.971302
+v -0.380753 2.952609 -1.128391
+v -0.497282 2.825988 -1.194254
+v -0.652668 2.787476 -1.103029
+v -0.691525 2.875586 -0.945940
+v -0.574995 3.002207 -0.880077
+v -1.075738 3.250382 -1.526435
+v -0.991317 3.157472 -1.609199
+v -0.980987 3.012127 -1.572088
+v -1.055079 2.959692 -1.452212
+v -1.139501 3.052602 -1.369448
+v -1.149831 3.197947 -1.406560
+v -2.489637 2.892678 -2.451548
+v -0.606317 2.848775 -1.180653
+v -0.702954 2.920889 -1.122408
+v -0.610564 3.002662 -1.070362
+v -0.513926 2.930549 -1.128607
+v -0.537137 3.163325 -1.740898
+v -0.642838 3.257304 -1.716246
+v -0.545873 3.361640 -1.698241
+v -0.440172 3.267661 -1.722893
+v -0.564586 3.262664 -2.423068
+v -0.648980 3.333662 -2.388368
+v -0.570168 3.413000 -2.359020
+v -0.485775 3.342002 -2.393720
+v -0.616251 3.839016 -3.100319
+v -1.815296 3.245386 -0.081538
+v -4.242427 2.370220 -1.028088
+v -2.879073 2.100726 -4.266101
+v -0.451941 2.975893 -3.319552
+v -2.205975 3.558007 -1.108344
+v -3.573695 3.064839 -1.641737
+v -2.805427 2.912976 -3.466402
+v -1.437707 3.406144 -2.933008
+v -2.568240 3.457386 -2.332172
+v 2.276108 4.712644 1.282861
+v 1.410521 5.076680 4.077669
+v -2.200228 5.055351 2.958757
+v -1.334642 4.691314 0.163949
+v 1.319100 5.421161 1.572240
+v 0.831332 5.626299 3.147150
+v -1.203374 5.614280 2.516629
+v -0.715604 5.409141 0.941718
+v 0.065724 5.767740 2.014302
+v -2.257764 3.304271 -2.401136
+v -1.303020 3.304271 -4.970354
+v 1.990047 3.304271 -3.743428
+v 1.035304 3.304271 -1.174210
+v -1.330707 3.897953 -2.694082
+v -0.792697 3.897953 -4.141870
+v 1.062991 3.897953 -3.450482
+v 0.524979 3.897953 -2.002694
+v -0.133858 4.132176 -3.072282
+v 1.558379 4.652606 1.067803
+v 1.938908 3.855642 3.308587
+v -1.058932 4.230274 3.948094
+v -1.439461 5.027237 1.707309
+v 1.081797 5.048678 1.853987
+v 1.296231 4.599579 3.116699
+v -0.393092 4.810688 3.477069
+v -0.607525 5.259788 2.214357
+v 0.381687 5.122307 2.727697
+v -0.238926 6.127344 -2.382854
+v 2.159370 5.286239 -3.168172
+v 3.479626 6.271734 -0.181878
+v 1.081331 7.112838 0.603440
+v 0.682992 6.679552 -2.123134
+v 2.034464 6.205579 -2.565671
+v 2.778446 6.760919 -0.882854
+v 1.426974 7.234893 -0.440317
+v 1.774263 6.925663 -1.590037
+v 2.029633 7.021338 -2.331182
+v -0.038459 7.021338 -0.263091
+v -2.106550 7.021338 -2.331182
+v -0.038459 7.021338 -4.399274
+v 1.126938 7.654842 -2.331182
+v -0.038459 7.654842 -1.165785
+v -1.203856 7.654842 -2.331182
+v -0.038459 7.654842 -3.496580
+v -0.038459 7.904776 -2.331182
+v 0.347526 5.199685 1.579831
+v -2.185937 5.199685 -0.524406
+v -0.081700 5.199685 -3.057867
+v 2.451762 5.199685 -0.953632
+v 0.253850 5.913038 0.567684
+v -1.173790 5.913038 -0.618082
+v 0.011976 5.913038 -2.045721
+v 1.439616 5.913038 -0.859956
+v 0.132913 6.194473 -0.739019
+v -1.617954 3.117392 2.395666
+v -1.190156 4.186270 -0.292922
+v 1.610874 4.714041 0.362590
+v 1.183077 3.645164 3.051176
+v -1.070261 4.044346 2.156970
+v -0.829192 4.646673 0.641915
+v 0.749226 4.944078 1.011304
+v 0.508157 4.341752 2.526359
+v -0.222449 4.722443 1.665018
+v -1.857827 5.124483 -1.172589
+v -0.519568 6.143478 -3.565228
+v 1.901900 6.636597 -2.000832
+v 0.563642 5.617602 0.391806
+v -1.242729 6.038617 -1.219483
+v -0.488603 6.612835 -2.567767
+v 0.875926 6.890714 -1.686209
+v 0.121800 6.316496 -0.337924
+v -0.264452 6.695118 -1.400032
+v 1.473196 1.638681 -1.437251
+v -0.518416 3.290437 -0.073728
+v -2.023020 3.536623 -2.569637
+v -0.031409 1.884868 -3.933161
+v 1.040349 2.572972 -1.832130
+v -0.081950 3.503758 -1.063767
+v -0.929815 3.642488 -2.470245
+v 0.192484 2.711701 -3.238608
+v 0.185531 3.312913 -2.209476
+v 0.305441 2.003397 2.691908
+v -1.271875 4.366607 0.861444
+v 1.380387 4.518442 -1.227989
+v 2.957703 2.155234 0.602474
+v 0.838675 3.074634 2.253451
+v -0.050163 4.406333 1.221961
+v 1.444422 4.491895 0.044537
+v 2.333260 3.160196 1.076028
+v 1.259367 3.989342 1.313525
+v 0.148573 3.277395 -3.001933
+v -2.430299 3.517374 -1.643316
+v -3.586143 1.568995 -3.493140
+v -1.007271 1.329015 -4.851758
+v -0.829670 3.374144 -3.501798
+v -2.282899 3.509375 -2.736199
+v -2.934232 2.411438 -3.778600
+v -1.481004 2.276206 -4.544199
+v -1.946325 3.078058 -3.795115
+v -1.516571 6.827296 -0.643375
+v -1.358528 4.700467 -3.732564
+v 2.368687 5.133760 -3.840190
+v 2.210645 7.260588 -0.751003
+v -0.759081 7.121089 -1.802418
+v -0.670023 5.922593 -3.543218
+v 1.430313 6.166759 -3.603865
+v 1.341254 7.365255 -1.863067
+v 0.299934 6.905651 -2.885160
+v 0.000000 -0.979010 -1.545568
+v -0.455197 -0.979010 -0.638768
+v -1.084697 -0.979010 -0.037769
+v -0.474591 -0.979010 0.454880
+v 0.000000 -0.979010 1.160506
+v 0.564882 -0.979010 0.436821
+v 1.196111 -0.979010 -0.037769
+v 0.600998 -0.979010 -0.519295
+vt 0.139098 0.944513
+vt 0.105468 0.945856
+vt 0.138787 0.774326
+vt 0.155722 0.974750
+vt 0.125216 0.982805
+vt 0.146283 0.819649
+vt 0.093739 0.984803
+vt 0.111310 0.817289
+vt 0.172076 0.950714
+vt 0.174046 0.768767
+vt 0.104534 0.783436
+vt 0.063595 0.615988
+vt 0.077341 0.810749
+vt 0.116116 0.657141
+vt 0.122034 0.611430
+vt 0.170498 0.656743
+vt 0.092707 0.614757
+vt 0.174044 0.357225
+vt 0.143032 0.658290
+vt 0.047757 0.425777
+vt 0.218891 0.087157
+vt 0.247072 0.102694
+vt 0.224514 0.189698
+vt 0.040177 0.067876
+vt 0.064683 0.049159
+vt 0.033935 0.164441
+vt 0.137323 0.053983
+vt 0.168346 0.068373
+vt 0.169639 0.148698
+vt 0.092248 0.055140
+vt 0.096733 0.136674
+vt 0.197617 0.068538
+vt 0.199934 0.168906
+vt 0.007565 0.084129
+vt 0.014305 0.187095
+vt 0.061218 0.147166
+vt 0.135821 0.131626
+vt 0.110304 0.209150
+vt 0.170974 0.221359
+vt 0.008975 0.240152
+vt 0.081713 0.208167
+vt 0.149492 0.216123
+vt 0.242357 0.212410
+vt 0.200556 0.231431
+vt 0.043283 0.219129
+vt 0.130735 0.212645
+vt 0.231182 0.250975
+vt 0.191229 0.244607
+vt 0.050970 0.236270
+vt 0.128783 0.232548
+vt 0.111313 0.231088
+vt 0.163903 0.237705
+vt 0.013189 0.250727
+vt 0.086981 0.231107
+vt 0.144762 0.234348
+vt 0.053633 0.274633
+vt 0.106035 0.264903
+vt 0.164601 0.268797
+vt 0.224355 0.259624
+vt 0.216942 0.289235
+vt 0.082550 0.268898
+vt 0.144238 0.264727
+vt 0.125730 0.263661
+vt 0.188702 0.277557
+vt 0.070067 0.345736
+vt 0.163198 0.338233
+vt 0.132821 0.339327
+vt 0.218342 0.349065
+vt 0.021506 0.279792
+vt 0.039868 0.346905
+vt 0.101369 0.342232
+vt 0.191929 0.341778
+vt 0.243973 0.357477
+vt 0.093489 0.466725
+vt 0.180212 0.459502
+vt 0.225541 0.469227
+vt 0.065706 0.468001
+vt 0.122753 0.462050
+vt 0.204043 0.464343
+vt 0.010501 0.345367
+vt 0.019125 0.462164
+vt 0.152468 0.458533
+vt 0.107654 0.493161
+vt 0.216180 0.495697
+vt 0.041387 0.465926
+vt 0.019703 0.494701
+vt 0.078266 0.494350
+vt 0.186116 0.492735
+vt 0.240186 0.498208
+vt 0.058340 0.494602
+vt 0.147942 0.492820
+vt 0.180208 0.525442
+vt 0.202726 0.527368
+vt 0.041102 0.495154
+vt 0.066166 0.515843
+vt 0.151462 0.521234
+vt 0.089802 0.514156
+vt 0.046989 0.519918
+vt 0.183277 0.562685
+vt 0.030487 0.526376
+vt 0.043021 0.560444
+vt 0.074587 0.557049
+vt 0.158392 0.564923
+vt 0.224195 0.530027
+vt 0.209132 0.560155
+vt 0.119905 0.516169
+vt 0.104759 0.560056
+vt 0.237838 0.562419
+vt 0.190348 0.626883
+vt 0.037864 0.612835
+vt 0.132463 0.563686
+vt 0.106463 0.624312
+vt 0.083896 0.618636
+vt 0.158522 0.629967
+vt 0.013720 0.570290
+vt 0.010793 0.617272
+vt 0.061530 0.614359
+vt 0.130516 0.629179
+vt 0.034529 0.705743
+vt 0.088383 0.686424
+vt 0.170429 0.707655
+vt 0.220801 0.624060
+vt 0.195409 0.713187
+vt 0.059254 0.693327
+vt 0.146144 0.697102
+vt 0.051182 0.796310
+vt 0.119090 0.687609
+vt 0.119490 0.789630
+vt 0.185268 0.788142
+vt 0.010039 0.716452
+vt 0.028414 0.796008
+vt 0.096793 0.792915
+vt 0.141390 0.787028
+vt 0.221074 0.713620
+vt 0.206428 0.791791
+vt 0.073692 0.795473
+vt 0.083276 0.825465
+vt 0.163020 0.786295
+vt 0.130581 0.828417
+vt 0.189557 0.822311
+vt 0.067105 0.824178
+vt 0.114366 0.828230
+vt 0.148695 0.826482
+vt 0.048643 0.825155
+vt 0.098763 0.827082
+vt 0.108002 0.883149
+vt 0.169495 0.823796
+vt 0.152373 0.884840
+vt 0.085148 0.883916
+vt 0.142008 0.884349
+vt 0.095751 0.883139
+vt 0.131943 0.883988
+vt 0.163034 0.885569
+vt 0.119686 0.953447
+vt 0.120746 0.883462
+vt 0.074674 0.885648
+vt 0.162884 0.347696
+vt 0.198155 0.357461
+vt 0.177833 0.548512
+vt 0.016451 0.354028
+vt 0.052052 0.352780
+vt 0.016451 0.549327
+vt 0.088752 0.346875
+vt 0.126445 0.343496
+vt 0.114894 0.528913
+vt 0.231464 0.365981
+vt 0.211510 0.560263
+vt 0.082876 0.532988
+vt 0.183084 0.671416
+vt 0.051639 0.543281
+vt 0.084111 0.666483
+vt 0.147265 0.534521
+vt 0.155957 0.667713
+vt 0.060326 0.662763
+vt 0.108136 0.668321
+vt 0.132058 0.668929
+vt 0.040212 0.498781
+vt 0.080745 0.487079
+vt 0.063616 0.632928
+vt 0.205276 0.507369
+vt 0.240894 0.523515
+vt 0.192487 0.650563
+vt 0.123851 0.483177
+vt 0.166447 0.491024
+vt 0.115513 0.619933
+vt 0.002638 0.509606
+vt 0.036083 0.640813
+vt 0.141601 0.626054
+vt 0.091577 0.988225
+vt 0.032885 0.663585
+vt 0.165925 0.638873
+vt 0.170692 0.737881
+vt 0.088971 0.623239
+vt 0.068676 0.731317
+vt 0.128786 0.738811
+vt 0.046468 0.730003
+vt 0.088427 0.737101
+vt 0.108553 0.739855
+vt 0.094220 0.974056
+vt 0.148824 0.735601
+vt 0.074678 0.986062
+vt 0.032193 0.987294
+vt 0.033248 0.782185
+vt 0.201512 0.986251
+vt 0.160903 0.994166
+vt 0.201512 0.781644
+vt 0.119576 0.993877
+vt 0.116409 0.777297
+vt 0.077021 0.777174
+vt 0.076975 0.567112
+vt 0.156646 0.781732
+vt 0.154180 0.566658
+vt 0.116114 0.568875
+vt 0.191230 0.561295
+vt 0.039908 0.562266
+vt 0.113940 0.283273
+vt 0.998648 0.516996
+vt 0.997254 0.997781
+vt 0.853549 0.644509
+vt 0.405367 0.518882
+vt 0.404980 0.997067
+vt 0.568858 0.653695
+vt 0.843903 0.869743
+vt 0.706381 0.761719
+vt 0.559212 0.878929
+vt 0.709240 0.028379
+vt 0.709234 0.455935
+vt 0.599214 0.147866
+vt 0.281684 0.028379
+vt 0.281678 0.455935
+vt 0.401169 0.138403
+vt 0.589749 0.345911
+vt 0.495459 0.242157
+vt 0.391704 0.336448
+vn -0.065706 -0.137242 -0.988342
+vn -0.699210 0.711783 0.066225
+vn 0.047517 -0.106998 -0.993103
+vn 0.129765 0.063478 0.989502
+vn -0.824183 0.563524 -0.055757
+vn 0.709006 -0.701651 0.070376
+vn 0.103519 0.017273 0.994446
+vn 0.842341 -0.538743 -0.014069
+vn -0.675405 0.737388 -0.007416
+vn 0.708426 -0.705557 0.016541
+vn -0.063997 0.185095 -0.980621
+vn 0.943663 0.330821 -0.004334
+vn -0.079409 0.195715 0.977416
+vn -0.729057 0.306650 0.611866
+vn -0.024903 0.357585 0.933531
+vn -0.669637 0.559038 0.488876
+vn 0.658040 0.341258 0.671194
+vn 0.961730 0.263131 0.075930
+vn 0.572497 0.723716 0.385235
+vn -0.026093 0.092654 -0.995331
+vn -0.786859 -0.083590 -0.611408
+vn -0.769921 -0.255715 -0.584613
+vn 0.750298 -0.023041 -0.660665
+vn 0.796869 -0.113346 -0.593402
+vn -0.951292 0.285928 0.115177
+vn -0.992767 0.116092 0.029695
+vn 0.055269 0.819544 0.570330
+vn 0.928617 0.316111 -0.194220
+vn 0.019715 -0.066469 -0.997589
+vn 0.648061 -0.350871 -0.675924
+vn -0.950163 -0.310923 -0.022004
+vn -0.004761 0.597156 0.802087
+vn 0.995972 -0.015839 -0.088168
+vn -0.642903 -0.458846 -0.613239
+vn -0.775231 0.132176 0.617634
+vn 0.709494 0.452223 0.540422
+vn -0.014527 -0.475631 -0.879513
+vn -0.779839 -0.126469 0.613025
+vn 0.760796 -0.126865 0.636433
+vn -0.015381 0.230567 -0.972930
+vn 0.666707 0.179785 -0.723289
+vn -0.995849 0.052614 -0.073885
+vn -0.026704 -0.207739 0.977813
+vn 0.996124 0.041322 -0.077486
+vn -0.684042 0.183081 -0.706046
+vn 0.712668 -0.413129 0.566881
+vn 0.654439 0.595050 -0.466475
+vn -0.953063 0.279061 0.117313
+vn -0.003967 -0.580401 0.814295
+vn 0.992187 0.120731 0.030885
+vn -0.640797 0.653645 -0.402539
+vn -0.006348 0.773034 -0.634327
+vn -0.720420 -0.251625 0.646229
+vn 0.993500 -0.113804 0.002197
+vn -0.671010 0.661275 -0.335307
+vn -0.016480 0.758629 -0.651265
+vn -0.678976 -0.248543 0.690786
+vn 0.660115 -0.488388 0.570696
+vn 0.719230 0.440107 -0.537553
+vn -0.947661 0.248695 0.200110
+vn -0.016083 -0.533219 0.845790
+vn 0.682119 -0.103305 -0.723899
+vn -0.947966 0.307566 0.081851
+vn -0.024018 -0.363689 0.931181
+vn 0.892788 -0.448988 -0.035798
+vn -0.030427 0.378368 -0.925138
+vn -0.695273 -0.054048 0.716697
+vn -0.657704 0.499771 -0.563585
+vn 0.131901 -0.162389 -0.977844
+vn -0.620930 0.105747 0.776696
+vn 0.606861 -0.505295 0.613453
+vn 0.064608 0.078005 0.994842
+vn 0.770623 -0.187811 -0.608936
+vn -0.991638 0.085726 0.096255
+vn 0.994079 -0.083132 0.069552
+vn -0.702475 -0.027467 -0.711142
+vn -0.982360 -0.099155 0.158391
+vn -0.665395 0.493240 0.560259
+vn 0.710807 0.015412 0.703207
+vn 0.908139 0.380535 -0.174413
+vn -0.715567 -0.614917 -0.331309
+vn 0.697256 -0.144536 -0.702078
+vn 0.630787 0.690481 0.353984
+vn -0.994049 -0.108707 0.003510
+vn -0.001526 0.764519 0.644581
+vn 0.671834 0.655385 0.345073
+vn 0.982635 0.102298 -0.154729
+vn -0.688711 -0.550035 -0.472304
+vn -0.757225 0.473556 0.449782
+vn -0.022584 -0.664663 -0.746757
+vn 0.648030 -0.483413 -0.588458
+vn -0.049867 0.811640 0.581988
+vn -0.712394 0.146184 0.686331
+vn 0.744255 0.351421 0.567919
+vn -0.039735 -0.705863 -0.707175
+vn 0.055330 -0.239753 -0.969237
+vn 0.701926 -0.072359 -0.708518
+vn -0.984680 -0.170263 -0.037385
+vn 0.061342 0.374920 0.925016
+vn 0.984252 0.150060 -0.093265
+vn -0.632099 -0.306772 -0.711570
+vn 0.646016 0.370159 0.667531
+vn 0.657857 -0.041719 -0.751976
+vn -0.980224 -0.128330 0.150487
+vn -0.683401 0.178137 0.707938
+vn 0.973266 0.220618 -0.063448
+vn -0.770653 -0.337352 -0.540605
+vn 0.691855 0.362346 0.624500
+vn -0.065706 -0.263466 -0.962401
+vn -0.016846 -0.560625 -0.827876
+vn -0.707144 0.495956 0.503922
+vn -0.040223 0.365673 0.929868
+vn -0.020173 0.606708 0.794641
+vn 0.694327 -0.471297 -0.543809
+vn -0.711478 -0.319285 -0.625965
+vn 0.993561 -0.091067 0.067263
+vn 0.997162 0.031373 -0.068239
+vn -0.990692 0.112705 -0.076174
+vn -0.636189 -0.294320 -0.713157
+vn 0.068239 0.383129 0.921140
+vn 0.762719 0.271920 0.586749
+vn 0.057070 -0.316233 -0.946928
+vn -0.995788 -0.070467 -0.058321
+vn 0.706137 -0.189276 -0.682272
+vn 0.725394 -0.248299 -0.641957
+vn -0.706259 0.240791 0.665700
+vn -0.694632 0.357067 0.624470
+vn 0.622852 0.441633 0.645741
+vn -0.996185 0.044282 0.074831
+vn 0.988220 0.146428 0.043916
+vn -0.786920 -0.287545 -0.545915
+vn -0.055116 0.511124 0.857723
+vn 0.215979 0.594440 -0.774560
+vn -0.076205 -0.434248 -0.897549
+vn -0.839991 0.373760 -0.393323
+vn -0.894253 -0.239418 0.378124
+vn -0.898038 -0.310404 0.311716
+vn -0.022645 -0.632557 0.774163
+vn 0.876614 -0.349284 0.330882
+vn 0.009033 -0.800653 0.599048
+vn 0.835536 0.293435 -0.464461
+vn -0.018311 0.618824 -0.785302
+vn 0.010926 0.791681 -0.610797
+vn 0.832240 0.442793 -0.333537
+vn -0.000519 -0.990844 0.134983
+vn 0.897763 -0.350475 0.266732
+vn 0.818690 0.573901 0.018708
+vn -0.818232 0.490036 -0.300516
+vn -0.907895 -0.411145 0.081545
+vn 0.906888 -0.412427 0.086306
+vn -0.000702 0.999908 0.011505
+vn -0.818995 0.573565 0.015412
+vn -0.854579 -0.142338 0.499405
+vn -0.195227 0.552965 0.809992
+vn -0.795373 -0.190832 0.575243
+vn 0.216712 -0.392468 -0.893857
+vn -0.653981 -0.648549 -0.389386
+vn -0.504532 -0.833613 -0.224738
+vn 0.591449 0.745109 0.308115
+vn 0.806452 0.310282 -0.503281
+vn 0.458266 0.868343 0.189520
+vn 0.725089 0.398663 -0.561480
+vn 0.000000 -0.290963 0.956725
+vn 0.293558 -0.466018 -0.834620
+vn -0.212378 -0.976959 0.020753
+vn -0.266366 0.643239 0.717795
+vn -0.638081 -0.318247 0.701102
+vn 0.536119 0.404065 -0.741111
+vn -0.446303 0.675619 0.586779
+vn 0.097018 0.986572 -0.131230
+vn -0.822169 -0.123173 -0.555712
+vn 0.401288 -0.591693 -0.699179
+vn 0.992309 0.010376 0.123173
+vn -0.049318 -0.868282 -0.493576
+vn 0.080538 -0.943175 -0.322367
+vn -0.995300 0.069979 -0.066836
+vn -0.088107 0.868618 0.487533
+vn -0.012116 0.956328 0.291940
+vn 0.991729 0.112186 0.061922
+vn 0.991791 -0.030000 -0.124241
+vn -0.998230 0.057222 -0.015503
+vn -0.989380 -0.132511 -0.059481
+vn -0.038514 0.957183 0.286874
+vn 0.032655 -0.911344 -0.410260
+vn -0.056154 0.575152 -0.816095
+vn 0.236152 0.890469 -0.388897
+vn -0.396130 0.662160 -0.636067
+vn 0.165960 0.935514 -0.311838
+vn -0.057833 0.948668 0.310831
+vn -0.690268 0.720725 0.063601
+vn -0.049715 0.978240 0.201392
+vn -0.429090 0.720725 -0.544389
+vn -0.266274 0.944823 -0.190741
+vn -0.644856 0.763634 -0.031190
+vn -0.231605 0.799768 -0.553789
+vn -0.442427 0.888028 0.125034
+vn -0.337809 0.932249 0.129398
+vn 0.495621 0.803797 -0.328929
+vn -0.139500 0.849117 -0.509384
+vn 0.284829 0.892453 0.349834
+vn 0.195593 0.935453 0.294320
+vn 0.031190 0.992309 -0.119572
+vn 0.393933 0.852138 -0.344432
+vn 0.231727 0.852657 0.468245
+vn 0.481765 0.852443 -0.202948
+vn 0.144047 0.899197 0.413129
+vn -0.481765 0.852443 0.202948
+vn -0.379284 0.899075 0.218513
+vn -0.231727 0.852657 -0.468245
+vn -0.144047 0.899197 -0.413129
+vn 0.379284 0.899075 -0.218513
+vn 0.000000 0.999969 0.000000
+vn -0.271096 0.962523 0.003357
+vn -0.158483 0.725394 0.669790
+vn -0.054872 0.763756 0.643147
+vn 0.467757 0.870174 -0.154820
+vn -0.160894 0.986816 0.015992
+vn 0.580432 0.633412 0.511704
+vn 0.487106 0.696219 0.527207
+vn 0.181371 0.935850 0.302042
+vn 0.381054 0.919095 -0.099979
+vn -0.012085 0.993591 0.112156
+vn 0.633869 0.767083 -0.098697
+vn -0.023438 0.999695 -0.000610
+vn -0.307260 0.773614 -0.554094
+vn -0.239937 0.838404 -0.489364
+vn 0.338725 0.547472 -0.765160
+vn 0.367931 0.625477 -0.688009
+vn 0.584399 0.786615 -0.199164
+vn 0.191534 0.903684 -0.382885
+vn 0.000000 0.818537 -0.574419
+vn -0.574419 0.818537 0.000000
+vn 0.000000 0.879940 -0.475051
+vn 0.574419 0.818537 0.000000
+vn 0.000000 0.818537 0.574419
+vn 0.475051 0.879940 0.000000
+vn -0.475051 0.879940 0.000000
+vn 0.000000 1.000000 0.000000
+vn 0.000000 0.879940 0.475051
+vn 0.571978 0.818537 -0.052919
+vn -0.052919 0.818537 -0.571978
+vn -0.043764 0.879940 -0.473037
+vn 0.052919 0.818537 0.571978
+vn 0.473037 0.879940 -0.043764
+vn -0.571978 0.818537 0.052919
+vn -0.473037 0.879940 0.043764
+vn 0.043764 0.879940 0.473037
+vn 0.126743 0.672292 0.729301
+vn 0.245582 0.969207 -0.017457
+vn 0.152806 0.986908 0.051241
+vn -0.651234 0.525712 0.547227
+vn -0.588885 0.620136 0.518265
+vn -0.532426 0.822596 -0.199530
+vn -0.490616 0.865688 -0.099307
+vn 0.054537 0.741386 0.668844
+vn -0.247780 0.913144 0.323588
+vn -0.114994 0.681692 0.722526
+vn 0.256691 0.964721 0.057924
+vn 0.146458 0.985015 0.090793
+vn -0.787591 0.544725 0.287973
+vn -0.717185 0.637654 0.281045
+vn -0.415876 0.827754 -0.376598
+vn -0.409742 0.871731 -0.268532
+vn -0.160924 0.750938 0.640431
+vn -0.324259 0.922025 0.211280
+vn 0.494247 0.476760 -0.726890
+vn -0.058931 0.935575 -0.348155
+vn 0.514542 0.560930 -0.648488
+vn 0.912168 0.408368 -0.033601
+vn 0.358959 0.867183 0.345103
+vn 0.860164 0.504379 -0.075137
+vn 0.057039 0.940367 -0.335276
+vn 0.521195 0.820948 -0.233192
+vn 0.402661 0.883816 0.238044
+vn 0.842219 0.318247 0.435163
+vn 0.463088 0.886288 -0.004791
+vn 0.465773 0.877804 0.111637
+vn 0.204688 0.281747 0.937376
+vn 0.779321 0.408032 0.475509
+vn -0.174413 0.849788 0.497391
+vn -0.061403 0.847621 0.526994
+vn 0.407910 0.713492 0.569628
+vn 0.252083 0.377850 0.890866
+vn -0.013184 0.302805 -0.952940
+vn -0.729484 0.369488 -0.575549
+vn -0.063173 0.400922 -0.913907
+vn 0.307840 0.844020 -0.439131
+vn -0.408429 0.910672 -0.061739
+vn 0.202307 0.848476 -0.488968
+vn -0.655599 0.456038 -0.601825
+vn -0.257546 0.741264 -0.619800
+vn -0.390057 0.903623 -0.176885
+vn 0.295144 0.944853 -0.141820
+vn 0.329356 0.484573 -0.810358
+vn 0.249794 0.566363 -0.785363
+vn -0.511460 0.851070 -0.118503
+vn -0.445540 0.869472 -0.213202
+vn -0.477248 0.390790 -0.787072
+vn -0.417249 0.488815 -0.766076
+vn 0.221503 0.947020 -0.232459
+vn -0.111209 0.815882 -0.567400
+vn -0.035310 0.000000 0.999359
+vn 0.758263 0.000000 -0.651936
+vn -0.803919 0.000000 -0.594684
+vn 0.999817 0.000000 0.017792
+vn -0.737236 0.000000 0.675588
+vn 0.700674 0.000000 0.713462
+vn -0.999115 0.000000 0.041444
+vn -0.032258 0.000000 -0.999451
+s 1
+f 4/1/1 1/2/2 8/3/3
+f 1/4/2 2/5/4 5/6/5
+f 2/5/4 3/7/6 6/8/7
+f 3/9/6 4/1/1 7/10/8
+f 8/3/3 5/11/5 9/12/9
+f 6/8/7 7/13/8 11/14/10
+f 7/10/8 8/3/3 11/15/10
+f 5/6/5 6/8/7 9/16/9
+f 12/17/11 9/12/9 13/18/12
+f 9/16/9 10/19/13 13/20/12
+f 10/19/13 11/14/10 13/20/12
+f 11/15/10 12/17/11 13/18/12
+f 17/21/14 18/22/15 25/23/16
+f 19/24/17 20/25/18 27/26/19
+f 14/27/20 15/28/21 23/29/22
+f 21/30/23 14/27/20 29/31/24
+f 16/32/25 17/21/14 24/33/26
+f 18/34/15 19/24/17 26/35/27
+f 20/25/18 21/30/23 28/36/28
+f 15/28/21 16/32/25 23/29/22
+f 29/31/24 22/37/29 37/38/30
+f 24/33/26 25/23/16 32/39/31
+f 26/35/27 27/26/19 34/40/32
+f 28/36/28 29/31/24 36/41/33
+f 23/29/22 24/33/26 31/42/34
+f 25/23/16 26/43/27 33/44/35
+f 27/26/19 28/36/28 35/45/36
+f 22/37/29 23/29/22 30/46/37
+f 33/44/35 34/47/32 41/48/38
+f 35/45/36 36/41/33 43/49/39
+f 30/46/37 31/42/34 38/50/40
+f 37/38/30 30/46/37 45/51/41
+f 32/39/31 33/44/35 40/52/42
+f 34/40/32 35/45/36 42/53/43
+f 36/41/33 37/38/30 44/54/44
+f 31/42/34 32/39/31 39/55/45
+f 42/53/43 43/49/39 51/56/46
+f 44/54/44 45/51/41 53/57/47
+f 39/55/45 40/52/42 48/58/48
+f 41/48/38 42/59/43 50/60/49
+f 43/49/39 44/54/44 52/61/50
+f 38/50/40 39/55/45 47/62/51
+f 45/51/41 38/50/40 46/63/52
+f 40/52/42 41/48/38 49/64/53
+f 51/56/46 52/61/50 60/65/54
+f 46/63/52 47/62/51 55/66/55
+f 53/57/47 46/63/52 54/67/56
+f 48/58/48 49/64/53 57/68/57
+f 50/69/49 51/56/46 59/70/58
+f 52/61/50 53/57/47 61/71/59
+f 47/62/51 48/58/48 56/72/60
+f 49/64/53 50/60/49 58/73/61
+f 60/65/54 61/71/59 69/74/62
+f 55/66/55 56/72/60 64/75/63
+f 57/68/57 58/73/61 66/76/64
+f 59/70/58 60/65/54 68/77/65
+f 54/67/56 55/66/55 62/78/66
+f 61/71/59 54/67/56 62/78/66
+f 56/72/60 57/68/57 65/79/67
+f 58/80/61 59/70/58 66/81/64
+f 62/78/66 63/82/68 70/83/69
+f 69/74/62 62/78/66 70/83/69
+f 64/75/63 65/79/67 73/84/70
+f 66/81/64 67/85/71 74/86/72
+f 68/77/65 69/74/62 77/87/73
+f 63/82/68 64/75/63 72/88/74
+f 65/79/67 66/76/64 74/89/72
+f 67/85/71 68/77/65 76/90/75
+f 71/91/76 72/88/74 80/92/77
+f 73/84/70 74/89/72 81/93/78
+f 75/94/79 76/90/75 84/95/80
+f 70/83/69 71/91/76 79/96/81
+f 77/87/73 70/83/69 85/97/82
+f 72/88/74 73/84/70 80/92/77
+f 74/86/72 75/94/79 83/98/83
+f 76/90/75 77/87/73 84/95/80
+f 80/92/77 81/93/78 88/99/84
+f 82/100/85 83/98/83 91/101/86
+f 84/95/80 85/97/82 92/102/87
+f 79/96/81 80/92/77 87/103/88
+f 81/93/78 82/104/85 89/105/89
+f 83/98/83 84/95/80 91/101/86
+f 78/106/90 79/96/81 87/103/88
+f 85/97/82 78/106/90 93/107/91
+f 89/105/89 90/108/92 97/109/93
+f 91/101/86 92/102/87 99/110/94
+f 86/111/95 87/103/88 94/112/96
+f 93/107/91 86/111/95 101/113/97
+f 88/99/84 89/105/89 96/114/98
+f 90/115/92 91/101/86 98/116/99
+f 92/102/87 93/107/91 100/117/100
+f 87/103/88 88/99/84 95/118/101
+f 98/116/99 99/110/94 107/119/102
+f 100/117/100 101/113/97 109/120/103
+f 95/118/101 96/114/98 104/121/104
+f 97/109/93 98/122/99 105/123/105
+f 99/110/94 100/117/100 108/124/106
+f 94/112/96 95/118/101 103/125/107
+f 101/113/97 94/112/96 109/120/103
+f 96/114/98 97/109/93 105/123/105
+f 107/119/102 108/124/106 115/126/108
+f 102/127/109 103/125/107 110/128/110
+f 109/120/103 102/127/109 110/128/110
+f 104/121/104 105/123/105 113/129/111
+f 106/130/112 107/119/102 114/131/113
+f 108/124/106 109/120/103 117/132/114
+f 103/125/107 104/121/104 111/133/115
+f 105/123/105 106/134/112 114/135/113
+f 116/136/116 117/132/114 124/137/117
+f 111/133/115 112/138/118 119/139/119
+f 113/129/111 114/135/113 122/140/120
+f 115/126/108 116/136/116 123/141/121
+f 110/128/110 111/133/115 118/142/122
+f 117/132/114 110/128/110 118/142/122
+f 112/138/118 113/129/111 120/143/123
+f 114/131/113 115/126/108 122/144/120
+f 125/145/124 118/142/122 133/146/125
+f 120/143/123 121/147/126 129/148/127
+f 122/144/120 123/141/121 131/149/128
+f 124/137/117 125/145/124 133/146/125
+f 119/139/119 120/143/123 128/150/129
+f 121/147/126 122/140/120 129/148/127
+f 123/141/121 124/137/117 132/151/130
+f 118/142/122 119/139/119 127/152/131
+f 129/148/127 130/153/132 134/154/133
+f 131/149/128 132/151/130 134/154/133
+f 126/155/134 127/152/131 134/154/133
+f 133/146/125 126/155/134 134/154/133
+f 128/150/129 129/148/127 134/154/133
+f 130/156/132 131/149/128 134/154/133
+f 132/151/130 133/146/125 134/154/133
+f 127/152/131 128/150/129 134/154/133
+f 136/157/135 137/158/136 143/159/137
+f 138/160/138 139/161/139 144/162/140
+f 140/163/141 135/164/142 141/165/143
+f 135/164/142 136/157/135 141/165/143
+f 137/158/136 138/166/138 144/167/140
+f 139/161/139 140/163/141 146/168/144
+f 143/159/137 144/167/140 150/169/145
+f 145/170/146 146/168/144 152/171/147
+f 142/172/148 143/159/137 149/173/149
+f 144/162/140 145/170/146 151/174/150
+f 146/168/144 141/165/143 147/175/151
+f 141/165/143 142/172/148 148/176/152
+f 154/177/153 159/178/154 164/179/155
+f 156/180/156 155/181/157 163/182/158
+f 158/183/159 157/184/160 160/185/161
+f 159/178/154 158/183/159 160/185/161
+f 155/186/157 154/177/153 163/187/158
+f 157/184/160 156/180/156 161/188/162
+f 147/175/151 148/176/152 153/189/163
+f 149/173/149 150/169/145 153/189/163
+f 151/174/150 152/171/147 153/189/163
+f 148/176/152 149/173/149 153/189/163
+f 150/190/145 151/174/150 153/189/163
+f 152/171/147 147/175/151 153/189/163
+f 162/191/164 163/182/158 169/192/165
+f 164/179/155 165/193/166 170/194/167
+f 161/188/162 162/191/164 167/195/168
+f 163/187/158 164/179/155 169/196/165
+f 165/193/166 160/185/161 171/197/169
+f 160/185/161 161/188/162 166/198/170
+f 166/198/170 167/195/168 172/199/171
+f 168/200/172 169/192/165 172/199/171
+f 170/194/167 171/197/169 172/199/171
+f 167/195/168 168/200/172 172/199/171
+f 169/196/165 170/194/167 172/199/171
+f 171/197/169 166/198/170 172/199/171
+f 176/201/173 173/202/174 177/203/175
+f 173/204/174 174/205/176 177/206/175
+f 174/205/176 175/207/177 179/208/178
+f 175/207/177 176/201/173 179/208/178
+f 180/209/179 177/203/175 184/210/180
+f 178/211/181 179/208/178 182/212/182
+f 179/208/178 180/209/179 183/213/183
+f 177/206/175 178/211/181 181/214/184
+f 184/210/180 181/215/184 185/216/185
+f 181/214/184 182/212/182 185/216/185
+f 182/212/182 183/213/183 185/216/185
+f 183/213/183 184/210/180 185/216/185
+f 189/217/186 188/218/187 193/219/188
+f 186/220/189 189/217/186 193/219/188
+f 187/221/190 186/220/189 190/222/191
+f 188/218/187 187/221/190 192/223/192
+f 193/219/188 192/223/192 194/224/193
+f 190/222/191 193/219/188 194/224/193
+f 191/225/194 190/222/191 194/224/193
+f 192/223/192 191/225/194 194/224/193
+f 198/217/195 197/218/196 201/223/197
+f 195/220/198 198/217/195 202/219/199
+f 196/221/200 195/220/198 200/225/201
+f 197/218/196 196/221/200 201/223/197
+f 202/219/199 201/223/197 203/224/202
+f 199/222/203 202/219/199 203/224/202
+f 200/225/201 199/222/203 203/224/202
+f 201/223/197 200/225/201 203/224/202
+f 207/217/204 206/218/205 211/219/206
+f 204/220/207 207/217/204 208/222/208
+f 205/221/209 204/220/207 208/222/208
+f 206/218/205 205/221/209 209/225/210
+f 211/219/206 210/223/211 212/224/212
+f 208/222/208 211/219/206 212/224/212
+f 209/225/210 208/222/208 212/224/212
+f 210/223/211 209/225/210 212/224/212
+f 216/217/213 215/218/214 219/223/215
+f 213/220/216 216/217/213 220/219/217
+f 214/221/218 213/220/216 218/225/219
+f 215/218/214 214/221/218 218/225/219
+f 220/219/217 219/223/215 221/224/220
+f 217/222/221 220/219/217 221/224/220
+f 218/225/219 217/222/221 221/224/220
+f 219/223/215 218/225/219 221/224/220
+f 225/217/222 224/218/223 229/219/224
+f 222/220/225 225/217/222 226/222/226
+f 223/221/227 222/220/225 226/222/226
+f 224/218/223 223/221/227 227/225/228
+f 229/219/224 228/223/229 230/224/230
+f 226/222/226 229/219/224 230/224/230
+f 227/225/228 226/222/226 230/224/230
+f 228/223/229 227/225/228 230/224/230
+f 234/226/231 233/227/232 238/228/233
+f 231/229/234 234/226/231 238/228/233
+f 232/230/235 231/229/234 235/231/236
+f 233/227/232 232/230/235 237/232/237
+f 238/228/233 237/232/237 239/233/238
+f 235/231/236 238/228/233 239/233/238
+f 236/234/239 235/231/236 239/233/238
+f 237/232/237 236/234/239 239/233/238
+f 243/226/240 242/227/241 246/232/242
+f 240/229/243 243/226/240 247/228/244
+f 241/230/245 240/229/243 245/234/246
+f 242/227/241 241/230/245 246/232/242
+f 247/228/244 246/232/242 248/233/212
+f 244/231/247 247/228/244 248/233/212
+f 245/234/246 244/231/247 248/233/212
+f 246/232/242 245/234/246 248/233/212
+f 252/226/248 251/227/249 255/232/250
+f 249/229/251 252/226/248 253/231/252
+f 250/230/253 249/229/251 254/234/254
+f 251/227/249 250/230/253 255/232/250
+f 256/228/255 255/232/250 257/233/256
+f 253/231/252 256/228/255 257/233/256
+f 254/234/254 253/231/252 257/233/256
+f 255/232/250 254/234/254 257/233/256
+f 261/226/257 260/227/258 264/232/259
+f 258/229/260 261/226/257 262/231/261
+f 259/230/262 258/229/260 263/234/263
+f 260/227/258 259/230/262 263/234/263
+f 265/228/264 264/232/259 266/233/265
+f 262/231/261 265/228/264 266/233/265
+f 263/234/263 262/231/261 266/233/265
+f 264/232/259 263/234/263 266/233/265
+f 270/226/266 269/227/267 274/228/268
+f 267/229/269 270/226/266 274/228/268
+f 268/230/270 267/229/269 271/231/271
+f 269/227/267 268/230/270 273/232/272
+f 274/228/268 273/232/272 275/233/273
+f 271/231/271 274/228/268 275/233/273
+f 272/234/274 271/231/271 275/233/273
+f 273/232/272 272/234/274 275/233/273
+f 279/226/275 278/227/276 282/232/277
+f 276/229/278 279/226/275 283/228/279
+f 277/230/280 276/229/278 281/234/281
+f 278/227/276 277/230/280 282/232/277
+f 283/228/279 282/232/277 284/233/282
+f 280/231/283 283/228/279 284/233/282
+f 281/234/281 280/231/283 284/233/282
+f 282/232/277 281/234/281 284/233/282
+f 288/226/284 287/227/285 292/228/286
+f 285/229/287 288/226/284 292/228/286
+f 286/230/288 285/229/287 289/231/289
+f 287/227/285 286/230/288 291/232/290
+f 292/228/286 291/232/290 293/233/291
+f 289/231/289 292/228/286 293/233/291
+f 290/234/292 289/231/289 293/233/291
+f 291/232/290 290/234/292 293/233/291
+f 297/226/293 296/227/294 300/232/295
+f 294/229/296 297/226/293 298/231/297
+f 295/230/298 294/229/296 299/234/299
+f 296/227/294 295/230/298 300/232/295
+f 301/228/300 300/232/295 302/233/301
+f 298/231/297 301/228/300 302/233/301
+f 299/234/299 298/231/297 302/233/301
+f 300/232/295 299/234/299 302/233/301
+f 19/24/17 18/34/15 307/34/302
+f 14/27/20 21/30/23 310/30/303
+f 15/28/21 14/27/20 304/28/304
+f 18/22/15 17/21/14 307/22/302
+f 21/30/23 20/25/18 309/25/305
+f 17/21/14 16/32/25 306/21/306
+f 20/25/18 19/24/17 308/24/307
+f 16/32/25 15/28/21 305/32/308
+f 1/2/2 5/11/5 8/3/3
+f 2/5/4 6/8/7 5/6/5
+f 3/7/6 7/13/8 6/8/7
+f 4/1/1 8/3/3 7/10/8
+f 12/17/11 8/3/3 9/12/9
+f 10/19/13 6/8/7 11/14/10
+f 8/3/3 12/17/11 11/15/10
+f 6/8/7 10/19/13 9/16/9
+f 18/22/15 26/43/27 25/23/16
+f 20/25/18 28/36/28 27/26/19
+f 22/37/29 14/27/20 23/29/22
+f 14/27/20 22/37/29 29/31/24
+f 17/21/14 25/23/16 24/33/26
+f 19/24/17 27/26/19 26/35/27
+f 21/30/23 29/31/24 28/36/28
+f 16/32/25 24/33/26 23/29/22
+f 22/37/29 30/46/37 37/38/30
+f 25/23/16 33/44/35 32/39/31
+f 27/26/19 35/45/36 34/40/32
+f 29/31/24 37/38/30 36/41/33
+f 24/33/26 32/39/31 31/42/34
+f 26/43/27 34/47/32 33/44/35
+f 28/36/28 36/41/33 35/45/36
+f 23/29/22 31/42/34 30/46/37
+f 34/47/32 42/59/43 41/48/38
+f 36/41/33 44/54/44 43/49/39
+f 31/42/34 39/55/45 38/50/40
+f 30/46/37 38/50/40 45/51/41
+f 33/44/35 41/48/38 40/52/42
+f 35/45/36 43/49/39 42/53/43
+f 37/38/30 45/51/41 44/54/44
+f 32/39/31 40/52/42 39/55/45
+f 50/69/49 42/53/43 51/56/46
+f 52/61/50 44/54/44 53/57/47
+f 47/62/51 39/55/45 48/58/48
+f 49/64/53 41/48/38 50/60/49
+f 51/56/46 43/49/39 52/61/50
+f 46/63/52 38/50/40 47/62/51
+f 53/57/47 45/51/41 46/63/52
+f 48/58/48 40/52/42 49/64/53
+f 59/70/58 51/56/46 60/65/54
+f 54/67/56 46/63/52 55/66/55
+f 61/71/59 53/57/47 54/67/56
+f 56/72/60 48/58/48 57/68/57
+f 58/80/61 50/69/49 59/70/58
+f 60/65/54 52/61/50 61/71/59
+f 55/66/55 47/62/51 56/72/60
+f 57/68/57 49/64/53 58/73/61
+f 68/77/65 60/65/54 69/74/62
+f 63/82/68 55/66/55 64/75/63
+f 65/79/67 57/68/57 66/76/64
+f 67/85/71 59/70/58 68/77/65
+f 55/66/55 63/82/68 62/78/66
+f 69/74/62 61/71/59 62/78/66
+f 64/75/63 56/72/60 65/79/67
+f 59/70/58 67/85/71 66/81/64
+f 63/82/68 71/91/76 70/83/69
+f 77/87/73 69/74/62 70/83/69
+f 72/88/74 64/75/63 73/84/70
+f 67/85/71 75/94/79 74/86/72
+f 76/90/75 68/77/65 77/87/73
+f 71/91/76 63/82/68 72/88/74
+f 73/84/70 65/79/67 74/89/72
+f 75/94/79 67/85/71 76/90/75
+f 79/96/81 71/91/76 80/92/77
+f 74/89/72 82/104/85 81/93/78
+f 83/98/83 75/94/79 84/95/80
+f 78/106/90 70/83/69 79/96/81
+f 70/83/69 78/106/90 85/97/82
+f 73/84/70 81/93/78 80/92/77
+f 82/100/85 74/86/72 83/98/83
+f 77/87/73 85/97/82 84/95/80
+f 81/93/78 89/105/89 88/99/84
+f 90/115/92 82/100/85 91/101/86
+f 85/97/82 93/107/91 92/102/87
+f 80/92/77 88/99/84 87/103/88
+f 82/104/85 90/108/92 89/105/89
+f 84/95/80 92/102/87 91/101/86
+f 86/111/95 78/106/90 87/103/88
+f 78/106/90 86/111/95 93/107/91
+f 90/108/92 98/122/99 97/109/93
+f 92/102/87 100/117/100 99/110/94
+f 87/103/88 95/118/101 94/112/96
+f 86/111/95 94/112/96 101/113/97
+f 89/105/89 97/109/93 96/114/98
+f 91/101/86 99/110/94 98/116/99
+f 93/107/91 101/113/97 100/117/100
+f 88/99/84 96/114/98 95/118/101
+f 106/130/112 98/116/99 107/119/102
+f 108/124/106 100/117/100 109/120/103
+f 103/125/107 95/118/101 104/121/104
+f 98/122/99 106/134/112 105/123/105
+f 107/119/102 99/110/94 108/124/106
+f 102/127/109 94/112/96 103/125/107
+f 94/112/96 102/127/109 109/120/103
+f 104/121/104 96/114/98 105/123/105
+f 108/124/106 116/136/116 115/126/108
+f 103/125/107 111/133/115 110/128/110
+f 117/132/114 109/120/103 110/128/110
+f 112/138/118 104/121/104 113/129/111
+f 107/119/102 115/126/108 114/131/113
+f 116/136/116 108/124/106 117/132/114
+f 104/121/104 112/138/118 111/133/115
+f 113/129/111 105/123/105 114/135/113
+f 117/132/114 125/145/124 124/137/117
+f 112/138/118 120/143/123 119/139/119
+f 121/147/126 113/129/111 122/140/120
+f 116/136/116 124/137/117 123/141/121
+f 111/133/115 119/139/119 118/142/122
+f 125/145/124 117/132/114 118/142/122
+f 113/129/111 121/147/126 120/143/123
+f 115/126/108 123/141/121 122/144/120
+f 118/142/122 126/155/134 133/146/125
+f 128/150/129 120/143/123 129/148/127
+f 130/156/132 122/144/120 131/149/128
+f 132/151/130 124/137/117 133/146/125
+f 127/152/131 119/139/119 128/150/129
+f 122/140/120 130/153/132 129/148/127
+f 131/149/128 123/141/121 132/151/130
+f 126/155/134 118/142/122 127/152/131
+f 142/172/148 136/157/135 143/159/137
+f 139/161/139 145/170/146 144/162/140
+f 146/168/144 140/163/141 141/165/143
+f 136/157/135 142/172/148 141/165/143
+f 143/159/137 137/158/136 144/167/140
+f 145/170/146 139/161/139 146/168/144
+f 149/173/149 143/159/137 150/169/145
+f 151/174/150 145/170/146 152/171/147
+f 148/176/152 142/172/148 149/173/149
+f 150/190/145 144/162/140 151/174/150
+f 152/171/147 146/168/144 147/175/151
+f 147/175/151 141/165/143 148/176/152
+f 159/178/154 165/193/166 164/179/155
+f 162/191/164 156/180/156 163/182/158
+f 157/184/160 161/188/162 160/185/161
+f 165/193/166 159/178/154 160/185/161
+f 154/177/153 164/179/155 163/187/158
+f 156/180/156 162/191/164 161/188/162
+f 168/200/172 162/191/164 169/192/165
+f 165/193/166 171/197/169 170/194/167
+f 162/191/164 168/200/172 167/195/168
+f 164/179/155 170/194/167 169/196/165
+f 160/185/161 166/198/170 171/197/169
+f 161/188/162 167/195/168 166/198/170
+f 180/209/179 176/201/173 177/203/175
+f 174/205/176 178/211/181 177/206/175
+f 178/211/181 174/205/176 179/208/178
+f 176/201/173 180/209/179 179/208/178
+f 177/203/175 181/215/184 184/210/180
+f 179/208/178 183/213/183 182/212/182
+f 180/209/179 184/210/180 183/213/183
+f 178/211/181 182/212/182 181/214/184
+f 188/218/187 192/223/192 193/219/188
+f 190/222/191 186/220/189 193/219/188
+f 191/225/194 187/221/190 190/222/191
+f 187/221/190 191/225/194 192/223/192
+f 202/219/199 198/217/195 201/223/197
+f 199/222/203 195/220/198 202/219/199
+f 195/220/198 199/222/203 200/225/201
+f 196/221/200 200/225/201 201/223/197
+f 206/218/205 210/223/211 211/219/206
+f 207/217/204 211/219/206 208/222/208
+f 209/225/210 205/221/209 208/222/208
+f 210/223/211 206/218/205 209/225/210
+f 220/219/217 216/217/213 219/223/215
+f 217/222/221 213/220/216 220/219/217
+f 213/220/216 217/222/221 218/225/219
+f 219/223/215 215/218/214 218/225/219
+f 224/218/223 228/223/229 229/219/224
+f 225/217/222 229/219/224 226/222/226
+f 227/225/228 223/221/227 226/222/226
+f 228/223/229 224/218/223 227/225/228
+f 233/227/232 237/232/237 238/228/233
+f 235/231/236 231/229/234 238/228/233
+f 236/234/239 232/230/235 235/231/236
+f 232/230/235 236/234/239 237/232/237
+f 247/228/244 243/226/240 246/232/242
+f 244/231/247 240/229/243 247/228/244
+f 240/229/243 244/231/247 245/234/246
+f 241/230/245 245/234/246 246/232/242
+f 256/228/255 252/226/248 255/232/250
+f 252/226/248 256/228/255 253/231/252
+f 249/229/251 253/231/252 254/234/254
+f 250/230/253 254/234/254 255/232/250
+f 265/228/264 261/226/257 264/232/259
+f 261/226/257 265/228/264 262/231/261
+f 258/229/260 262/231/261 263/234/263
+f 264/232/259 260/227/258 263/234/263
+f 269/227/267 273/232/272 274/228/268
+f 271/231/271 267/229/269 274/228/268
+f 272/234/274 268/230/270 271/231/271
+f 268/230/270 272/234/274 273/232/272
+f 283/228/279 279/226/275 282/232/277
+f 280/231/283 276/229/278 283/228/279
+f 276/229/278 280/231/283 281/234/281
+f 277/230/280 281/234/281 282/232/277
+f 287/227/285 291/232/290 292/228/286
+f 289/231/289 285/229/287 292/228/286
+f 290/234/292 286/230/288 289/231/289
+f 286/230/288 290/234/292 291/232/290
+f 301/228/300 297/226/293 300/232/295
+f 297/226/293 301/228/300 298/231/297
+f 294/229/296 298/231/297 299/234/299
+f 295/230/298 299/234/299 300/232/295
+f 308/24/307 19/24/17 307/34/302
+f 303/27/309 14/27/20 310/30/303
+f 14/27/20 303/27/309 304/28/304
+f 17/21/14 306/21/306 307/22/302
+f 310/30/303 21/30/23 309/25/305
+f 16/32/25 305/32/308 306/21/306
+f 309/25/305 20/25/18 308/24/307
+f 15/28/21 304/28/304 305/32/308

BIN
res/cherry.png


BIN
res/cherryS.png


+ 1226 - 0
res/lantern.obj

@@ -0,0 +1,1226 @@
+# Blender v2.67 (sub 0) OBJ File: 'Asia Lantern.blend'
+# www.blender.org
+o Circle
+v 0.315069 15.706526 -5.326677
+v 0.163536 15.706526 -5.175143
+v 0.315069 15.706526 -5.023610
+v 0.466602 15.706526 -5.175143
+v 0.315069 18.155542 -5.326677
+v 0.163536 18.155542 -5.175143
+v 0.315069 18.155542 -5.023610
+v 0.466602 18.155542 -5.175143
+v 0.296938 18.857630 -4.981330
+v 0.315752 18.789495 -4.535065
+v 0.781342 18.586023 -5.043220
+v 0.800156 18.517889 -4.596954
+v 0.783140 18.033648 -5.127631
+v 0.801954 17.965513 -4.681365
+v 0.300534 17.752878 -5.150152
+v 0.319348 17.684744 -4.703887
+v -0.183869 18.024485 -5.088263
+v -0.165055 17.956350 -4.641997
+v -0.185667 18.576860 -5.003852
+v -0.166853 18.508726 -4.557586
+v 0.308143 18.852795 -5.666987
+v 0.308143 18.852795 -5.196709
+v 0.811831 18.561991 -5.666987
+v 0.811831 18.561991 -5.196709
+v 0.811831 17.980383 -5.666987
+v 0.811831 17.980383 -5.196709
+v 0.308143 17.689579 -5.666987
+v 0.308143 17.689579 -5.196709
+v -0.195544 17.980383 -5.666987
+v -0.195544 17.980383 -5.196709
+v -0.195544 18.561991 -5.666987
+v -0.195544 18.561991 -5.196709
+v -0.000000 0.000000 0.662828
+v -0.977308 0.000000 1.415174
+v -1.211778 0.000000 2.543673
+v 0.000000 0.000000 3.107922
+v 1.222936 0.000000 2.543673
+v 0.977308 0.000000 1.415174
+v -0.000000 1.814562 0.869366
+v -0.778180 2.048237 1.253098
+v -0.778180 2.515587 2.020564
+v 0.000000 2.749263 2.404295
+v 0.778180 2.515587 2.020564
+v 0.778180 2.048237 1.253098
+v -0.137249 4.817820 -0.797272
+v -0.734138 4.939269 -0.474768
+v -0.734138 5.182166 0.170241
+v -0.137249 5.303616 0.492745
+v 0.459640 5.182166 0.170241
+v 0.459640 4.939269 -0.474768
+v -0.753145 7.574740 -1.246530
+v -1.173354 7.573902 -1.003923
+v -1.173354 7.572224 -0.518710
+v -0.753145 7.571386 -0.276104
+v -0.332936 7.572224 -0.518710
+v -0.332936 7.573902 -1.003923
+v -0.684520 10.103979 -0.836388
+v -1.104729 9.980496 -0.627556
+v -1.104729 9.733531 -0.209893
+v -0.684520 9.610050 -0.001061
+v -0.264311 9.733531 -0.209893
+v -0.264311 9.980496 -0.627556
+v -0.218251 14.531911 1.721486
+v -0.730526 14.440349 2.002718
+v -0.730526 14.257220 2.565181
+v -0.218251 14.165658 2.846414
+v 0.294024 14.257220 2.565181
+v 0.294024 14.440349 2.002718
+v 0.526167 16.633883 2.163079
+v -0.043746 16.671375 2.489975
+v -0.043745 16.746361 3.143767
+v 0.526167 16.783852 3.470664
+v 1.096079 16.746361 3.143767
+v 1.096079 16.671375 2.489975
+v 0.854299 19.491352 1.629618
+v 0.283867 19.679842 1.899684
+v 0.283867 20.056822 2.439819
+v 0.854300 20.245310 2.709887
+v 1.424732 20.056822 2.439819
+v 1.424732 19.679842 1.899684
+v 0.854299 21.741459 0.137772
+v 0.423277 21.946869 0.278247
+v 0.423277 22.357691 0.559199
+v 0.854300 22.563097 0.699676
+v 1.285322 22.357691 0.559199
+v 1.285322 21.946869 0.278247
+v 0.854299 23.088726 -2.111408
+v 0.396613 23.351490 -2.083483
+v 0.396613 23.877024 -2.027629
+v 0.854300 24.139786 -1.999699
+v 1.311986 23.877024 -2.027629
+v 1.311986 23.351490 -2.083483
+v 0.854299 23.264011 -5.745977
+v 0.456934 23.481382 -5.819345
+v 0.456934 23.916126 -5.966078
+v 0.854300 24.133499 -6.039442
+v 1.251665 23.916126 -5.966078
+v 1.251665 23.481382 -5.819345
+v 0.526167 21.672014 -7.693627
+v 0.230323 21.714703 -7.859012
+v 0.230323 21.800087 -8.189781
+v 0.526167 21.842779 -8.355165
+v 0.822011 21.800087 -8.189781
+v 0.822011 21.714703 -7.859012
+v 0.262121 19.760473 -7.825903
+v -0.029150 19.663389 -7.963214
+v -0.029150 19.469227 -8.237842
+v 0.262121 19.372147 -8.375155
+v 0.553393 19.469227 -8.237842
+v 0.553393 19.663389 -7.963214
+v 0.262121 18.514507 -5.864185
+v -0.019730 18.355225 -5.897478
+v -0.019730 18.036655 -5.964071
+v 0.262121 17.877373 -5.997369
+v 0.543973 18.036655 -5.964071
+v 0.543973 18.355225 -5.897478
+v 0.262121 18.575788 -4.277331
+v -0.032101 18.442966 -4.171439
+v -0.032101 18.177313 -3.959656
+v 0.262121 18.044489 -3.853767
+v 0.556344 18.177313 -3.959656
+v 0.556344 18.442966 -4.171439
+v -0.014588 19.741299 -3.837670
+v -0.282785 19.768005 -3.685149
+v -0.282785 19.821411 -3.380098
+v -0.014588 19.848116 -3.227576
+v 0.253610 19.821411 -3.380098
+v 0.253610 19.768005 -3.685149
+v -0.515937 20.566839 -4.715347
+v -0.789700 20.713694 -4.656910
+v -0.789700 21.007410 -4.540025
+v -0.515937 21.154263 -4.481585
+v -0.242173 21.007410 -4.540025
+v -0.242173 20.713694 -4.656910
+v -1.049508 20.822485 -5.816574
+v -0.212726 15.549409 -4.602957
+v -0.212726 15.549409 -5.723851
+v 0.908168 15.549409 -5.723851
+v 0.908168 15.549409 -4.602957
+v -0.212726 15.834933 -4.602957
+v -0.212726 15.834933 -5.723851
+v 0.908168 15.834933 -5.723851
+v 0.908168 15.834933 -4.602957
+v -0.371738 15.483521 -4.443945
+v -0.371738 15.483521 -5.882864
+v 1.067180 15.483521 -5.882864
+v 1.067180 15.483521 -4.443945
+v -0.371738 14.991830 -4.443945
+v -0.371738 14.991830 -5.882864
+v 1.067180 14.991830 -5.882864
+v 1.067180 14.991830 -4.443945
+v -0.258240 14.836825 -4.557443
+v -0.258240 14.836825 -5.769365
+v 0.953682 14.836825 -5.769365
+v 0.953682 14.836825 -4.557443
+v -0.927481 14.836825 -3.888202
+v -0.927481 14.836825 -6.438607
+v 1.622923 14.836825 -6.438607
+v 1.622923 14.836825 -3.888202
+v -0.927481 14.378698 -3.888202
+v -0.927481 14.378698 -6.438607
+v 1.622923 14.378698 -6.438607
+v 1.622923 14.378698 -3.888202
+v -0.629047 14.378698 -4.186636
+v -0.629047 14.378698 -6.140172
+v 1.324489 14.378698 -6.140172
+v 1.324489 14.378698 -4.186636
+v -0.629047 11.769967 -4.186636
+v -0.629047 11.769967 -6.140172
+v 1.324489 11.769967 -6.140172
+v 1.324489 11.769967 -4.186636
+v -0.889285 11.769967 -3.926399
+v -0.889285 11.769967 -6.400410
+v 1.584726 11.769967 -6.400410
+v 1.584726 11.769967 -3.926399
+v -0.889285 11.298758 -3.926399
+v -0.889285 11.298758 -6.400410
+v 1.584726 11.298758 -6.400410
+v 1.584726 11.298758 -3.926399
+v -0.370416 11.298758 -4.445267
+v -0.370416 11.298758 -5.881541
+v 1.065858 11.298758 -5.881541
+v 1.065858 11.298758 -4.445267
+v -0.461898 11.164834 -4.353785
+v -0.461898 11.164834 -5.973023
+v 1.157340 11.164834 -5.973023
+v 1.157340 11.164834 -4.353785
+v -0.461898 10.750568 -4.353785
+v -0.461898 10.750568 -5.973023
+v 1.157340 10.750568 -5.973023
+v 1.157340 10.750568 -4.353785
+v -0.208124 10.579148 -4.607559
+v -0.208124 10.579148 -5.719249
+v 0.903566 10.579148 -5.719249
+v 0.903566 10.579148 -4.607559
+v -0.212726 15.834933 -4.602957
+v -0.212726 15.834933 -5.723851
+v -0.212726 15.549409 -5.723851
+v -0.212726 15.549409 -5.723851
+v -0.212726 15.549409 -5.723851
+v -0.212726 15.549409 -4.602957
+v -0.212726 15.549409 -4.602957
+v -0.212726 15.549409 -4.602957
+v 0.908168 15.834933 -5.723851
+v 0.908168 15.549409 -5.723851
+v 0.908168 15.549409 -5.723851
+v 0.908168 15.549409 -5.723851
+v 0.908168 15.834933 -4.602957
+v 0.908168 15.549409 -4.602957
+v 0.908168 15.549409 -4.602957
+v 0.908168 15.549409 -4.602957
+v -0.371738 15.483521 -5.882864
+v -0.371738 15.483521 -5.882864
+v -0.371738 15.483521 -5.882864
+v -0.371738 15.483521 -4.443945
+v -0.371738 15.483521 -4.443945
+v -0.371738 15.483521 -4.443945
+v 1.067180 15.483521 -5.882864
+v 1.067180 15.483521 -5.882864
+v 1.067180 15.483521 -5.882864
+v 1.067180 15.483521 -4.443945
+v 1.067180 15.483521 -4.443945
+v 1.067180 15.483521 -4.443945
+v -0.371738 14.991830 -5.882864
+v -0.371738 14.991830 -5.882864
+v -0.371738 14.991830 -5.882864
+v -0.371738 14.991830 -4.443945
+v -0.371738 14.991830 -4.443945
+v -0.371738 14.991830 -4.443945
+v 1.067180 14.991830 -5.882864
+v 1.067180 14.991830 -5.882864
+v 1.067180 14.991830 -5.882864
+v 1.067180 14.991830 -4.443945
+v 1.067180 14.991830 -4.443945
+v 1.067180 14.991830 -4.443945
+v -0.258240 14.836825 -5.769365
+v -0.258240 14.836825 -5.769365
+v -0.258240 14.836825 -5.769365
+v -0.258240 14.836825 -4.557443
+v -0.258240 14.836825 -4.557443
+v -0.258240 14.836825 -4.557443
+v 0.953682 14.836825 -5.769365
+v 0.953682 14.836825 -5.769365
+v 0.953682 14.836825 -5.769365
+v 0.953682 14.836825 -4.557443
+v 0.953682 14.836825 -4.557443
+v 0.953682 14.836825 -4.557443
+v -0.927481 14.836825 -6.438607
+v -0.927481 14.836825 -6.438607
+v -0.927481 14.836825 -6.438607
+v -0.927481 14.836825 -3.888202
+v -0.927481 14.836825 -3.888202
+v -0.927481 14.836825 -3.888202
+v 1.622923 14.836825 -6.438607
+v 1.622923 14.836825 -6.438607
+v 1.622923 14.836825 -6.438607
+v 1.622923 14.836825 -3.888202
+v 1.622923 14.836825 -3.888202
+v 1.622923 14.836825 -3.888202
+v -0.927481 14.378698 -6.438607
+v -0.927481 14.378698 -6.438607
+v -0.927481 14.378698 -6.438607
+v -0.927481 14.378698 -3.888202
+v -0.927481 14.378698 -3.888202
+v -0.927481 14.378698 -3.888202
+v 1.622923 14.378698 -6.438607
+v 1.622923 14.378698 -6.438607
+v 1.622923 14.378698 -6.438607
+v 1.622923 14.378698 -3.888202
+v 1.622923 14.378698 -3.888202
+v 1.622923 14.378698 -3.888202
+v -0.629047 14.378698 -6.140172
+v -0.629047 14.378698 -6.140172
+v -0.629047 14.378698 -6.140172
+v -0.629047 14.378698 -4.186636
+v -0.629047 14.378698 -4.186636
+v -0.629047 14.378698 -4.186636
+v 1.324489 14.378698 -6.140172
+v 1.324489 14.378698 -6.140172
+v 1.324489 14.378698 -6.140172
+v 1.324489 14.378698 -4.186636
+v 1.324489 14.378698 -4.186636
+v 1.324489 14.378698 -4.186636
+v -0.629047 11.769967 -6.140172
+v -0.629047 11.769967 -6.140172
+v -0.629047 11.769967 -6.140172
+v -0.629047 11.769967 -4.186636
+v -0.629047 11.769967 -4.186636
+v -0.629047 11.769967 -4.186636
+v 1.324489 11.769967 -6.140172
+v 1.324489 11.769967 -6.140172
+v 1.324489 11.769967 -6.140172
+v 1.324489 11.769967 -4.186636
+v 1.324489 11.769967 -4.186636
+v 1.324489 11.769967 -4.186636
+v -0.889285 11.769967 -6.400410
+v -0.889285 11.769967 -6.400410
+v -0.889285 11.769967 -6.400410
+v -0.889285 11.769967 -3.926399
+v -0.889285 11.769967 -3.926399
+v -0.889285 11.769967 -3.926399
+v 1.584726 11.769967 -6.400410
+v 1.584726 11.769967 -6.400410
+v 1.584726 11.769967 -6.400410
+v 1.584726 11.769967 -3.926399
+v 1.584726 11.769967 -3.926399
+v 1.584726 11.769967 -3.926399
+v -0.889285 11.298758 -6.400410
+v -0.889285 11.298758 -6.400410
+v -0.889285 11.298758 -6.400410
+v -0.889285 11.298758 -3.926399
+v -0.889285 11.298758 -3.926399
+v -0.889285 11.298758 -3.926399
+v 1.584726 11.298758 -6.400410
+v 1.584726 11.298758 -6.400410
+v 1.584726 11.298758 -6.400410
+v 1.584726 11.298758 -3.926399
+v 1.584726 11.298758 -3.926399
+v 1.584726 11.298758 -3.926399
+v -0.370416 11.298758 -5.881541
+v -0.370416 11.298758 -5.881541
+v -0.370416 11.298758 -5.881541
+v -0.370416 11.298758 -4.445267
+v -0.370416 11.298758 -4.445267
+v -0.370416 11.298758 -4.445267
+v 1.065858 11.298758 -5.881541
+v 1.065858 11.298758 -5.881541
+v 1.065858 11.298758 -5.881541
+v 1.065858 11.298758 -4.445267
+v 1.065858 11.298758 -4.445267
+v 1.065858 11.298758 -4.445267
+v -0.461898 11.164834 -5.973023
+v -0.461898 11.164834 -5.973023
+v -0.461898 11.164834 -5.973023
+v -0.461898 11.164834 -4.353785
+v -0.461898 11.164834 -4.353785
+v -0.461898 11.164834 -4.353785
+v 1.157340 11.164834 -5.973023
+v 1.157340 11.164834 -5.973023
+v 1.157340 11.164834 -5.973023
+v 1.157340 11.164834 -4.353785
+v 1.157340 11.164834 -4.353785
+v 1.157340 11.164834 -4.353785
+v -0.461898 10.750568 -5.973023
+v -0.461898 10.750568 -5.973023
+v -0.461898 10.750568 -5.973023
+v -0.461898 10.750568 -4.353785
+v -0.461898 10.750568 -4.353785
+v -0.461898 10.750568 -4.353785
+v 1.157340 10.750568 -5.973023
+v 1.157340 10.750568 -5.973023
+v 1.157340 10.750568 -5.973023
+v 1.157340 10.750568 -4.353785
+v 1.157340 10.750568 -4.353785
+v 1.157340 10.750568 -4.353785
+v -0.208124 10.579148 -5.719249
+v -0.208124 10.579148 -5.719249
+v -0.208124 10.579148 -5.719249
+v -0.208124 10.579148 -4.607559
+v -0.208124 10.579148 -4.607559
+v -0.208124 10.579148 -4.607559
+v 0.903566 10.579148 -5.719249
+v 0.903566 10.579148 -5.719249
+v 0.903566 10.579148 -5.719249
+v 0.903566 10.579148 -4.607559
+v 0.903566 10.579148 -4.607559
+v 0.903566 10.579148 -4.607559
+v -0.208124 10.272021 -5.719249
+v -0.208124 10.272021 -5.719249
+v -0.208124 10.272021 -4.607559
+v -0.208124 10.272021 -4.607559
+v 0.903566 10.272021 -5.719249
+v 0.903566 10.272021 -5.719249
+v 0.903566 10.272021 -4.607559
+v 0.903566 10.272021 -4.607559
+v -0.208124 10.272021 -4.607559
+v -0.208124 10.272021 -5.719249
+v 0.903566 10.272021 -5.719249
+v 0.903566 10.272021 -4.607559
+v -0.212726 15.834933 -4.602957
+v -0.212726 15.834933 -5.723851
+v 0.908168 15.834933 -5.723851
+v 0.908168 15.834933 -4.602957
+vt 0.272023 0.243082
+vt 0.330621 0.242220
+vt 0.340482 0.911864
+vt 0.389218 0.241356
+vt 0.447815 0.240494
+vt 0.399079 0.911001
+vt 0.506412 0.239630
+vt 0.516271 0.909275
+vt 0.521334 0.969158
+vt 0.521299 0.929186
+vt 0.570734 0.929143
+vt 0.274172 0.969381
+vt 0.274134 0.929412
+vt 0.323565 0.929365
+vt 0.323603 0.969334
+vt 0.372998 0.929318
+vt 0.373034 0.969289
+vt 0.422467 0.969245
+vt 0.583388 0.127161
+vt 0.531537 0.160682
+vt 0.580283 0.065494
+vt 0.471900 0.969201
+vt 0.471865 0.929230
+vt 0.422431 0.929274
+vt 0.587204 0.093915
+vt 0.492017 0.045169
+vt 0.553682 0.042064
+vt 0.283664 0.969020
+vt 0.283626 0.931082
+vt 0.330547 0.931036
+vt 0.330584 0.968975
+vt 0.377467 0.930990
+vt 0.377504 0.968929
+vt 0.424388 0.930945
+vt 0.424424 0.968883
+vt 0.471341 0.968839
+vt 0.589303 0.094124
+vt 0.560010 0.151324
+vt 0.554412 0.040156
+vt 0.518255 0.968796
+vt 0.518221 0.930861
+vt 0.565171 0.968754
+vt 0.471305 0.930903
+vt 0.564402 0.149789
+vt 0.500218 0.153021
+vt 0.593694 0.092589
+vt 0.205402 0.013668
+vt 0.246280 0.032412
+vt 0.233311 0.129843
+vt 0.058165 0.032402
+vt 0.098353 0.014340
+vt 0.109487 0.132427
+vt 0.151302 0.007603
+vt 0.190310 0.131100
+vt 0.291312 0.053324
+vt 0.277956 0.137527
+vt 0.025437 0.036222
+vt 0.066458 0.130551
+vt 0.150251 0.133962
+vt 0.113996 0.301059
+vt 0.188129 0.291592
+vt 0.077275 0.304508
+vt 0.151440 0.294960
+vt 0.221172 0.295251
+vt 0.022017 0.135678
+vt 0.041250 0.305094
+vt 0.119374 0.448372
+vt 0.176670 0.443992
+vt 0.092918 0.450392
+vt 0.254202 0.303803
+vt 0.205620 0.446191
+vt 0.066855 0.450543
+vt 0.066450 0.585383
+vt 0.147114 0.445261
+vt 0.119299 0.576752
+vt 0.176018 0.579881
+vt 0.092165 0.582067
+vt 0.148153 0.575444
+vt 0.231830 0.450778
+vt 0.202077 0.585695
+vt 0.228407 0.587118
+vt 0.231986 0.859767
+vt 0.056565 0.857675
+vt 0.141456 0.863656
+vt 0.200541 0.866533
+vt 0.114162 0.857811
+vt 0.230407 0.983322
+vt 0.086457 0.854907
+vt 0.043584 0.979905
+vt 0.139651 0.990721
+vt 0.170624 0.867997
+vt 0.199089 0.991592
+vt 0.109803 0.982835
+vt 0.229186 1.137027
+vt 0.077736 0.977623
+vt 0.042222 1.135115
+vt 0.136511 1.144788
+vt 0.169398 0.994797
+vt 0.196044 1.139818
+vt 0.106522 1.140788
+vt 0.166143 1.144294
+vt 0.159800 1.283613
+vt 0.211247 1.281421
+vt 0.076237 1.135458
+vt 0.084114 1.280231
+vt 0.134366 1.284556
+vt 0.184947 1.281508
+vt 0.108959 1.282948
+vt 0.157847 1.429164
+vt 0.209349 1.423722
+vt 0.058108 1.279533
+vt 0.082686 1.423656
+vt 0.132191 1.430811
+vt 0.182493 1.425133
+vt 0.106912 1.428385
+vt 0.152684 1.607513
+vt 0.195414 1.613382
+vt 0.055863 1.421429
+vt 0.087245 1.611519
+vt 0.130890 1.607872
+vt 0.173018 1.609730
+vt 0.108195 1.609417
+vt 0.112469 1.758594
+vt 0.146946 1.755370
+vt 0.162642 1.752685
+vt 0.063611 1.612222
+vt 0.096807 1.755698
+vt 0.113161 1.865836
+vt 0.129875 1.758091
+vt 0.143370 1.864526
+vt 0.180177 1.754149
+vt 0.158508 1.862041
+vt 0.079314 1.752964
+vt 0.098602 1.863025
+vt 0.097651 1.980427
+vt 0.127964 1.865844
+vt 0.125851 1.981686
+vt 0.175374 1.862352
+vt 0.154279 1.981750
+vt 0.082718 1.860716
+vt 0.081577 1.979956
+vt 0.110783 1.981188
+vt 0.141008 1.981899
+vt 0.111431 2.064190
+vt 0.137447 2.062510
+vt 0.170391 1.982143
+vt 0.165729 2.064879
+vt 0.097638 2.063769
+vt 0.124768 2.063432
+vt 0.150703 2.062424
+vt 0.135679 2.125188
+vt 0.102136 2.130377
+vt 0.146521 2.125450
+vt 0.081548 2.062820
+vt 0.113201 2.130026
+vt 0.135867 2.183583
+vt 0.105582 2.191697
+vt 0.124173 2.127242
+vt 0.159057 2.130435
+vt 0.146199 2.184602
+vt 0.088466 2.127895
+vt 0.115639 2.189953
+vt 0.123642 2.244133
+vt 0.125256 2.186196
+vt 0.156941 2.192937
+vt 0.092257 2.190484
+vt 0.665878 0.973006
+vt 0.851008 0.973006
+vt 0.665878 0.925848
+vt 0.665507 0.975067
+vt 0.851657 0.975067
+vt 0.851657 0.927650
+vt 0.665507 0.927650
+vt 0.639100 0.916707
+vt 0.878065 0.916707
+vt 0.639100 0.835051
+vt 0.851008 0.925848
+vt 0.639615 0.914966
+vt 0.878065 0.835051
+vt 0.657949 0.809309
+vt 0.877271 0.914966
+vt 0.639615 0.833757
+vt 0.380297 0.921926
+vt 0.285067 0.921926
+vt 0.232480 0.869339
+vt 0.877271 0.833757
+vt 0.658361 0.808156
+vt 0.859216 0.809309
+vt 0.970358 0.809309
+vt 0.546806 0.809309
+vt 0.546806 0.733227
+vt 0.936184 0.159092
+vt 0.936184 0.055423
+vt 0.993431 -0.001824
+vt 0.485452 0.848621
+vt 0.572413 0.848621
+vt 0.620434 0.896643
+vt 0.936553 0.158767
+vt 0.936553 0.058248
+vt 0.992061 0.002740
+vt 0.528129 0.312655
+vt 0.528129 0.723203
+vt 0.576169 0.675163
+vt 0.970358 0.733227
+vt 0.969060 0.808156
+vt 0.547827 0.808156
+vt 0.547827 0.732490
+vt 0.920796 0.733227
+vt 0.596368 0.733227
+vt 0.596368 0.299988
+vt 0.955709 0.319034
+vt 0.955709 0.597981
+vt 0.988349 0.565340
+vt 0.528441 0.315530
+vt 0.528441 0.726078
+vt 0.576482 0.678038
+vt 0.528285 0.312499
+vt 0.528285 0.723047
+vt 0.576325 0.675007
+vt 0.576169 0.360695
+vt 0.534278 0.717055
+vt 0.597117 0.732490
+vt 0.919769 0.732490
+vt 0.597117 0.301624
+vt 0.920796 0.299988
+vt 0.964015 0.299988
+vt 0.553150 0.299988
+vt 0.553150 0.221734
+vt 0.955765 0.697840
+vt 0.955765 0.484175
+vt 0.984228 0.455712
+vt 0.573251 0.363526
+vt 0.573251 0.677994
+vt 0.531360 0.719886
+vt 0.576482 0.363570
+vt 0.534590 0.719929
+vt 0.988649 0.211876
+vt 0.984191 0.000666
+vt 0.940829 0.045898
+vt 0.554135 0.301624
+vt 0.962750 0.301624
+vt 0.554135 0.223798
+vt 0.964015 0.221734
+vt 0.877845 0.221734
+vt 0.639319 0.221734
+vt 0.624127 0.199492
+vt 0.935911 0.994844
+vt 0.935911 0.821011
+vt 0.899453 0.857469
+vt 0.979528 0.993806
+vt 0.979528 0.815709
+vt 0.942177 0.853061
+vt 0.984839 0.209072
+vt 0.984839 0.001068
+vt 0.941215 0.044692
+vt 0.893038 0.199492
+vt 0.624127 0.130694
+vt 0.639833 0.223798
+vt 0.877053 0.223798
+vt 0.624724 0.201678
+vt 0.893038 0.130694
+vt 0.666272 0.102226
+vt 0.892162 0.201678
+vt 0.624724 0.133257
+vt 0.850893 0.102226
+vt 0.666272 0.051221
+vt 0.892162 0.133257
+vt 0.666638 0.104945
+vt 0.850248 0.104945
+vt 0.666638 0.054219
+vt 0.850893 0.051221
+vt 0.326009 0.035092
+vt 0.420192 0.035092
+vt 0.420192 0.129274
+vt 0.326009 0.222721
+vt 0.326009 0.129312
+vt 0.419419 0.129312
+vt 0.281886 0.912727
+vt 0.457675 0.910138
+vt 0.570769 0.969115
+vt 0.476580 0.132538
+vt 0.473475 0.070873
+vt 0.525326 0.037352
+vt 0.463873 0.100125
+vt 0.497395 0.151977
+vt 0.559061 0.148871
+vt 0.495827 0.154556
+vt 0.460936 0.100588
+vt 0.490228 0.043388
+vt 0.565136 0.930818
+vt 0.465327 0.099054
+vt 0.494620 0.041853
+vt 0.558804 0.038621
+vt 0.432885 0.869339
+vt 0.858525 0.808156
+vt 0.993431 0.216339
+vt 0.437430 0.896643
+vt 0.992061 0.214275
+vt 0.969060 0.732490
+vt 0.988349 0.351675
+vt 0.576325 0.360539
+vt 0.534278 0.318804
+vt 0.919769 0.301624
+vt 0.984228 0.726303
+vt 0.531360 0.321635
+vt 0.534590 0.321679
+vt 0.943418 0.168515
+vt 0.962750 0.223798
+vt 0.899453 0.958386
+vt 0.942177 0.956454
+vt 0.941215 0.165448
+vt 0.850248 0.054219
+vt 0.326009 0.129274
+vt 0.419419 0.222721
+vn 1.000000 0.000000 0.000000
+vn 0.000000 0.000000 -1.000000
+vn -1.000000 0.000000 0.000000
+vn 0.000000 0.000000 1.000000
+vn -0.999969 0.000000 0.000000
+vn 0.999969 0.000000 0.000000
+vn -0.027924 0.875271 -0.482772
+vn 0.022828 0.691305 0.722160
+vn 0.709769 0.306162 0.634419
+vn 0.658956 0.490127 -0.570544
+vn 0.712302 -0.477126 0.514695
+vn 0.661519 -0.293161 -0.690237
+vn 0.027924 -0.875271 0.482772
+vn -0.022828 -0.691305 -0.722160
+vn -0.709769 -0.306162 -0.634419
+vn -0.712302 0.477126 -0.514695
+vn -0.661519 0.293161 0.690237
+vn -0.658956 -0.490127 0.570544
+vn 0.000000 0.792383 -0.609973
+vn 0.000000 0.792383 0.609973
+vn 0.686239 0.396191 0.609973
+vn 0.686239 0.396191 -0.609973
+vn 0.686239 -0.396191 0.609973
+vn 0.686239 -0.396191 -0.609973
+vn 0.000000 -0.792383 0.609973
+vn 0.000000 -0.792383 -0.609973
+vn -0.686239 -0.396191 -0.609973
+vn -0.686239 0.396191 -0.609973
+vn -0.686239 0.396191 0.609973
+vn -0.686239 -0.396191 0.609973
+vn 0.849300 0.227241 0.476455
+vn 0.842402 0.072604 -0.533891
+vn 0.873440 -0.040803 -0.485183
+vn -0.866024 0.066958 -0.495437
+vn -0.857143 0.228401 0.461592
+vn -0.835475 0.267922 0.479720
+vn 0.006287 0.259865 0.965606
+vn 0.830531 0.298074 0.470443
+vn 0.026795 0.070193 -0.997162
+vn 0.034669 -0.188055 -0.981536
+vn -0.892605 -0.068850 -0.445540
+vn 0.012635 0.443251 0.896268
+vn -0.881985 0.135441 0.451308
+vn 0.873104 0.357982 0.330882
+vn -0.832148 -0.255196 -0.492294
+vn 0.030793 0.476882 0.878384
+vn 0.840602 -0.042879 -0.539933
+vn 0.025727 -0.323038 -0.946013
+vn -0.899411 -0.044984 0.434767
+vn 0.873074 0.163884 0.459181
+vn -0.849361 -0.065065 -0.523728
+vn 0.821192 0.090274 -0.563402
+vn -0.036622 -0.007904 -0.999268
+vn -0.012879 0.345439 -0.938322
+vn -0.051485 0.089236 0.994659
+vn -0.890194 -0.112339 0.441450
+vn 0.891263 -0.215217 0.399121
+vn -0.841456 0.214087 -0.496078
+vn -0.005554 -0.327128 0.944945
+vn 0.828272 0.131504 -0.544633
+vn -0.038514 0.376324 -0.925657
+vn -0.030457 -0.373608 0.927061
+vn 0.862178 -0.025666 -0.505905
+vn -0.846461 -0.073855 0.527299
+vn 0.041139 -0.001648 -0.999146
+vn -0.875851 0.313822 -0.366527
+vn 0.020783 -0.011444 0.999695
+vn 0.809534 -0.371075 0.454878
+vn 0.883602 -0.203955 -0.421430
+vn -0.820887 0.136448 0.554491
+vn 0.021882 -0.368999 -0.929167
+vn -0.858180 0.193854 -0.475295
+vn 0.011567 0.454054 0.890866
+vn 0.823695 -0.158788 0.544328
+vn 0.898709 -0.204749 -0.387768
+vn -0.830348 0.284799 0.478927
+vn 0.837550 0.215125 0.502152
+vn 0.838923 0.420759 0.345134
+vn 0.002686 -0.717124 -0.696921
+vn -0.883297 -0.118229 -0.453627
+vn -0.890774 -0.321421 -0.321207
+vn -0.001373 0.771081 0.636708
+vn 0.889981 -0.323618 -0.321146
+vn -0.837977 0.423139 0.344554
+vn 0.830439 0.535905 0.152135
+vn 0.002075 -0.953185 -0.302316
+vn -0.900113 -0.418622 -0.120548
+vn -0.001160 0.967956 0.251076
+vn 0.899289 -0.420209 -0.121006
+vn -0.829676 0.536515 0.154088
+vn 0.818751 0.508377 -0.266701
+vn 0.024110 -0.948912 0.314554
+vn -0.913785 -0.371441 0.164342
+vn 0.012909 0.927213 -0.374279
+vn 0.915769 -0.399396 0.042787
+vn -0.809137 0.552507 -0.199927
+vn -0.802149 0.311960 -0.509110
+vn 0.812891 0.160344 -0.559862
+vn 0.900876 -0.305673 0.308084
+vn -0.919065 -0.062471 0.389080
+vn -0.802606 -0.241646 -0.545335
+vn 0.006073 0.378704 -0.925474
+vn 0.791925 -0.313120 -0.524186
+vn -0.005127 -0.481826 0.876217
+vn 0.928281 0.103214 0.357219
+vn -0.937315 0.230445 0.261361
+vn -0.907376 0.407270 0.103732
+vn -0.012177 -0.492019 -0.870479
+vn -0.001526 -0.971160 -0.238350
+vn -0.029359 0.426374 0.904050
+vn 0.906217 0.409070 0.106632
+vn 0.002686 0.964751 0.263070
+vn -0.821619 -0.552660 -0.139531
+vn 0.822321 -0.550951 -0.142247
+vn -0.776635 -0.533250 0.335307
+vn 0.800104 -0.443190 0.404187
+vn 0.044740 0.819788 -0.570879
+vn -0.934080 0.209540 -0.289010
+vn 0.018830 -0.789483 0.613453
+vn 0.937162 0.328562 -0.117191
+vn 0.778832 0.281594 0.560411
+vn -0.882839 -0.371532 -0.287271
+vn 0.896298 0.227729 -0.380505
+vn -0.768487 -0.010407 0.639760
+vn 0.758110 0.647084 -0.080569
+vn -0.875210 -0.475936 0.086337
+vn 0.015961 0.216437 0.976135
+vn 0.030549 -0.210273 -0.977142
+vn 0.795831 -0.163213 -0.583056
+vn -0.797449 0.497909 0.340800
+vn -0.387921 -0.013337 -0.921567
+vn 0.003296 0.958342 0.285531
+vn -0.002747 -0.875088 -0.483932
+vn 0.000000 0.000000 -0.999969
+vn 0.000000 0.000000 0.999969
+vn 0.000000 0.923826 0.382794
+vn -0.382794 0.923826 0.000000
+vn 0.382794 0.923826 0.000000
+vn 0.000000 0.923826 -0.382794
+vn 0.000000 -0.590777 0.806818
+vn 0.000000 1.000000 0.000000
+vn 0.806818 -0.590777 0.000000
+vn -0.806818 -0.590777 0.000000
+vn 0.000000 -0.590777 -0.806818
+vn 0.000000 -1.000000 0.000000
+vn 0.000000 -0.999969 0.000000
+vn 0.000000 0.999969 0.000000
+vn 0.000000 0.564043 0.825709
+vn -0.825709 0.564043 0.000000
+vn 0.000000 0.564043 -0.825709
+vn 0.825709 0.564043 0.000000
+vn 0.000000 -0.828639 0.559740
+vn 0.559740 -0.828639 0.000000
+vn -0.559740 -0.828639 0.000000
+vn 0.000000 -0.828639 -0.559740
+s 1
+f 4/1/1 1/2/2 5/3/2
+f 1/2/2 2/4/3 5/3/2
+f 2/4/3 3/5/4 6/6/5
+f 3/5/4 4/7/1 8/8/6
+f 9/9/7 10/10/8 12/11/9
+f 11/12/10 12/13/9 14/14/11
+f 13/15/12 14/14/11 16/16/13
+f 15/17/14 16/16/13 17/18/15
+f 12/19/9 10/20/8 14/21/11
+f 19/22/16 20/23/17 10/10/8
+f 17/18/15 18/24/18 19/22/16
+f 17/25/15 13/26/12 15/27/14
+f 21/28/19 22/29/20 24/30/21
+f 23/31/22 24/30/21 26/32/23
+f 25/33/24 26/32/23 28/34/25
+f 27/35/26 28/34/25 29/36/27
+f 24/37/21 22/38/20 26/39/23
+f 31/40/28 32/41/29 21/42/19
+f 29/36/27 30/43/30 31/40/28
+f 21/44/19 23/45/22 31/46/28
+f 37/47/31 38/48/32 44/49/33
+f 34/50/34 35/51/35 41/52/36
+f 36/53/37 37/47/31 43/54/38
+f 38/48/32 33/55/39 39/56/40
+f 33/57/39 34/50/34 40/58/41
+f 35/51/35 36/53/37 42/59/42
+f 41/52/36 42/59/42 47/60/43
+f 43/54/38 44/49/33 49/61/44
+f 40/58/41 41/52/36 46/62/45
+f 42/59/42 43/54/38 48/63/46
+f 44/49/33 39/56/40 50/64/47
+f 39/65/40 40/58/41 45/66/48
+f 47/60/43 48/63/46 53/67/49
+f 49/61/44 50/64/47 55/68/50
+f 46/62/45 47/60/43 52/69/51
+f 48/63/46 49/61/44 55/68/50
+f 50/64/47 45/70/48 56/71/52
+f 45/66/48 46/62/45 52/69/51
+f 51/72/53 52/69/51 57/73/54
+f 53/67/49 54/74/55 59/75/56
+f 55/68/50 56/71/52 61/76/57
+f 52/69/51 53/67/49 58/77/58
+f 54/74/55 55/68/50 60/78/59
+f 56/71/52 51/79/53 62/80/60
+f 62/80/60 57/81/54 63/82/61
+f 57/73/54 58/77/58 63/83/61
+f 59/75/56 60/78/59 66/84/62
+f 61/76/57 62/80/60 68/85/63
+f 58/77/58 59/75/56 65/86/64
+f 60/78/59 61/76/57 66/84/62
+f 68/85/63 63/82/61 69/87/65
+f 63/83/61 64/88/66 69/89/65
+f 65/86/64 66/84/62 72/90/67
+f 67/91/68 68/85/63 74/92/69
+f 64/88/66 65/86/64 71/93/70
+f 66/84/62 67/91/68 72/90/67
+f 74/92/69 69/87/65 75/94/71
+f 69/89/65 70/95/72 75/96/71
+f 71/93/70 72/90/67 78/97/73
+f 73/98/74 74/92/69 80/99/75
+f 70/95/72 71/93/70 77/100/76
+f 72/90/67 73/98/74 78/97/73
+f 78/97/73 79/101/77 85/102/78
+f 80/99/75 75/94/71 81/103/79
+f 75/96/71 76/104/80 82/105/81
+f 77/100/76 78/97/73 84/106/82
+f 79/101/77 80/99/75 86/107/83
+f 76/104/80 77/100/76 83/108/84
+f 84/106/82 85/102/78 91/109/85
+f 86/107/83 81/103/79 87/110/86
+f 81/111/79 82/105/81 88/112/87
+f 83/108/84 84/106/82 90/113/88
+f 85/102/78 86/107/83 92/114/89
+f 82/105/81 83/108/84 89/115/90
+f 90/113/88 91/109/85 97/116/91
+f 92/114/89 87/110/86 93/117/92
+f 87/118/86 88/112/87 94/119/93
+f 89/115/90 90/113/88 96/120/94
+f 91/109/85 92/114/89 98/121/95
+f 88/112/87 89/115/90 95/122/96
+f 94/119/93 95/122/96 101/123/97
+f 96/120/94 97/116/91 103/124/98
+f 98/121/95 93/117/92 104/125/99
+f 93/126/92 94/119/93 100/127/100
+f 95/122/96 96/120/94 101/123/97
+f 97/116/91 98/121/95 104/125/99
+f 100/127/100 101/123/97 107/128/101
+f 102/129/102 103/124/98 109/130/103
+f 104/125/99 99/131/104 110/132/105
+f 99/133/104 100/127/100 106/134/106
+f 101/123/97 102/129/102 107/128/101
+f 103/124/98 104/125/99 110/132/105
+f 106/134/106 107/128/101 112/135/107
+f 108/136/108 109/130/103 114/137/109
+f 110/132/105 105/138/110 116/139/111
+f 105/140/110 106/134/106 111/141/112
+f 107/128/101 108/136/108 113/142/113
+f 109/130/103 110/132/105 115/143/114
+f 112/135/107 113/142/113 119/144/115
+f 114/137/109 115/143/114 121/145/116
+f 116/139/111 111/146/112 117/147/117
+f 111/141/112 112/135/107 118/148/118
+f 113/142/113 114/137/109 120/149/119
+f 115/143/114 116/139/111 122/150/120
+f 121/145/116 122/150/120 127/151/121
+f 118/148/118 119/144/115 124/152/122
+f 120/149/119 121/145/116 127/151/121
+f 122/150/120 117/147/117 128/153/123
+f 117/154/117 118/148/118 124/152/122
+f 119/144/115 120/149/119 125/155/124
+f 127/151/121 128/153/123 133/156/125
+f 124/152/122 125/155/124 130/157/126
+f 126/158/127 127/151/121 133/156/125
+f 128/153/123 123/159/128 134/160/129
+f 123/161/128 124/152/122 130/157/126
+f 125/155/124 126/158/127 131/162/130
+f 133/156/125 134/160/129 135/163/131
+f 130/157/126 131/162/130 135/163/131
+f 132/164/132 133/156/125 135/163/131
+f 134/160/129 129/165/133 135/163/131
+f 129/166/133 130/157/126 135/163/131
+f 131/162/130 132/164/132 135/163/131
+f 140/167/3 141/168/3 136/169/3
+f 197/170/134 142/171/2 138/172/134
+f 204/168/1 143/167/1 139/169/1
+f 208/171/135 196/170/4 201/173/135
+f 210/172/136 202/173/136 215/174/136
+f 222/175/4 216/174/4 227/176/4
+f 203/169/137 199/177/137 144/178/137
+f 206/177/138 211/169/138 147/178/138
+f 200/173/139 207/172/139 146/175/139
+f 234/179/140 228/176/140 239/180/140
+f 217/178/3 213/181/3 148/182/3
+f 214/174/2 219/175/2 150/179/2
+f 220/181/1 223/178/1 151/182/1
+f 246/183/141 240/184/141 251/185/141
+f 231/186/142 235/182/142 155/187/142
+f 229/182/143 225/186/143 152/187/143
+f 226/176/144 232/179/144 154/188/144
+f 258/189/4 252/190/4 263/191/4
+f 241/192/141 237/193/141 157/194/141
+f 238/195/141 243/196/141 158/197/141
+f 244/198/141 247/199/141 159/200/141
+f 270/201/145 264/202/145 275/203/145
+f 249/190/2 255/189/2 162/204/2
+f 256/205/1 259/206/1 163/207/1
+f 253/206/3 250/205/3 160/207/3
+f 282/208/135 276/209/4 287/210/135
+f 265/211/145 261/212/146 165/213/145
+f 262/214/146 267/215/145 166/216/145
+f 268/217/145 271/218/145 167/219/145
+f 294/220/141 288/203/141 299/221/141
+f 277/222/3 273/223/3 168/224/3
+f 274/209/134 279/208/2 170/225/134
+f 280/223/1 283/222/1 171/224/1
+f 306/226/4 300/227/4 311/228/4
+f 291/229/141 295/230/141 175/231/141
+f 289/232/141 285/233/141 173/234/147
+f 286/235/141 292/216/141 174/236/147
+f 318/237/145 312/238/145 323/239/145
+f 301/240/3 297/241/3 176/242/3
+f 298/227/2 303/226/2 178/243/2
+f 304/241/1 307/240/1 179/242/1
+f 330/244/148 324/245/148 335/246/148
+f 309/247/146 315/248/146 182/249/145
+f 316/250/145 319/251/145 183/252/145
+f 313/253/145 310/254/145 181/255/145
+f 342/256/4 336/246/4 347/257/4
+f 325/258/149 321/259/149 184/260/149
+f 322/245/150 327/244/150 186/256/150
+f 328/259/151 331/258/151 187/260/151
+f 354/261/152 348/257/152 359/262/152
+f 337/260/3 333/263/3 188/264/3
+f 334/246/2 339/256/2 190/261/2
+f 340/263/1 343/260/1 191/264/1
+f 366/265/4 360/262/4 370/266/4
+f 351/267/153 355/264/153 195/268/153
+f 349/264/154 345/267/154 192/268/154
+f 346/257/155 352/261/155 194/265/155
+f 361/268/3 357/269/5 371/270/5
+f 358/262/2 363/265/2 372/271/2
+f 364/269/6 367/268/1 375/270/6
+f 383/272/141 382/273/141 381/274/141
+f 376/275/145 377/276/145 378/277/145
+f 8/278/6 4/1/1 5/3/2
+f 2/4/3 6/6/5 5/3/2
+f 3/5/4 7/279/4 6/6/5
+f 7/279/4 3/5/4 8/8/6
+f 11/280/10 9/9/7 12/11/9
+f 13/15/12 11/12/10 14/14/11
+f 15/17/14 13/15/12 16/16/13
+f 16/16/13 18/24/18 17/18/15
+f 10/20/8 20/281/17 14/21/11
+f 20/281/17 18/282/18 14/21/11
+f 18/282/18 16/283/13 14/21/11
+f 9/9/7 19/22/16 10/10/8
+f 18/24/18 20/23/17 19/22/16
+f 11/284/10 13/26/12 17/25/15
+f 9/285/7 11/284/10 19/286/16
+f 11/284/10 17/25/15 19/286/16
+f 23/31/22 21/28/19 24/30/21
+f 25/33/24 23/31/22 26/32/23
+f 27/35/26 25/33/24 28/34/25
+f 28/34/25 30/43/30 29/36/27
+f 22/38/20 32/287/29 26/39/23
+f 32/287/29 30/288/30 28/289/25
+f 26/39/23 32/287/29 28/289/25
+f 32/41/29 22/290/20 21/42/19
+f 30/43/30 32/41/29 31/40/28
+f 23/45/22 25/291/24 31/46/28
+f 25/291/24 27/292/26 31/46/28
+f 27/292/26 29/293/27 31/46/28
+f 43/54/38 37/47/31 44/49/33
+f 40/58/41 34/50/34 41/52/36
+f 42/59/42 36/53/37 43/54/38
+f 44/49/33 38/48/32 39/56/40
+f 39/65/40 33/57/39 40/58/41
+f 41/52/36 35/51/35 42/59/42
+f 42/59/42 48/63/46 47/60/43
+f 44/49/33 50/64/47 49/61/44
+f 41/52/36 47/60/43 46/62/45
+f 43/54/38 49/61/44 48/63/46
+f 39/56/40 45/70/48 50/64/47
+f 40/58/41 46/62/45 45/66/48
+f 48/63/46 54/74/55 53/67/49
+f 50/64/47 56/71/52 55/68/50
+f 47/60/43 53/67/49 52/69/51
+f 54/74/55 48/63/46 55/68/50
+f 45/70/48 51/79/53 56/71/52
+f 51/72/53 45/66/48 52/69/51
+f 52/69/51 58/77/58 57/73/54
+f 54/74/55 60/78/59 59/75/56
+f 56/71/52 62/80/60 61/76/57
+f 53/67/49 59/75/56 58/77/58
+f 55/68/50 61/76/57 60/78/59
+f 51/79/53 57/81/54 62/80/60
+f 68/85/63 62/80/60 63/82/61
+f 58/77/58 64/88/66 63/83/61
+f 65/86/64 59/75/56 66/84/62
+f 67/91/68 61/76/57 68/85/63
+f 64/88/66 58/77/58 65/86/64
+f 61/76/57 67/91/68 66/84/62
+f 74/92/69 68/85/63 69/87/65
+f 64/88/66 70/95/72 69/89/65
+f 71/93/70 65/86/64 72/90/67
+f 73/98/74 67/91/68 74/92/69
+f 70/95/72 64/88/66 71/93/70
+f 67/91/68 73/98/74 72/90/67
+f 80/99/75 74/92/69 75/94/71
+f 70/95/72 76/104/80 75/96/71
+f 77/100/76 71/93/70 78/97/73
+f 79/101/77 73/98/74 80/99/75
+f 76/104/80 70/95/72 77/100/76
+f 73/98/74 79/101/77 78/97/73
+f 84/106/82 78/97/73 85/102/78
+f 86/107/83 80/99/75 81/103/79
+f 81/111/79 75/96/71 82/105/81
+f 83/108/84 77/100/76 84/106/82
+f 85/102/78 79/101/77 86/107/83
+f 82/105/81 76/104/80 83/108/84
+f 90/113/88 84/106/82 91/109/85
+f 92/114/89 86/107/83 87/110/86
+f 87/118/86 81/111/79 88/112/87
+f 89/115/90 83/108/84 90/113/88
+f 91/109/85 85/102/78 92/114/89
+f 88/112/87 82/105/81 89/115/90
+f 96/120/94 90/113/88 97/116/91
+f 98/121/95 92/114/89 93/117/92
+f 93/126/92 87/118/86 94/119/93
+f 95/122/96 89/115/90 96/120/94
+f 97/116/91 91/109/85 98/121/95
+f 94/119/93 88/112/87 95/122/96
+f 100/127/100 94/119/93 101/123/97
+f 102/129/102 96/120/94 103/124/98
+f 93/117/92 99/131/104 104/125/99
+f 99/133/104 93/126/92 100/127/100
+f 96/120/94 102/129/102 101/123/97
+f 103/124/98 97/116/91 104/125/99
+f 106/134/106 100/127/100 107/128/101
+f 108/136/108 102/129/102 109/130/103
+f 99/131/104 105/138/110 110/132/105
+f 105/140/110 99/133/104 106/134/106
+f 102/129/102 108/136/108 107/128/101
+f 109/130/103 103/124/98 110/132/105
+f 107/128/101 113/142/113 112/135/107
+f 109/130/103 115/143/114 114/137/109
+f 105/138/110 111/146/112 116/139/111
+f 106/134/106 112/135/107 111/141/112
+f 108/136/108 114/137/109 113/142/113
+f 110/132/105 116/139/111 115/143/114
+f 118/148/118 112/135/107 119/144/115
+f 120/149/119 114/137/109 121/145/116
+f 122/150/120 116/139/111 117/147/117
+f 117/154/117 111/141/112 118/148/118
+f 119/144/115 113/142/113 120/149/119
+f 121/145/116 115/143/114 122/150/120
+f 122/150/120 128/153/123 127/151/121
+f 119/144/115 125/155/124 124/152/122
+f 126/158/127 120/149/119 127/151/121
+f 117/147/117 123/159/128 128/153/123
+f 123/161/128 117/154/117 124/152/122
+f 120/149/119 126/158/127 125/155/124
+f 128/153/123 134/160/129 133/156/125
+f 125/155/124 131/162/130 130/157/126
+f 132/164/132 126/158/127 133/156/125
+f 123/159/128 129/165/133 134/160/129
+f 129/166/133 123/161/128 130/157/126
+f 126/158/127 132/164/132 131/162/130
+f 141/168/3 137/177/3 136/169/3
+f 198/173/2 197/170/134 138/172/134
+f 205/177/1 204/168/1 139/169/1
+f 209/172/4 208/171/135 201/173/135
+f 221/175/136 210/172/136 215/174/136
+f 233/179/4 222/175/4 227/176/4
+f 199/177/137 145/181/137 144/178/137
+f 218/181/138 206/177/138 147/178/138
+f 212/174/139 200/173/139 146/175/139
+f 245/188/140 234/179/140 239/180/140
+f 213/181/3 149/186/3 148/182/3
+f 224/176/2 214/174/2 150/179/2
+f 230/186/1 220/181/1 151/182/1
+f 257/294/147 246/183/141 251/185/141
+f 242/295/142 231/186/142 155/187/142
+f 225/186/143 153/295/143 152/187/143
+f 236/180/144 226/176/144 154/188/144
+f 269/204/4 258/189/4 263/191/4
+f 156/296/141 241/192/141 157/194/141
+f 248/297/141 238/195/141 158/197/141
+f 254/298/141 244/198/141 159/200/141
+f 281/220/145 270/201/145 275/203/145
+f 260/191/2 249/190/2 162/204/2
+f 266/299/1 256/205/1 163/207/1
+f 250/205/3 161/299/3 160/207/3
+f 293/225/4 282/208/135 287/210/135
+f 164/300/145 265/211/145 165/213/145
+f 272/235/145 262/214/146 166/216/145
+f 278/301/145 268/217/145 167/219/145
+f 305/302/141 294/220/141 299/221/141
+f 273/223/3 169/303/3 168/224/3
+f 284/210/2 274/209/134 170/225/134
+f 290/303/1 280/223/1 171/224/1
+f 317/243/4 306/226/4 311/228/4
+f 302/304/141 291/229/141 175/231/141
+f 172/305/141 289/232/141 173/234/147
+f 296/306/141 286/235/141 174/236/147
+f 329/307/145 318/237/145 323/239/145
+f 297/241/3 177/308/3 176/242/3
+f 308/228/2 298/227/2 178/243/2
+f 314/308/1 304/241/1 179/242/1
+f 341/256/148 330/244/148 335/246/148
+f 320/309/145 309/247/146 182/249/145
+f 326/310/145 316/250/145 183/252/145
+f 180/311/145 313/253/145 181/255/145
+f 353/261/4 342/256/4 347/257/4
+f 321/259/149 185/263/149 184/260/149
+f 332/246/150 322/245/150 186/256/150
+f 338/263/151 328/259/151 187/260/151
+f 365/265/152 354/261/152 359/262/152
+f 333/263/3 189/267/3 188/264/3
+f 344/257/2 334/246/2 190/261/2
+f 350/267/1 340/263/1 191/264/1
+f 374/271/4 366/265/4 370/266/4
+f 362/269/153 351/267/153 195/268/153
+f 345/267/154 193/269/154 192/268/154
+f 356/262/155 346/257/155 194/265/155
+f 357/269/5 368/312/3 371/270/5
+f 369/266/2 358/262/2 372/271/2
+f 373/312/1 364/269/6 375/270/6
+f 380/313/141 383/272/141 381/274/141
+f 379/314/145 376/275/145 378/277/145

BIN
res/lantern.png


BIN
res/lanternS.png


+ 5 - 0
src/main/java/eu/tankernn/gameEngine/normalMapping/renderer/NormalMappingRenderer.java

@@ -68,6 +68,11 @@ public class NormalMappingRenderer {
 		GL11.glBindTexture(GL11.GL_TEXTURE_2D, model.getTexture().getID());
 		GL13.glActiveTexture(GL13.GL_TEXTURE1);
 		GL11.glBindTexture(GL11.GL_TEXTURE_2D, model.getTexture().getNormalMap());
+		shader.loadUseSpecularMap(texture.hasSpecularMap());
+		if (texture.hasSpecularMap()) {
+			GL13.glActiveTexture(GL13.GL_TEXTURE2);
+			GL11.glBindTexture(GL11.GL_TEXTURE_2D, texture.getSpecularMap());
+		}
 	}
 
 	private void unbindTexturedModel() {

+ 9 - 0
src/main/java/eu/tankernn/gameEngine/normalMapping/renderer/NormalMappingShader.java

@@ -31,6 +31,8 @@ public class NormalMappingShader extends ShaderProgram {
 	private int location_plane;
 	private int location_modelTexture;
 	private int location_normalMap;
+	private int location_specularMap;
+	private int location_usesSpecularMap;
 	
 	public NormalMappingShader() {
 		super(VERTEX_FILE, FRAGMENT_FILE);
@@ -57,6 +59,8 @@ public class NormalMappingShader extends ShaderProgram {
 		location_plane = super.getUniformLocation("plane");
 		location_modelTexture = super.getUniformLocation("modelTexture");
 		location_normalMap = super.getUniformLocation("normalMap");
+		location_specularMap = super.getUniformLocation("specularMap");
+		location_usesSpecularMap = super.getUniformLocation("usesSpecularMap");
 		
 		location_lightPositionEyeSpace = new int[MAX_LIGHTS];
 		location_lightColour = new int[MAX_LIGHTS];
@@ -71,6 +75,11 @@ public class NormalMappingShader extends ShaderProgram {
 	protected void connectTextureUnits() {
 		super.loadInt(location_modelTexture, 0);
 		super.loadInt(location_normalMap, 1);
+		super.loadInt(location_specularMap, 2);
+	}
+	
+	public void loadUseSpecularMap(boolean useSpecularMap) {
+		super.loadBoolean(location_usesSpecularMap, useSpecularMap);
 	}
 	
 	protected void loadClipPlane(Vector4f plane) {

+ 10 - 0
src/main/java/eu/tankernn/gameEngine/normalMapping/renderer/normalMapFShader.glsl

@@ -9,6 +9,8 @@ out vec4 out_Color;
 
 uniform sampler2D modelTexture;
 uniform sampler2D normalMap;
+uniform sampler2D specularMap;
+uniform float usesSpecularMap;
 uniform vec3 lightColour[4];
 uniform vec3 attenuation[4];
 uniform float shineDamper;
@@ -45,6 +47,14 @@ void main(void){
 	if(textureColour.a<0.5){
 		discard;
 	}
+	
+	if (usesSpecularMap > 0.5) {
+		vec4 mapInfo = texture(specularMap, pass_textureCoordinates);
+		totalSpecular *= mapInfo.r;
+		if (mapInfo.g > 0.5) {
+			totalDiffuse = vec3(1.0);
+		}
+	}
 
 	out_Color =  vec4(totalDiffuse,1.0) * textureColour + vec4(totalSpecular,1.0);
 	out_Color = mix(vec4(skyColour,1.0),out_Color, visibility);

+ 2 - 2
src/main/java/eu/tankernn/gameEngine/particles/ParticleMaster.java

@@ -11,7 +11,7 @@ import org.lwjgl.util.vector.Matrix4f;
 
 import eu.tankernn.gameEngine.entities.Camera;
 import eu.tankernn.gameEngine.renderEngine.Loader;
-import eu.tankernn.gameEngine.util.Sorter;
+import eu.tankernn.gameEngine.util.DistanceSorter;
 
 public class ParticleMaster {
 	private static Map<ParticleTexture, List<Particle>> particles = new HashMap<ParticleTexture, List<Particle>>();
@@ -38,7 +38,7 @@ public class ParticleMaster {
 				}
 			}
 			if (!entry.getKey().usesAdditiveBlending())
-				new Sorter<Particle>(list, camera).sortByDistance();
+				DistanceSorter.sort(list, camera);
 		}
 	}
 	

+ 15 - 5
src/main/java/eu/tankernn/gameEngine/postProcessing/PostProcessing.java

@@ -6,19 +6,23 @@ import org.lwjgl.opengl.GL20;
 import org.lwjgl.opengl.GL30;
 
 import eu.tankernn.gameEngine.models.RawModel;
+import eu.tankernn.gameEngine.postProcessing.bloom.BrightFilter;
+import eu.tankernn.gameEngine.postProcessing.bloom.CombineFilter;
 import eu.tankernn.gameEngine.postProcessing.gaussianBlur.HorizontalBlur;
 import eu.tankernn.gameEngine.postProcessing.gaussianBlur.VerticalBlur;
 import eu.tankernn.gameEngine.renderEngine.Loader;
 
 public class PostProcessing {
 	
-	private static final int blurFactor = 0;
+	private static final int blurFactor = 2;
 	
 	private static final float[] POSITIONS = {-1, 1, -1, -1, 1, 1, 1, -1};
 	private static RawModel quad;
 	private static ContrastChanger contrastChanger;
 	private static HorizontalBlur hBlur[] = new HorizontalBlur[blurFactor];
 	private static VerticalBlur vBlur[] = new VerticalBlur[blurFactor];
+	private static BrightFilter brightFilter;
+	private static CombineFilter combineFilter;
 	
 	public static void init(Loader loader) {
 		quad = loader.loadToVAO(POSITIONS, 2);
@@ -28,17 +32,21 @@ public class PostProcessing {
 			hBlur[i] = new HorizontalBlur(Display.getWidth() / temp, Display.getHeight() / temp);
 			vBlur[i] = new VerticalBlur(Display.getWidth() / temp, Display.getHeight() / temp);
 		}
+		brightFilter = new BrightFilter(Display.getWidth() / 2, Display.getHeight() / 2);
+		combineFilter = new CombineFilter();
 	}
 	
 	public static void doPostProcessing(int colorTexture) {
 		start();
-		int currentTexture = colorTexture;
+		brightFilter.render(colorTexture);
+		int bloomTexture = brightFilter.getOutputTexture();
 		for (int i = 0; i < blurFactor; i++) {
-			hBlur[i].render(currentTexture);
+			hBlur[i].render(bloomTexture);
 			vBlur[i].render(hBlur[i].getOutputTexture());
-			currentTexture = vBlur[i].getOutputTexture();
+			bloomTexture = vBlur[i].getOutputTexture();
 		}
-		contrastChanger.render(currentTexture);
+		combineFilter.render(colorTexture, bloomTexture);
+		//contrastChanger.render(bloomTexture);
 		end();
 	}
 	
@@ -48,6 +56,8 @@ public class PostProcessing {
 			hBlur[i].cleanUp();
 			vBlur[i].cleanUp();
 		}
+		brightFilter.cleanUp();
+		combineFilter.cleanUp();
 	}
 	
 	private static void start() {

+ 35 - 0
src/main/java/eu/tankernn/gameEngine/postProcessing/bloom/BrightFilter.java

@@ -0,0 +1,35 @@
+package eu.tankernn.gameEngine.postProcessing.bloom;
+
+import org.lwjgl.opengl.GL11;
+import org.lwjgl.opengl.GL13;
+
+import eu.tankernn.gameEngine.postProcessing.ImageRenderer;
+
+public class BrightFilter {
+
+	private ImageRenderer renderer;
+	private BrightFilterShader shader;
+	
+	public BrightFilter(int width, int height){
+		shader = new BrightFilterShader();
+		renderer = new ImageRenderer(width, height);
+	}
+	
+	public void render(int texture){
+		shader.start();
+		GL13.glActiveTexture(GL13.GL_TEXTURE0);
+		GL11.glBindTexture(GL11.GL_TEXTURE_2D, texture);
+		renderer.renderQuad();
+		shader.stop();
+	}
+	
+	public int getOutputTexture(){
+		return renderer.getOutputTexture();
+	}
+	
+	public void cleanUp(){
+		renderer.cleanUp();
+		shader.cleanUp();
+	}
+	
+}

+ 23 - 0
src/main/java/eu/tankernn/gameEngine/postProcessing/bloom/BrightFilterShader.java

@@ -0,0 +1,23 @@
+package eu.tankernn.gameEngine.postProcessing.bloom;
+
+import eu.tankernn.gameEngine.shaders.ShaderProgram;
+
+public class BrightFilterShader extends ShaderProgram{
+	
+	private static final String VERTEX_FILE = "/eu/tankernn/gameEngine/postProcessing/bloom/simpleVertex.glsl";
+	private static final String FRAGMENT_FILE = "/eu/tankernn/gameEngine/postProcessing/bloom/brightFilterFragment.glsl";
+	
+	public BrightFilterShader() {
+		super(VERTEX_FILE, FRAGMENT_FILE);
+	}
+
+	@Override
+	protected void getAllUniformLocations() {	
+	}
+
+	@Override
+	protected void bindAttributes() {
+		super.bindAttribute(0, "position");
+	}
+
+}

+ 36 - 0
src/main/java/eu/tankernn/gameEngine/postProcessing/bloom/CombineFilter.java

@@ -0,0 +1,36 @@
+package eu.tankernn.gameEngine.postProcessing.bloom;
+
+import org.lwjgl.opengl.GL11;
+import org.lwjgl.opengl.GL13;
+
+import eu.tankernn.gameEngine.postProcessing.ImageRenderer;
+
+public class CombineFilter {
+	
+	private ImageRenderer renderer;
+	private CombineShader shader;
+	
+	public CombineFilter(){
+		shader = new CombineShader();
+		shader.start();
+		shader.connectTextureUnits();
+		shader.stop();
+		renderer = new ImageRenderer();
+	}
+	
+	public void render(int colourTexture, int highlightTexture){
+		shader.start();
+		GL13.glActiveTexture(GL13.GL_TEXTURE0);
+		GL11.glBindTexture(GL11.GL_TEXTURE_2D, colourTexture);
+		GL13.glActiveTexture(GL13.GL_TEXTURE1);
+		GL11.glBindTexture(GL11.GL_TEXTURE_2D, highlightTexture);
+		renderer.renderQuad();
+		shader.stop();
+	}
+	
+	public void cleanUp(){
+		renderer.cleanUp();
+		shader.cleanUp();
+	}
+
+}

+ 33 - 0
src/main/java/eu/tankernn/gameEngine/postProcessing/bloom/CombineShader.java

@@ -0,0 +1,33 @@
+package eu.tankernn.gameEngine.postProcessing.bloom;
+
+import eu.tankernn.gameEngine.shaders.ShaderProgram;
+
+public class CombineShader extends ShaderProgram {
+
+	private static final String VERTEX_FILE = "/eu/tankernn/gameEngine/postProcessing/bloom/simpleVertex.glsl";
+	private static final String FRAGMENT_FILE = "/eu/tankernn/gameEngine/postProcessing/bloom/combineFragment.glsl";
+	
+	private int location_colourTexture;
+	private int location_highlightTexture;
+	
+	protected CombineShader() {
+		super(VERTEX_FILE, FRAGMENT_FILE);
+	}
+	
+	@Override
+	protected void getAllUniformLocations() {
+		location_colourTexture = super.getUniformLocation("colourTexture");
+		location_highlightTexture = super.getUniformLocation("highlightTexture");
+	}
+	
+	protected void connectTextureUnits(){
+		super.loadInt(location_colourTexture, 0);
+		super.loadInt(location_highlightTexture, 1);
+	}
+
+	@Override
+	protected void bindAttributes() {
+		super.bindAttribute(0, "position");
+	}
+	
+}

+ 13 - 0
src/main/java/eu/tankernn/gameEngine/postProcessing/bloom/brightFilterFragment.glsl

@@ -0,0 +1,13 @@
+#version 150
+
+in vec2 textureCoords;
+
+out vec4 out_Colour;
+
+uniform sampler2D colourTexture;
+
+void main(void){
+	vec4 color = texture(colourTexture, textureCoords);
+	float brightness = (color.r * 0.2126) + (color.g * 0.7152) + (color.b * 0.0722);
+	out_Colour = color * brightness;
+}

+ 14 - 0
src/main/java/eu/tankernn/gameEngine/postProcessing/bloom/combineFragment.glsl

@@ -0,0 +1,14 @@
+#version 150
+
+in vec2 textureCoords;
+
+out vec4 out_Colour;
+
+uniform sampler2D colourTexture;
+uniform sampler2D highlightTexture;
+
+void main(void){
+	vec4 sceneColor = texture(colourTexture, textureCoords);
+	vec4 highlightColor = texture(highlightTexture, textureCoords);
+	out_Colour = sceneColor + highlightColor * 0.8;
+}

+ 12 - 0
src/main/java/eu/tankernn/gameEngine/postProcessing/bloom/simpleVertex.glsl

@@ -0,0 +1,12 @@
+#version 150
+
+in vec2 position;
+
+out vec2 textureCoords;
+
+void main(void){
+
+	gl_Position = vec4(position, 0.0, 1.0);
+	textureCoords = position * 0.5 + 0.5;
+	
+}

+ 5 - 0
src/main/java/eu/tankernn/gameEngine/renderEngine/EntityRenderer.java

@@ -67,6 +67,11 @@ public class EntityRenderer {
 		shader.loadShineVariables(texture.getShineDamper(), texture.getReflectivity());
 		GL13.glActiveTexture(GL13.GL_TEXTURE0);
 		GL11.glBindTexture(GL11.GL_TEXTURE_2D, model.getTexture().getID());
+		shader.loadUseSpecularMap(texture.hasSpecularMap());
+		if (texture.hasSpecularMap()) {
+			GL13.glActiveTexture(GL13.GL_TEXTURE1);
+			GL11.glBindTexture(GL11.GL_TEXTURE_2D, texture.getSpecularMap());
+		}
 	}
 	
 	private void unbindTexturedModel() {

+ 12 - 0
src/main/java/eu/tankernn/gameEngine/shaders/StaticShader.java

@@ -34,6 +34,9 @@ public class StaticShader extends ShaderProgram {
 	private int location_toShadowMapSpace;
 	private int location_shadowMap;
 	private int location_shadowDistance;
+	private int location_specularMap;
+	private int location_usesSpecularMap;
+	private int location_modelTexture;
 	
 	public StaticShader() {
 		super(VERTEX_FILE, FRAGMENT_FILE);
@@ -61,6 +64,9 @@ public class StaticShader extends ShaderProgram {
 		location_toShadowMapSpace = super.getUniformLocation("toShadowMapSpace");
 		location_shadowMap = super.getUniformLocation("shadowMap");
 		location_shadowDistance = super.getUniformLocation("shadowDistance");
+		location_specularMap = super.getUniformLocation("specularMap");
+		location_usesSpecularMap = super.getUniformLocation("usesSpecularMap");
+		location_modelTexture = super.getUniformLocation("modelTexture");
 		
 		location_lightPosition = new int[MAX_LIGHTS];
 		location_lightColor = new int[MAX_LIGHTS];
@@ -74,6 +80,12 @@ public class StaticShader extends ShaderProgram {
 	
 	public void connectTextureUnits() {
 		super.loadInt(location_shadowMap, 5);
+		super.loadInt(location_modelTexture, 0);
+		super.loadInt(location_specularMap, 1);
+	}
+	
+	public void loadUseSpecularMap(boolean useSpecularMap) {
+		super.loadBoolean(location_usesSpecularMap, useSpecularMap);
 	}
 	
 	public void loadShadowDistance(float distance) {

+ 10 - 0
src/main/java/eu/tankernn/gameEngine/shaders/fragmentShader.glsl

@@ -11,6 +11,8 @@ out vec4 out_Color;
 
 uniform sampler2D shadowMap;
 uniform sampler2D textureSampler;
+uniform sampler2D specularMap;
+uniform float usesSpecularMap;
 uniform vec3 lightColor[4]; //4 max light sources
 uniform vec3 attenuation[4];
 uniform float shineDamper;
@@ -59,6 +61,14 @@ void main(void){
 		discard;
 	}
 	
+	if (usesSpecularMap > 0.5) {
+		vec4 mapInfo = texture(specularMap, pass_textureCoords);
+		totalSpecular *= mapInfo.r;
+		if (mapInfo.g > 0.5) {
+			totalDiffuse = vec3(1.0);
+		}
+	}
+	
 	out_Color = vec4(totalDiffuse, 1.0) * textureColor + vec4(totalSpecular, 1.0);
 	out_Color = mix(vec4(skyColor, 1.0), out_Color, visibility);
 }

+ 74 - 63
src/main/java/eu/tankernn/gameEngine/tester/MainLoop.java

@@ -1,8 +1,11 @@
 package eu.tankernn.gameEngine.tester;
 
 import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
 import java.util.List;
 import java.util.Random;
+
 import org.lwjgl.input.Mouse;
 import org.lwjgl.opengl.Display;
 import org.lwjgl.util.vector.Vector2f;
@@ -10,7 +13,6 @@ import org.lwjgl.util.vector.Vector3f;
 import org.lwjgl.util.vector.Vector4f;
 
 import eu.tankernn.gameEngine.entities.Camera;
-import eu.tankernn.gameEngine.entities.Car;
 import eu.tankernn.gameEngine.entities.Entity;
 import eu.tankernn.gameEngine.entities.Light;
 import eu.tankernn.gameEngine.entities.Player;
@@ -40,59 +42,63 @@ import eu.tankernn.gameEngine.terrains.TerrainPack;
 import eu.tankernn.gameEngine.textures.ModelTexture;
 import eu.tankernn.gameEngine.textures.TerrainTexture;
 import eu.tankernn.gameEngine.textures.TerrainTexturePack;
+import eu.tankernn.gameEngine.util.DistanceSorter;
+import eu.tankernn.gameEngine.util.Maths;
 import eu.tankernn.gameEngine.util.MousePicker;
 import eu.tankernn.gameEngine.util.NativesExporter;
-import eu.tankernn.gameEngine.util.Sorter;
 import eu.tankernn.gameEngine.water.WaterMaster;
 import eu.tankernn.gameEngine.water.WaterTile;
 
 public class MainLoop {
-	
+
 	private static final int SEED = 1235;
-	
+
 	public static void main(String[] args) {
 		NativesExporter.exportNatives();
-		
+
 		List<Entity> entities = new ArrayList<Entity>();
 		List<Entity> normalMapEntities = new ArrayList<Entity>();
 		TerrainPack terrainPack = new TerrainPack();
-		
+
 		DisplayManager.createDisplay();
 		Loader loader = new Loader();
-		
+
 		// Monkey
 		ModelData monkeyData = OBJFileLoader.loadOBJ("character");
 		RawModel monkeyModel = loader.loadToVAO(monkeyData);
-		TexturedModel texturedMonkeyModel = new TexturedModel(monkeyModel, new ModelTexture(loader.loadTexture("erkky")));
-		
+		TexturedModel texturedMonkeyModel = new TexturedModel(monkeyModel,
+				new ModelTexture(loader.loadTexture("erkky")));
+
 		ModelTexture texture = texturedMonkeyModel.getTexture();
 		texture.setReflectivity(3);
 		texture.setShineDamper(10);
-		
+
 		Entity entity = new Entity(texturedMonkeyModel, new Vector3f(0, 0, 20), 0, 0, 0, 1);
 		entities.add(entity);
 		TexturedModel monkey = new TexturedModel(monkeyModel, new ModelTexture(loader.loadTexture("white")));
-		Player player = new Car(monkey, new Vector3f(10, 0, 50), 0, 0, 0, 1, terrainPack);
+		Player player = new Player(monkey, new Vector3f(10, 0, 50), 0, 0, 0, 1, terrainPack);
 		entities.add(player);
 		Camera camera = new PlayerCamera(player, terrainPack);
-		
+
 		MasterRenderer renderer = new MasterRenderer(loader, camera);
 		ParticleMaster.init(loader, renderer.getProjectionMatrix());
 		TextMaster.init(loader);
-		
+
 		FontType font = new FontType(loader.loadTexture("arial"), "arial.fnt");
 		GUIText text = new GUIText("Sample text", 3, font, new Vector2f(0.5f, 0.5f), 0.5f, true);
 		text.setColor(1, 1, 1);
-		
-		//Barrel
-		TexturedModel barrelModel = new TexturedModel(NormalMappedObjLoader.loadOBJ("barrel", loader), new ModelTexture(loader.loadTexture("barrel")));
+
+		// Barrel
+		TexturedModel barrelModel = new TexturedModel(NormalMappedObjLoader.loadOBJ("barrel", loader),
+				new ModelTexture(loader.loadTexture("barrel")));
 		barrelModel.getTexture().setNormalMap(loader.loadTexture("barrelNormal"));
+		barrelModel.getTexture().setSpecularMap(loader.loadTexture("barrelS"));
 		barrelModel.getTexture().setShineDamper(10);
 		barrelModel.getTexture().setReflectivity(0.5f);
 		Entity barrel = new Entity(barrelModel, new Vector3f(75, 10, 75), 0, 0, 0, 1f);
 		normalMapEntities.add(barrel);
-		
-		Light sun = new Light(new Vector3f(100000, 150000, -70000), new Vector3f(1, 1, 1));
+
+		Light sun = new Light(new Vector3f(100000, 150000, -70000), new Vector3f(1f, 1f, 1f));
 		Light flashLight = new Light(new Vector3f(0, 10, -10), new Vector3f(2, 0, 0), new Vector3f(1, 0.01f, 0.002f));
 		List<Light> lights = new ArrayList<Light>();
 		lights.add(sun);
@@ -101,86 +107,91 @@ public class MainLoop {
 		lights.add(new Light(new Vector3f(20, 100, 0), new Vector3f(0, 0, 1)));
 		lights.add(new Light(new Vector3f(30, 100, 0), new Vector3f(1, 0, 0)));
 		lights.add(new Light(new Vector3f(40, 100, 0), new Vector3f(1, 1, 0)));
-		
+
 		// ### Terrain textures ###
-		
+
 		TerrainTexture backgroundTexture = new TerrainTexture(loader.loadTexture("grassy"));
 		TerrainTexture rTexture = new TerrainTexture(loader.loadTexture("dirt"));
 		TerrainTexture gTexture = new TerrainTexture(loader.loadTexture("pinkFlowers"));
 		TerrainTexture bTexture = new TerrainTexture(loader.loadTexture("path"));
-		
+
 		TerrainTexturePack texturePack = new TerrainTexturePack(backgroundTexture, rTexture, gTexture, bTexture);
 		TerrainTexture blendMap = new TerrainTexture(loader.loadTexture("blendMap"));
-		
+
 		terrainPack.addTerrain(new Terrain(0, 1, loader, texturePack, blendMap, SEED));
 		terrainPack.addTerrain(new Terrain(1, 1, loader, texturePack, blendMap, SEED));
 		terrainPack.addTerrain(new Terrain(0, 0, loader, texturePack, blendMap, SEED));
 		terrainPack.addTerrain(new Terrain(1, 0, loader, texturePack, blendMap, SEED));
-		
+
 		// ### Random grass generation ###
-		
-		ModelTexture textureAtlas = new ModelTexture(loader.loadTexture("fern"));
-		textureAtlas.setNumberOfRows(2);
-		TexturedModel grassModel = new TexturedModel(loader.loadToVAO(OBJFileLoader.loadOBJ("fern")), textureAtlas);
-		//grassModel.getTexture().setHasTransparency(true);
-		//grassModel.getTexture().setUseFakeLighting(true);
+
+		ModelTexture textureAtlas = new ModelTexture(loader.loadTexture("lantern"));
+		textureAtlas.setNumberOfRows(1);
+		TexturedModel grassModel = new TexturedModel(loader.loadToVAO(OBJFileLoader.loadOBJ("lantern")), textureAtlas);
+		grassModel.getTexture().setHasTransparency(true);
+		grassModel.getTexture().setShineDamper(10);
+		grassModel.getTexture().setReflectivity(0.5f);
+		grassModel.getTexture().setSpecularMap(loader.loadTexture("lanternS"));
+
 		Random rand = new Random();
-		
+
 		for (int i = 0; i < 1000; i++) {
 			float x = rand.nextFloat() * 1000;
 			float z = rand.nextFloat() * 1000;
-			
-			entities.add(new Entity(grassModel, rand.nextInt(4), new Vector3f(x, terrainPack.getTerrainHeightByWorldPos(x, z), z), 0, 0, 0, 1));
+
+			entities.add(new Entity(grassModel, rand.nextInt(4),
+					new Vector3f(x, terrainPack.getTerrainHeightByWorldPos(x, z), z), 0, 0, 0, 1));
 		}
-		
-		
-		
+
 		// #### Water rendering ####
 		WaterMaster waterMaster = new WaterMaster(loader, renderer);
 		WaterTile water = new WaterTile(75, 75, 0);
 		waterMaster.addWaterTile(water);
-		
+
 		// #### Gui rendering ####
 		List<GuiTexture> guis = new ArrayList<GuiTexture>();
-		GuiTexture depth = new GuiTexture(waterMaster.getBuffers().getRefractionDepthTexture(), new Vector2f(0.5f, 0.5f), new Vector2f(0.25f, 0.25f));
-		GuiTexture refraction = new GuiTexture(waterMaster.getBuffers().getRefractionTexture(), new Vector2f(-0.5f, 0.5f), new Vector2f(0.25f, 0.25f));
+		GuiTexture depth = new GuiTexture(waterMaster.getBuffers().getRefractionDepthTexture(),
+				new Vector2f(0.5f, 0.5f), new Vector2f(0.25f, 0.25f));
+		GuiTexture refraction = new GuiTexture(waterMaster.getBuffers().getRefractionTexture(),
+				new Vector2f(-0.5f, 0.5f), new Vector2f(0.25f, 0.25f));
 		guis.add(depth);
 		guis.add(refraction);
-		
+
 		GuiRenderer guiRenderer = new GuiRenderer(loader);
-		
+
 		ParticleTexture particleTexture = new ParticleTexture(loader.loadTexture("particles/cosmic"), 4, true);
 		ParticleSystem ps = new ParticleSystem(particleTexture, 50, 10, 0.3f, 4);
-		
+
 		MultisampleFbo multisampleFbo = new MultisampleFbo(Display.getWidth(), Display.getHeight());
 		Fbo outputFbo = new Fbo(Display.getWidth(), Display.getHeight(), Fbo.DEPTH_TEXTURE);
-		
+
 		PostProcessing.init(loader);
-		
+
 		MousePicker picker = new MousePicker(camera, renderer.getProjectionMatrix(), terrainPack, entities, guis);
-		
+
 		while (!Display.isCloseRequested()) {
 			barrel.increaseRotation(0, 1, 0);
 			player.move(terrainPack);
 			camera.update();
 			picker.update();
-			
+
 			if (picker.getCurrentTerrainPoint() != null) {
 				Vector3f currentPoint = picker.getCurrentTerrainPoint();
 				flashLight.getPosition().x = currentPoint.x;
 				flashLight.getPosition().z = currentPoint.z;
-				flashLight.getPosition().y = terrainPack.getTerrainHeightByWorldPos(currentPoint.x, currentPoint.z) + 1.0f;
+				flashLight.getPosition().y = terrainPack.getTerrainHeightByWorldPos(currentPoint.x, currentPoint.z)
+						+ 1.0f;
 			}
-			
+
 			if (picker.getCurrentGui() != null) {
 				if (Mouse.isButtonDown(0)) {
 					System.out.println("Clicked gui.");
 					picker.getCurrentGui().getPosition().x += 0.1f;
 				}
 			}
-			
+
 			// Update debug info
-			
+
 			Terrain currentTerrain = terrainPack.getTerrainByWorldPos(player.getPosition().x, player.getPosition().z);
 			if (currentTerrain != null) {
 				text.remove();
@@ -188,36 +199,36 @@ public class MainLoop {
 				String textString = "X: " + Math.floor(pos.x) + " Y: " + Math.floor(pos.y) + " Z: " + Math.floor(pos.z);
 				text = new GUIText(textString, 1, font, new Vector2f(0.5f, 0f), 0.5f, false);
 			}
-			
-			//Sort list of lights
-			lights = new Sorter<Light>(lights, camera).sortByDistance();
-			
+
+			// Sort list of lights
+			DistanceSorter.sort(lights, camera);
+
 			renderer.renderShadowMap(entities, sun);
-			
+
 			ps.generateParticles(player.getPosition());
 			ParticleMaster.update(camera);
-			
+
 			Scene scene = new Scene(entities, normalMapEntities, terrainPack, lights, camera);
-			
+
 			waterMaster.renderBuffers(renderer, scene);
-			
+
 			multisampleFbo.bindFrameBuffer();
-			
+
 			renderer.renderScene(scene, new Vector4f(0, 1, 0, Float.MAX_VALUE));
 			waterMaster.renderWater(camera, lights);
 			ParticleMaster.renderParticles(camera);
-			
+
 			multisampleFbo.unbindFrameBuffer();
-			
+
 			multisampleFbo.resolveToFbo(outputFbo);
 			PostProcessing.doPostProcessing(outputFbo.getColourTexture());
-			
+
 			guiRenderer.render(guis);
 			TextMaster.render();
-			
+
 			DisplayManager.updateDisplay();
 		}
-		
+
 		PostProcessing.cleanUp();
 		outputFbo.cleanUp();
 		multisampleFbo.cleanUp();

+ 33 - 19
src/main/java/eu/tankernn/gameEngine/textures/ModelTexture.java

@@ -3,30 +3,16 @@ package eu.tankernn.gameEngine.textures;
 public class ModelTexture {
 	private int textureID;
 	private int normalMap;
-	
+	private int specularMap;
+
 	private float shineDemper = 1;
 	private float reflectivity = 0;
-	
+
 	private boolean hasTransparency = false;
 	private boolean useFakeLighting = false;
-	
-	private int numberOfRows = 1;
-	
-	public float getShineDamper() {
-		return shineDemper;
-	}
-
-	public void setShineDamper(float shineDemper) {
-		this.shineDemper = shineDemper;
-	}
+	private boolean hasSpecularMap = false;
 
-	public float getReflectivity() {
-		return reflectivity;
-	}
-
-	public void setReflectivity(float reflectivity) {
-		this.reflectivity = reflectivity;
-	}
+	private int numberOfRows = 1;
 
 	public ModelTexture(int id) {
 		this.textureID = id;
@@ -67,5 +53,33 @@ public class ModelTexture {
 	public void setNormalMap(int normalMap) {
 		this.normalMap = normalMap;
 	}
+
+	public float getShineDamper() {
+		return shineDemper;
+	}
+
+	public void setShineDamper(float shineDemper) {
+		this.shineDemper = shineDemper;
+	}
+
+	public float getReflectivity() {
+		return reflectivity;
+	}
+
+	public void setReflectivity(float reflectivity) {
+		this.reflectivity = reflectivity;
+	}
 	
+	public void setSpecularMap(int textureId) {
+		this.specularMap = textureId;
+		this.hasSpecularMap = true;
+	}
+	
+	public boolean hasSpecularMap() {
+		return this.hasSpecularMap;
+	}
+	
+	public int getSpecularMap() {
+		return this.specularMap;
+	}
 }

+ 19 - 0
src/main/java/eu/tankernn/gameEngine/util/DistanceSorter.java

@@ -0,0 +1,19 @@
+package eu.tankernn.gameEngine.util;
+
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+
+import eu.tankernn.gameEngine.entities.Positionable;
+
+public class DistanceSorter {
+	public static <T extends Positionable> void sort(List<T> list, Positionable centerPoint) {
+		Collections.sort(list, new Comparator<T>() {
+			@Override
+			public int compare(T t1, T t2) {
+				return Float.compare(Maths.distanceBetweenPoints(t1.getPosition(), centerPoint.getPosition()),
+						Maths.distanceBetweenPoints(t2.getPosition(), centerPoint.getPosition()));
+			}
+		});
+	}
+}

+ 0 - 79
src/main/java/eu/tankernn/gameEngine/util/Sorter.java

@@ -1,79 +0,0 @@
-package eu.tankernn.gameEngine.util;
-
-import java.util.List;
-import eu.tankernn.gameEngine.entities.Positionable;
-
-public class Sorter <T extends Positionable> {
-	private List<T> list;
-	private Positionable centerPoint;
-	
-	public Sorter (List<T> list, Positionable centerPoint) {
-		this.centerPoint = centerPoint;
-		this.list = list;
-	}
-	
-	public List<T> sortByDistance() {
-		quickSort(0, list.size() -1);
-		return list;
-		
-//		if (objects.size() < 2)
-//			return objects;
-//		
-//		Map<T, Float> lengths = new HashMap<T, Float>();
-//		for (T pos: objects)
-//			lengths.put(pos, Maths.distanceBetweenPoints(centerPoint.getPosition(), pos.getPosition()));
-//		
-//		List<T> sortedList = new ArrayList<T>();
-//		sortedList.addAll(objects);
-//		
-//		for (int j = 1; j < sortedList.size(); j++) {
-//			for (int i = j; i < sortedList.size(); i++) {
-//				if (lengths.get(sortedList.get(i)) < lengths.get(sortedList.get(i - 1))) {
-//					T temp = sortedList.get(i);
-//					sortedList.set(i, sortedList.get(i - 1));
-//					sortedList.set(i - 1, temp);
-//				}
-//			}
-//		}
-//		return sortedList;
-	}
-	
-	private void quickSort(int lowIndex, int highIndex) {
-        int i = lowIndex;
-        int j = highIndex;
-        // calculate pivot number, I am taking pivot as middle index number
-        float pivot = Maths.distanceBetweenPoints(list.get(lowIndex+(highIndex-lowIndex)/2).getPosition(), centerPoint.getPosition());
-        // Divide into two arrays
-        while (i <= j) {
-            /**
-             * In each iteration, we will identify a number from left side which
-             * is greater then the pivot value, and also we will identify a number
-             * from right side which is less then the pivot value. Once the search
-             * is done, then we exchange both numbers.
-             */
-            while (Maths.distanceBetweenPoints(list.get(i).getPosition(), centerPoint.getPosition()) < pivot) {
-                i++;
-            }
-            while (Maths.distanceBetweenPoints(list.get(j).getPosition(), centerPoint.getPosition()) > pivot) {
-                j--;
-            }
-            if (i <= j) {
-                swap(i, j);
-                //move index to next position on both sides
-                i++;
-                j--;
-            }
-        }
-        // call quickSort() method recursively
-        if (lowIndex < j)
-            quickSort(lowIndex, j);
-        if (i < highIndex)
-            quickSort(i, highIndex);
-	}
-	
-	private void swap(int i, int j) {
-		T temp = list.get(i);
-		list.set(i, list.get(j));
-		list.set(j, temp);
-	}
-}