Compare commits

...

4 Commits

28 changed files with 2150082 additions and 177 deletions

1602527
res/Tree1.obj Normal file

File diff suppressed because it is too large Load Diff

544823
res/drone.obj Normal file

File diff suppressed because it is too large Load Diff

424
res/fern.obj Normal file
View File

@ -0,0 +1,424 @@
# Blender v2.67 (sub 0) OBJ File: 'fern.blend'
# www.blender.org
o Plane
v -1.668906 1.421207 -4.981303
v 1.291248 1.274556 -4.874573
v -1.681098 2.133895 -4.624559
v 1.441855 2.133895 -4.624559
v -1.716799 2.696792 -3.607163
v 1.406155 2.587040 -3.607163
v -1.561477 2.636679 -1.975693
v 1.561477 2.470482 -1.975693
v -1.347036 1.668626 -1.121537
v 1.561477 1.857010 -0.942828
v -1.561477 -0.004097 -0.036216
v 1.561477 -0.004097 -0.036216
v 4.922924 2.330723 -2.113493
v 4.930951 2.184072 0.848574
v 4.372616 2.743763 -2.092158
v 4.493601 2.743764 1.028451
v 3.455437 2.912039 -2.056599
v 3.576422 2.802288 1.064010
v 1.942091 2.636679 -1.997928
v 2.063076 2.470482 1.122681
v 1.096885 1.668625 -1.750557
v 1.030987 1.857010 1.162695
v 0.004071 -0.004097 -1.922791
v 0.125055 -0.004097 1.197818
v 5.066892 1.391006 0.895784
v 3.068532 1.226996 3.537834
v 4.896961 2.123907 0.870659
v 2.891804 2.123907 3.730312
v 4.156424 2.763720 0.489422
v 2.151268 2.640977 3.349074
v 2.614438 2.708673 -0.523145
v 0.609281 2.522805 2.336507
v 1.694611 1.626036 -0.875212
v -0.336501 1.836719 1.673335
v 0.838482 -0.244677 -1.768426
v -1.166676 -0.244677 1.091226
v 1.019397 2.313956 4.808662
v -1.755515 2.175439 4.451704
v 1.067131 2.704086 4.290682
v -1.870153 2.704086 4.020000
v 1.146687 2.863028 3.427385
v -1.790596 2.759363 3.156702
v 1.277956 2.602941 2.002943
v -1.659327 2.445963 1.732260
v 1.150299 1.688583 1.180983
v -1.569803 1.866519 0.760803
v 1.446060 0.108644 0.178775
v -1.491222 0.108645 -0.091908
v -2.841108 2.359943 5.062696
v -4.854967 2.199116 2.513874
v -2.381020 2.812909 4.671439
v -4.599705 2.812910 2.062436
v -1.614207 2.997452 4.019345
v -3.832892 2.877091 1.410342
v -0.348966 2.695474 2.943390
v -2.567650 2.513212 0.334387
v 0.212271 1.633845 2.157409
v -1.704767 1.840439 -0.399406
v 1.271327 -0.200569 1.565499
v -0.947357 -0.200569 -1.043504
v -6.274055 1.495219 2.121059
v -6.142600 1.319109 -1.433610
v -5.544260 2.263995 1.986592
v -5.540795 2.263996 -1.763698
v -4.359546 2.953154 1.726256
v -4.356080 2.821356 -2.024032
v -2.407223 2.758862 1.710761
v -2.403757 2.559280 -2.039528
v -1.381247 1.596347 1.454191
v -1.163412 1.822574 -2.038382
v -0.078146 -0.412391 1.712912
v -0.074680 -0.412391 -2.037376
v -5.393490 2.359763 -2.091071
v -3.270963 2.199023 -4.547807
v -4.922800 2.812483 -1.713156
v -2.779778 2.812484 -4.382275
v -4.138320 2.996925 -1.083301
v -1.995298 2.876630 -3.752418
v -2.843926 2.695112 -0.044037
v -0.700904 2.512949 -2.713154
v -1.966746 1.634059 0.358820
v 0.181862 1.840542 -2.004385
v -1.186299 -0.199359 1.286863
v 0.956723 -0.199359 -1.382254
v -3.411818 3.548868 0.997281
v -2.987591 3.599077 -1.523562
v -2.848599 3.707952 1.095761
v -2.444523 3.919941 -1.557639
v -2.065775 3.556531 1.202876
v -1.694590 3.680621 -1.462553
v -0.939843 2.863784 1.318995
v -0.585573 2.942669 -1.352623
v -0.520648 1.836716 1.113190
v 0.054735 2.129301 -1.320096
v -0.183668 0.144097 1.216864
v 0.220408 0.356086 -1.436535
v -2.752246 3.548868 -2.331894
v -0.428357 3.599077 -3.396862
v -2.517365 3.707952 -1.810603
v -0.095124 3.919941 -2.966700
v -2.166277 3.556531 -1.102773
v 0.247442 3.680621 -2.292838
v -1.629914 2.863784 -0.106017
v 0.779423 2.942669 -1.313553
v -1.224182 1.836715 0.125201
v 1.112171 2.129301 -0.765528
v -1.120676 0.144097 0.462233
v 1.301564 0.356086 -0.693862
v 1.179569 3.548868 -3.299581
v 3.068619 3.599077 -1.577340
v 0.791671 3.707952 -2.879523
v 2.803056 3.919941 -1.102408
v 0.345733 3.637383 -2.162762
v 2.385048 3.761473 -0.406775
v -0.430031 2.863784 -1.396071
v 1.623650 2.942669 0.349049
v -0.484141 1.836715 -0.932226
v 1.249424 2.129301 0.869633
v -0.753842 0.144098 -0.705146
v 1.257542 0.356086 1.071969
v 3.478751 3.063767 0.129736
v 2.508179 3.113976 2.494606
v 2.969543 3.472751 -0.191974
v 1.989343 3.684741 2.306629
v 2.194941 3.556531 -0.538472
v 1.244161 3.680621 1.979129
v 1.122468 2.863784 -0.900428
v 0.186821 2.942669 1.626945
v 0.668168 1.836715 -0.792301
v -0.430486 2.129301 1.453785
v 0.362412 0.144098 -0.967850
v -0.617787 0.356086 1.530752
v 1.723514 3.227772 2.919589
v -0.813319 3.277982 3.234388
v 1.606172 3.518214 2.393483
v -1.051909 3.730203 2.765519
v 1.425735 3.556531 1.529277
v -1.234463 3.680621 1.936269
v 1.214835 2.863784 0.417193
v -1.446452 2.942669 0.842165
v 0.897690 1.836715 0.074411
v -1.598496 2.129301 0.219321
v 0.900611 0.144098 -0.278144
v -1.757470 0.356086 0.093891
vt 0.261788 0.894097
vt 0.741905 0.894097
vt 0.261788 0.999931
vt 0.261788 0.750634
vt 0.741905 0.750634
vt 0.261788 0.513983
vt 0.741905 0.513983
vt 0.261788 0.307545
vt 0.741905 0.307545
vt 0.261788 0.000069
vt 0.741905 0.000069
vt 0.741905 0.999931
vn 0.012848 0.702567 -0.711478
vn 0.020722 0.682089 -0.730949
vn 0.008454 0.417798 -0.908475
vn 0.034089 0.970763 -0.237495
vn 0.028413 0.982147 -0.185919
vn -0.002197 0.931425 0.363872
vn 0.050600 0.950804 0.305551
vn -0.060060 0.579974 0.812403
vn -0.036378 0.647877 0.760857
vn 0.000000 0.544298 0.838862
vn -0.051668 0.478774 0.876400
vn 0.409406 0.911954 0.025819
vn 0.432630 0.901395 -0.016755
vn 0.762535 0.646565 -0.021699
vn -0.002838 0.999115 0.041627
vn -0.064425 0.997650 0.023103
vn -0.440352 0.897580 0.020173
vn -0.361736 0.930509 0.057314
vn -0.797571 0.600513 -0.056856
vn -0.745903 0.665731 0.019196
vn -0.861782 0.506851 -0.018891
vn -0.898312 0.437910 0.034822
vn 0.698874 0.494675 0.516556
vn 0.674551 0.550340 0.491989
vn 0.814081 0.058443 0.577746
vn 0.238380 0.950316 0.200171
vn 0.172155 0.971587 0.162389
vn -0.299814 0.931639 -0.205206
vn -0.266366 0.954711 -0.132359
vn -0.600360 0.600513 -0.528123
vn -0.605304 0.665731 -0.436293
vn -0.674459 0.506851 -0.536790
vn -0.736076 0.437910 -0.516129
vn -0.036775 0.916135 0.399121
vn -0.080782 0.901364 0.425428
vn -0.066225 0.776391 0.626728
vn -0.025605 0.999512 -0.017548
vn -0.027863 0.996460 -0.078982
vn -0.003967 0.883175 -0.468978
vn 0.045595 0.915891 -0.398785
vn 0.083438 0.617115 -0.782434
vn 0.155522 0.675375 -0.720847
vn 0.076968 0.544298 -0.835322
vn 0.131870 0.478774 -0.867946
vn -0.305338 0.916135 0.259651
vn -0.355174 0.901364 0.247688
vn -0.485519 0.776391 0.401807
vn -0.005890 0.999725 -0.022248
vn 0.027192 0.996612 -0.077395
vn 0.333567 0.880856 -0.335856
vn 0.311014 0.913816 -0.261086
vn 0.606677 0.617115 -0.501083
vn 0.615162 0.675375 -0.406659
vn 0.639058 0.544298 -0.543443
vn 0.701102 0.478774 -0.528367
vn -0.626392 0.779382 -0.011170
vn -0.616840 0.786798 -0.020203
vn -0.752464 0.658498 -0.011689
vn -0.232734 0.971923 -0.034364
vn -0.149419 0.988311 -0.029939
vn 0.432173 0.900845 -0.040376
vn 0.368816 0.929472 0.002625
vn 0.786767 0.617115 0.011994
vn 0.731986 0.675375 0.089389
vn 0.838862 0.544298 0.000763
vn 0.876339 0.478774 0.052461
vn -0.312540 0.916135 -0.250923
vn -0.310190 0.901364 -0.302133
vn -0.486099 0.776391 -0.401105
vn 0.020722 0.999725 -0.009980
vn 0.081118 0.996612 0.012116
vn 0.392682 0.880856 0.264290
vn 0.315012 0.913816 0.256233
vn 0.606433 0.617115 0.501389
vn 0.515305 0.675375 0.527512
vn 0.654134 0.544298 0.525193
vn 0.651021 0.478774 0.588977
vn -0.039766 0.997467 0.058840
vn -0.070223 0.996551 0.043672
vn -0.312082 0.949828 0.019776
vn 0.351970 0.931425 0.092380
vn 0.406476 0.907346 0.107028
vn 0.748741 0.650807 0.125645
vn 0.693106 0.701834 0.164220
vn 0.941008 0.287820 0.177740
vn 0.899045 0.355663 0.255348
vn 0.965636 0.202216 0.163182
vn 0.969817 0.123722 0.209998
vn -0.071017 0.997467 0.000122
vn -0.075594 0.996551 -0.033570
vn -0.191656 0.949828 -0.247078
vn 0.121281 0.931425 0.343089
vn 0.139744 0.907346 0.396405
vn 0.316568 0.650807 0.690054
vn 0.253426 0.701834 0.665700
vn 0.381481 0.287820 0.878384
vn 0.293710 0.355663 0.887234
vn 0.407361 0.202216 0.890561
vn 0.370983 0.123722 0.920347
vn 0.044221 0.993347 -0.106052
vn 0.014801 0.990722 -0.134922
vn 0.269295 0.877132 -0.397565
vn -0.255837 0.938749 0.230781
vn -0.302591 0.912412 0.275491
vn -0.551134 0.636799 0.539171
vn -0.469649 0.713095 0.520463
vn -0.716178 0.263527 0.646229
vn -0.648152 0.347850 0.677389
vn -0.701132 0.155553 0.695822
vn -0.664724 0.081668 0.742607
vn 0.327616 0.942656 0.063509
vn 0.362804 0.927641 0.088351
vn 0.580432 0.796350 0.169958
vn -0.204443 0.971740 -0.117893
vn -0.237220 0.959471 -0.151952
vn -0.667226 0.674642 -0.315622
vn -0.624378 0.736290 -0.260781
vn -0.852535 0.263527 -0.451338
vn -0.858486 0.347850 -0.376751
vn -0.893948 0.155553 -0.420240
vn -0.925413 0.081668 -0.369976
vn 0.088076 0.954680 0.284280
vn 0.097964 0.957030 0.272896
vn 0.140873 0.767968 0.624775
vn 0.011750 0.963805 -0.266305
vn -0.005890 0.945097 -0.326640
vn -0.052400 0.674642 -0.736229
vn -0.079134 0.736290 -0.672018
vn -0.025086 0.263527 -0.964324
vn -0.092990 0.347850 -0.932920
vn -0.072512 0.155553 -0.985137
vn -0.131748 0.081668 -0.987884
vn 0.048097 0.271249 -0.961303
vn 0.600787 0.798486 0.037904
vn 0.775353 0.200293 0.598895
vn -0.130985 0.609851 0.781579
vn -0.640095 0.609851 0.467238
vn -0.851009 0.521989 -0.057314
vn -0.579485 0.609851 -0.540574
vn -0.510666 0.856990 -0.068850
vn -0.229835 0.856990 -0.461165
vn 0.166631 0.963195 -0.210852
vn 0.670217 0.694968 0.260292
vn 0.075594 0.879971 0.468917
s 1
f 3/1/1 4/2/2 1/3/3
f 5/4/4 6/5/5 3/1/1
f 7/6/6 8/7/7 6/5/5
f 9/8/8 10/9/9 7/6/6
f 11/10/10 12/11/11 9/8/8
f 15/1/12 16/2/13 14/12/14
f 17/4/15 18/5/16 15/1/12
f 19/6/17 20/7/18 17/4/15
f 21/8/19 22/9/20 19/6/17
f 23/10/21 24/11/22 22/9/20
f 27/1/23 28/2/24 26/12/25
f 29/4/26 30/5/27 28/2/24
f 31/6/28 32/7/29 29/4/26
f 33/8/30 34/9/31 31/6/28
f 35/10/32 36/11/33 34/9/31
f 39/1/34 40/2/35 37/3/36
f 41/4/37 42/5/38 40/2/35
f 43/6/39 44/7/40 41/4/37
f 45/8/41 46/9/42 44/7/40
f 47/10/43 48/11/44 45/8/41
f 51/1/45 52/2/46 49/3/47
f 53/4/48 54/5/49 52/2/46
f 55/6/50 56/7/51 54/5/49
f 57/8/52 58/9/53 56/7/51
f 59/10/54 60/11/55 57/8/52
f 63/1/56 64/2/57 61/3/58
f 65/4/59 66/5/60 63/1/56
f 67/6/61 68/7/62 66/5/60
f 69/8/63 70/9/64 68/7/62
f 71/10/65 72/11/66 69/8/63
f 75/1/67 76/2/68 73/3/69
f 77/4/70 78/5/71 76/2/68
f 79/6/72 80/7/73 78/5/71
f 81/8/74 82/9/75 80/7/73
f 83/10/76 84/11/77 81/8/74
f 87/1/78 88/2/79 85/3/80
f 89/4/81 90/5/82 87/1/78
f 91/6/83 92/7/84 90/5/82
f 93/8/85 94/9/86 92/7/84
f 95/10/87 96/11/88 93/8/85
f 99/1/89 100/2/90 97/3/91
f 101/4/92 102/5/93 99/1/89
f 103/6/94 104/7/95 102/5/93
f 105/8/96 106/9/97 104/7/95
f 107/10/98 108/11/99 105/8/96
f 111/1/100 112/2/101 110/12/102
f 113/4/103 114/5/104 111/1/100
f 115/6/105 116/7/106 114/5/104
f 117/8/107 118/9/108 115/6/105
f 119/10/109 120/11/110 118/9/108
f 123/1/111 124/2/112 121/3/113
f 125/4/114 126/5/115 123/1/111
f 127/6/116 128/7/117 125/4/114
f 129/8/118 130/9/119 127/6/116
f 131/10/120 132/11/121 130/9/119
f 135/1/122 136/2/123 134/12/124
f 137/4/125 138/5/126 136/2/123
f 139/6/127 140/7/128 137/4/125
f 141/8/129 142/9/130 139/6/127
f 143/10/131 144/11/132 142/9/130
f 4/2/2 2/12/133 1/3/3
f 6/5/5 4/2/2 3/1/1
f 5/4/4 7/6/6 6/5/5
f 10/9/9 8/7/7 7/6/6
f 12/11/11 10/9/9 9/8/8
f 13/3/134 15/1/12 14/12/14
f 18/5/16 16/2/13 15/1/12
f 20/7/18 18/5/16 17/4/15
f 22/9/20 20/7/18 19/6/17
f 21/8/19 23/10/21 22/9/20
f 25/3/135 27/1/23 26/12/25
f 27/1/23 29/4/26 28/2/24
f 32/7/29 30/5/27 29/4/26
f 34/9/31 32/7/29 31/6/28
f 33/8/30 35/10/32 34/9/31
f 40/2/35 38/12/136 37/3/36
f 39/1/34 41/4/37 40/2/35
f 44/7/40 42/5/38 41/4/37
f 43/6/39 45/8/41 44/7/40
f 48/11/44 46/9/42 45/8/41
f 52/2/46 50/12/137 49/3/47
f 51/1/45 53/4/48 52/2/46
f 53/4/48 55/6/50 54/5/49
f 55/6/50 57/8/52 56/7/51
f 60/11/55 58/9/53 57/8/52
f 64/2/57 62/12/138 61/3/58
f 66/5/60 64/2/57 63/1/56
f 65/4/59 67/6/61 66/5/60
f 67/6/61 69/8/63 68/7/62
f 72/11/66 70/9/64 69/8/63
f 76/2/68 74/12/139 73/3/69
f 75/1/67 77/4/70 76/2/68
f 77/4/70 79/6/72 78/5/71
f 79/6/72 81/8/74 80/7/73
f 84/11/77 82/9/75 81/8/74
f 88/2/79 86/12/140 85/3/80
f 90/5/82 88/2/79 87/1/78
f 89/4/81 91/6/83 90/5/82
f 91/6/83 93/8/85 92/7/84
f 96/11/88 94/9/86 93/8/85
f 100/2/90 98/12/141 97/3/91
f 102/5/93 100/2/90 99/1/89
f 101/4/92 103/6/94 102/5/93
f 103/6/94 105/8/96 104/7/95
f 108/11/99 106/9/97 105/8/96
f 109/3/142 111/1/100 110/12/102
f 114/5/104 112/2/101 111/1/100
f 113/4/103 115/6/105 114/5/104
f 118/9/108 116/7/106 115/6/105
f 117/8/107 119/10/109 118/9/108
f 124/2/112 122/12/143 121/3/113
f 126/5/115 124/2/112 123/1/111
f 128/7/117 126/5/115 125/4/114
f 130/9/119 128/7/117 127/6/116
f 129/8/118 131/10/120 130/9/119
f 133/3/144 135/1/122 134/12/124
f 135/1/122 137/4/125 136/2/123
f 140/7/128 138/5/126 137/4/125
f 142/9/130 140/7/128 139/6/127
f 141/8/129 143/10/131 142/9/130

BIN
res/fern.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 162 KiB

BIN
res/flower.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

346
res/grass.obj Normal file
View File

@ -0,0 +1,346 @@
# Blender v2.67 (sub 0) OBJ File: 'lowPolyPlants.blend'
# www.blender.org
mtllib grass.mtl
o Plane
v 0.063088 0.003610 -4.997082
v -1.136912 0.003610 -4.997082
v 0.063088 1.203610 -4.997082
v -1.136912 1.203610 -4.997082
v -0.536911 0.003610 -5.597082
v -0.536912 0.003610 -4.397082
v -0.536912 1.203610 -5.597083
v -0.536912 1.203610 -4.397082
v -5.427285 0.003610 -0.769423
v -6.627285 0.003610 -0.769423
v -5.427285 1.203610 -0.769424
v -6.627285 1.203610 -0.769424
v -6.027285 0.003610 -1.369424
v -6.027285 0.003610 -0.169423
v -6.027285 1.203610 -1.369424
v -6.027285 1.203610 -0.169424
v 0.627331 0.003610 1.154491
v 0.120805 0.003610 0.066634
v 0.627331 1.203610 1.154491
v 0.120805 1.203610 0.066634
v 0.917996 0.003610 0.357300
v -0.169860 0.003611 0.863825
v 0.917996 1.203610 0.357300
v -0.169860 1.203610 0.863825
v 2.736700 0.003610 -2.973755
v 1.939363 0.003610 -3.870557
v 2.736700 1.203610 -2.973755
v 1.939363 1.203610 -3.870557
v 2.786432 0.003610 -3.820825
v 1.889630 0.003610 -3.023487
v 2.786432 1.203610 -3.820825
v 1.889630 1.203610 -3.023487
v -2.374338 0.003610 -1.890785
v -3.247929 0.003610 -2.713487
v -2.374338 1.203610 -1.890785
v -3.247929 1.203610 -2.713487
v -2.399782 0.003610 -2.738931
v -3.222484 0.003611 -1.865341
v -2.399782 1.203610 -2.738931
v -3.222484 1.203610 -1.865341
v 6.729870 0.003610 2.758007
v 7.206303 0.003610 1.656639
v 6.729870 1.203610 2.758007
v 7.206303 1.203610 1.656640
v 7.518770 0.003610 2.445540
v 6.417403 0.003611 1.969108
v 7.518770 1.203610 2.445540
v 6.417403 1.203610 1.969108
v -2.949056 0.003611 6.270791
v -2.019891 0.003611 5.511415
v -2.949056 1.203610 6.270791
v -2.019891 1.203610 5.511416
v -2.104786 0.003610 6.355686
v -2.864161 0.003611 5.426521
v -2.104786 1.203610 6.355686
v -2.864161 1.203610 5.426521
v -11.257655 0.003611 -0.649311
v -12.123328 0.003610 0.181718
v -11.257655 1.203610 -0.649312
v -12.123328 1.203610 0.181718
v -12.106008 0.003611 -0.666633
v -11.274976 0.003610 0.199040
v -12.106008 1.203610 -0.666633
v -11.274976 1.203610 0.199040
v -5.115887 0.003611 6.717537
v -5.981559 0.003611 7.548567
v -5.115886 1.203610 6.717537
v -5.981559 1.203610 7.548567
v -5.964238 0.003611 6.700215
v -5.133207 0.003611 7.565888
v -5.964237 1.203610 6.700215
v -5.133207 1.203610 7.565887
v -4.044483 0.003611 4.351145
v -5.163255 0.003611 3.917153
v -4.044483 1.203610 4.351144
v -5.163255 1.203610 3.917153
v -4.386873 0.003611 3.574763
v -4.820865 0.003611 4.693535
v -4.386873 1.203610 3.574763
v -4.820865 1.203610 4.693534
v -5.924183 0.003610 -3.071747
v -6.925926 0.003611 -3.732436
v -5.924183 1.203610 -3.071747
v -6.925926 1.203610 -3.732436
v -6.094710 0.003611 -3.902963
v -6.755400 0.003611 -2.901220
v -6.094710 1.203610 -3.902963
v -6.755400 1.203610 -2.901221
v -7.753965 0.003611 1.248239
v -8.950217 0.003611 1.153468
v -7.753965 1.203610 1.248238
v -8.950217 1.203610 1.153467
v -8.304706 0.003611 0.602727
v -8.399476 0.003611 1.798979
v -8.304706 1.203610 0.602727
v -8.399476 1.203610 1.798979
v -1.912768 0.003610 0.464466
v -2.331797 0.003611 -0.659996
v -1.912768 1.203610 0.464466
v -2.331796 1.203610 -0.659996
v -1.560051 0.003611 -0.307279
v -2.684512 0.003611 0.111750
v -1.560051 1.203610 -0.307280
v -2.684513 1.203610 0.111750
v -4.742368 0.003611 1.656384
v -5.161397 0.003611 0.531922
v -4.742368 1.203610 1.656384
v -5.161397 1.203610 0.531922
v -4.389652 0.003611 0.884638
v -5.514113 0.003611 1.303667
v -4.389652 1.203610 0.884638
v -5.514114 1.203610 1.303667
v 4.391148 1.203610 0.926363
v 3.597642 1.203610 0.026169
v 4.391148 0.003611 0.926362
v 3.597642 0.003610 0.026169
v 3.544298 1.203610 0.873019
v 4.444492 1.203610 0.079513
v 3.544298 0.003610 0.873018
v 4.444492 0.003610 0.079513
v 4.806449 1.203610 3.812527
v 3.732761 1.203610 3.276623
v 4.806449 0.003611 3.812527
v 3.732761 0.003611 3.276624
v 4.001654 1.203610 4.081419
v 4.537557 1.203610 3.007731
v 4.001654 0.003611 4.081419
v 4.537557 0.003611 3.007731
v 6.609623 1.203610 -3.161592
v 7.186171 1.203610 -4.214014
v 6.609624 0.003611 -3.161592
v 7.186171 0.003610 -4.214014
v 6.371686 1.203610 -3.976077
v 7.424108 1.203610 -3.399530
v 6.371686 0.003611 -3.976076
v 7.424108 0.003610 -3.399530
v -0.487433 1.203610 1.980146
v -1.577091 1.203610 1.477509
v -0.487433 0.003611 1.980146
v -1.577091 0.003610 1.477509
v -1.283581 1.203610 2.273656
v -0.780943 1.203610 1.183998
v -1.283581 0.003610 2.273657
v -0.780943 0.003610 1.183998
v 10.179677 1.203610 0.517455
v 8.984852 1.203610 0.406136
v 10.179677 0.003611 0.517455
v 8.984852 0.003610 0.406136
v 9.526605 1.203610 1.059208
v 9.637924 1.203610 -0.135617
v 9.526605 0.003610 1.059208
v 9.637924 0.003610 -0.135617
v 5.869500 1.203610 5.422760
v 4.930470 1.203610 6.169901
v 5.869502 0.003611 5.422760
v 4.930470 0.003611 6.169903
v 5.773557 1.203610 6.265846
v 5.026414 1.203610 5.326817
v 5.773557 0.003611 6.265847
v 5.026415 0.003611 5.326817
v 0.637121 1.203610 -1.805795
v 1.213668 1.203610 -2.858217
v 0.637121 0.003611 -1.805795
v 1.213669 0.003611 -2.858217
v 0.399184 1.203610 -2.620279
v 1.451606 1.203610 -2.043732
v 0.399184 0.003611 -2.620279
v 1.451606 0.003611 -2.043732
v 1.740329 1.203610 -0.516481
v 1.336903 1.203610 -1.646635
v 1.740329 0.003611 -0.516482
v 1.336903 0.003610 -1.646635
v 0.973539 1.203610 -0.879845
v 2.103693 1.203610 -1.283271
v 0.973540 0.003611 -0.879845
v 2.103693 0.003611 -1.283271
v 3.117721 1.203610 2.883694
v 2.804810 1.203610 1.725209
v 3.117721 0.003611 2.883693
v 2.804810 0.003611 1.725209
v 2.382023 1.203610 2.460907
v 3.540508 1.203610 2.147995
v 2.382023 0.003611 2.460907
v 3.540508 0.003611 2.147995
v 1.243791 1.203610 8.964542
v 0.077800 1.203610 9.248203
v 1.243791 0.003611 8.964540
v 0.077800 0.003611 9.248203
v 0.802626 1.203610 9.689367
v 0.518964 1.203610 8.523376
v 0.802626 0.003611 9.689367
v 0.518964 0.003611 8.523376
v 4.819168 1.203610 -1.187724
v 4.506256 1.203610 -2.346208
v 4.819168 0.003611 -1.187724
v 4.506257 0.003611 -2.346208
v 4.083470 1.203610 -1.610511
v 5.241954 1.203610 -1.923421
v 4.083470 0.003611 -1.610510
v 5.241954 0.003611 -1.923421
v 0.499905 1.203610 -8.019167
v -0.210803 1.203610 -8.986067
v 0.499905 0.003610 -8.019167
v -0.210803 0.003610 -8.986066
v -0.338899 1.203610 -8.147264
v 0.628001 1.203610 -8.857970
v -0.338898 0.003610 -8.147264
v 0.628001 0.003610 -8.857970
v -2.017782 1.203610 3.719780
v -2.953916 1.203610 2.969012
v -2.017782 0.003611 3.719780
v -2.953915 0.003611 2.969012
v -2.861232 1.203610 3.812463
v -2.110465 1.203610 2.876329
v -2.861232 0.003611 3.812463
v -2.110465 0.003611 2.876329
v 1.450961 1.203610 5.045464
v 0.268659 1.203610 4.840132
v 1.450961 0.003611 5.045464
v 0.268660 0.003611 4.840132
v 0.757144 1.203610 5.533949
v 0.962477 1.203610 4.351647
v 0.757144 0.003611 5.533949
v 0.962477 0.003611 4.351646
vt 0.000100 0.000100
vt 0.999900 0.000100
vt 0.999900 0.999900
vt 0.000100 0.999900
usemtl Material.001
s off
f 2/1 1/2 3/3 4/4
f 6/1 5/2 7/3 8/4
f 10/1 9/2 11/3 12/4
f 14/1 13/2 15/3 16/4
f 18/1 17/2 19/3 20/4
f 22/1 21/2 23/3 24/4
f 26/1 25/2 27/3 28/4
f 30/1 29/2 31/3 32/4
f 34/1 33/2 35/3 36/4
f 38/1 37/2 39/3 40/4
f 42/1 41/2 43/3 44/4
f 46/1 45/2 47/3 48/4
f 50/1 49/2 51/3 52/4
f 54/1 53/2 55/3 56/4
f 58/1 57/2 59/3 60/4
f 62/1 61/2 63/3 64/4
f 66/1 65/2 67/3 68/4
f 70/1 69/2 71/3 72/4
f 74/1 73/2 75/3 76/4
f 78/1 77/2 79/3 80/4
f 82/1 81/2 83/3 84/4
f 86/1 85/2 87/3 88/4
f 90/1 89/2 91/3 92/4
f 94/1 93/2 95/3 96/4
f 98/1 97/2 99/3 100/4
f 102/1 101/2 103/3 104/4
f 106/1 105/2 107/3 108/4
f 110/1 109/2 111/3 112/4
f 115/1 116/2 114/3 113/4
f 119/1 120/2 118/3 117/4
f 123/1 124/2 122/3 121/4
f 127/1 128/2 126/3 125/4
f 131/1 132/2 130/3 129/4
f 135/1 136/2 134/3 133/4
f 139/1 140/2 138/3 137/4
f 143/1 144/2 142/3 141/4
f 147/1 148/2 146/3 145/4
f 151/1 152/2 150/3 149/4
f 155/1 156/2 154/3 153/4
f 159/1 160/2 158/3 157/4
f 163/1 164/2 162/3 161/4
f 167/1 168/2 166/3 165/4
f 171/1 172/2 170/3 169/4
f 175/1 176/2 174/3 173/4
f 179/1 180/2 178/3 177/4
f 183/1 184/2 182/3 181/4
f 187/1 188/2 186/3 185/4
f 191/1 192/2 190/3 189/4
f 195/1 196/2 194/3 193/4
f 199/1 200/2 198/3 197/4
f 203/1 204/2 202/3 201/4
f 207/1 208/2 206/3 205/4
f 211/1 212/2 210/3 209/4
f 215/1 216/2 214/3 213/4
f 219/1 220/2 218/3 217/4
f 223/1 224/2 222/3 221/4
f 1 4
f 5 8
f 9 12
f 13 16
f 180 177
f 184 181
f 17 20
f 21 24
f 25 28
f 29 32
f 33 36
f 37 40
f 41 44
f 45 48
f 49 52
f 53 56
f 57 60
f 61 64
f 65 68
f 69 72
f 196 193
f 200 197
f 73 76
f 77 80
f 81 84
f 85 88
f 89 92
f 93 96
f 97 100
f 101 104
f 105 108
f 109 112
f 204 201
f 208 205
f 188 185
f 192 189
f 120 117
f 144 141
f 152 149
f 140 137
f 164 161
f 168 165
f 136 133
f 116 113
f 148 145
f 212 209
f 216 213
f 132 129
f 124 121
f 172 169
f 176 173
f 220 217
f 224 221
f 160 157
f 128 125
f 156 153

413
res/grassModel.obj Normal file
View File

@ -0,0 +1,413 @@
# Blender v2.67 (sub 0) OBJ File: 'lowPolyPlants.blend'
# www.blender.org
o Plane
v 0.063088 0.003610 -4.997082
v -1.136912 0.003610 -4.997082
v 0.063088 1.203610 -4.997082
v -1.136912 1.203610 -4.997082
v -0.536911 0.003610 -5.597082
v -0.536912 0.003610 -4.397082
v -0.536912 1.203610 -5.597083
v -0.536912 1.203610 -4.397082
v -5.427285 0.003610 -0.769423
v -6.627285 0.003610 -0.769423
v -5.427285 1.203610 -0.769424
v -6.627285 1.203610 -0.769424
v -6.027285 0.003610 -1.369424
v -6.027285 0.003610 -0.169423
v -6.027285 1.203610 -1.369424
v -6.027285 1.203610 -0.169424
v 0.627331 0.003610 1.154491
v 0.120805 0.003610 0.066634
v 0.627331 1.203610 1.154491
v 0.120805 1.203610 0.066634
v 0.917996 0.003610 0.357300
v -0.169860 0.003611 0.863825
v 0.917996 1.203610 0.357300
v -0.169860 1.203610 0.863825
v 2.736700 0.003610 -2.973755
v 1.939363 0.003610 -3.870557
v 2.736700 1.203610 -2.973755
v 1.939363 1.203610 -3.870557
v 2.786432 0.003610 -3.820825
v 1.889630 0.003610 -3.023487
v 2.786432 1.203610 -3.820825
v 1.889630 1.203610 -3.023487
v -2.374338 0.003610 -1.890785
v -3.247929 0.003610 -2.713487
v -2.374338 1.203610 -1.890785
v -3.247929 1.203610 -2.713487
v -2.399782 0.003610 -2.738931
v -3.222484 0.003611 -1.865341
v -2.399782 1.203610 -2.738931
v -3.222484 1.203610 -1.865341
v 6.729870 0.003610 2.758007
v 7.206303 0.003610 1.656639
v 6.729870 1.203610 2.758007
v 7.206303 1.203610 1.656640
v 7.518770 0.003610 2.445540
v 6.417403 0.003611 1.969108
v 7.518770 1.203610 2.445540
v 6.417403 1.203610 1.969108
v -2.949056 0.003611 6.270791
v -2.019891 0.003611 5.511415
v -2.949056 1.203610 6.270791
v -2.019891 1.203610 5.511416
v -2.104786 0.003610 6.355686
v -2.864161 0.003611 5.426521
v -2.104786 1.203610 6.355686
v -2.864161 1.203610 5.426521
v -11.257655 0.003611 -0.649311
v -12.123328 0.003610 0.181718
v -11.257655 1.203610 -0.649312
v -12.123328 1.203610 0.181718
v -12.106008 0.003611 -0.666633
v -11.274976 0.003610 0.199040
v -12.106008 1.203610 -0.666633
v -11.274976 1.203610 0.199040
v -5.115887 0.003611 6.717537
v -5.981559 0.003611 7.548567
v -5.115886 1.203610 6.717537
v -5.981559 1.203610 7.548567
v -5.964238 0.003611 6.700215
v -5.133207 0.003611 7.565888
v -5.964237 1.203610 6.700215
v -5.133207 1.203610 7.565887
v -4.044483 0.003611 4.351145
v -5.163255 0.003611 3.917153
v -4.044483 1.203610 4.351144
v -5.163255 1.203610 3.917153
v -4.386873 0.003611 3.574763
v -4.820865 0.003611 4.693535
v -4.386873 1.203610 3.574763
v -4.820865 1.203610 4.693534
v -5.924183 0.003610 -3.071747
v -6.925926 0.003611 -3.732436
v -5.924183 1.203610 -3.071747
v -6.925926 1.203610 -3.732436
v -6.094710 0.003611 -3.902963
v -6.755400 0.003611 -2.901220
v -6.094710 1.203610 -3.902963
v -6.755400 1.203610 -2.901221
v -7.753965 0.003611 1.248239
v -8.950217 0.003611 1.153468
v -7.753965 1.203610 1.248238
v -8.950217 1.203610 1.153467
v -8.304706 0.003611 0.602727
v -8.399476 0.003611 1.798979
v -8.304706 1.203610 0.602727
v -8.399476 1.203610 1.798979
v -1.912768 0.003610 0.464466
v -2.331797 0.003611 -0.659996
v -1.912768 1.203610 0.464466
v -2.331796 1.203610 -0.659996
v -1.560051 0.003611 -0.307279
v -2.684512 0.003611 0.111750
v -1.560051 1.203610 -0.307280
v -2.684513 1.203610 0.111750
v -4.742368 0.003611 1.656384
v -5.161397 0.003611 0.531922
v -4.742368 1.203610 1.656384
v -5.161397 1.203610 0.531922
v -4.389652 0.003611 0.884638
v -5.514113 0.003611 1.303667
v -4.389652 1.203610 0.884638
v -5.514114 1.203610 1.303667
v 4.391148 1.203610 0.926363
v 3.597642 1.203610 0.026169
v 4.391148 0.003611 0.926362
v 3.597642 0.003610 0.026169
v 3.544298 1.203610 0.873019
v 4.444492 1.203610 0.079513
v 3.544298 0.003610 0.873018
v 4.444492 0.003610 0.079513
v 4.806449 1.203610 3.812527
v 3.732761 1.203610 3.276623
v 4.806449 0.003611 3.812527
v 3.732761 0.003611 3.276624
v 4.001654 1.203610 4.081419
v 4.537557 1.203610 3.007731
v 4.001654 0.003611 4.081419
v 4.537557 0.003611 3.007731
v 6.609623 1.203610 -3.161592
v 7.186171 1.203610 -4.214014
v 6.609624 0.003611 -3.161592
v 7.186171 0.003610 -4.214014
v 6.371686 1.203610 -3.976077
v 7.424108 1.203610 -3.399530
v 6.371686 0.003611 -3.976076
v 7.424108 0.003610 -3.399530
v -0.487433 1.203610 1.980146
v -1.577091 1.203610 1.477509
v -0.487433 0.003611 1.980146
v -1.577091 0.003610 1.477509
v -1.283581 1.203610 2.273656
v -0.780943 1.203610 1.183998
v -1.283581 0.003610 2.273657
v -0.780943 0.003610 1.183998
v 10.179677 1.203610 0.517455
v 8.984852 1.203610 0.406136
v 10.179677 0.003611 0.517455
v 8.984852 0.003610 0.406136
v 9.526605 1.203610 1.059208
v 9.637924 1.203610 -0.135617
v 9.526605 0.003610 1.059208
v 9.637924 0.003610 -0.135617
v 5.869500 1.203610 5.422760
v 4.930470 1.203610 6.169901
v 5.869502 0.003611 5.422760
v 4.930470 0.003611 6.169903
v 5.773557 1.203610 6.265846
v 5.026414 1.203610 5.326817
v 5.773557 0.003611 6.265847
v 5.026415 0.003611 5.326817
v 0.637121 1.203610 -1.805795
v 1.213668 1.203610 -2.858217
v 0.637121 0.003611 -1.805795
v 1.213669 0.003611 -2.858217
v 0.399184 1.203610 -2.620279
v 1.451606 1.203610 -2.043732
v 0.399184 0.003611 -2.620279
v 1.451606 0.003611 -2.043732
v 1.740329 1.203610 -0.516481
v 1.336903 1.203610 -1.646635
v 1.740329 0.003611 -0.516482
v 1.336903 0.003610 -1.646635
v 0.973539 1.203610 -0.879845
v 2.103693 1.203610 -1.283271
v 0.973540 0.003611 -0.879845
v 2.103693 0.003611 -1.283271
v 3.117721 1.203610 2.883694
v 2.804810 1.203610 1.725209
v 3.117721 0.003611 2.883693
v 2.804810 0.003611 1.725209
v 2.382023 1.203610 2.460907
v 3.540508 1.203610 2.147995
v 2.382023 0.003611 2.460907
v 3.540508 0.003611 2.147995
v 1.243791 1.203610 8.964542
v 0.077800 1.203610 9.248203
v 1.243791 0.003611 8.964540
v 0.077800 0.003611 9.248203
v 0.802626 1.203610 9.689367
v 0.518964 1.203610 8.523376
v 0.802626 0.003611 9.689367
v 0.518964 0.003611 8.523376
v 4.819168 1.203610 -1.187724
v 4.506256 1.203610 -2.346208
v 4.819168 0.003611 -1.187724
v 4.506257 0.003611 -2.346208
v 4.083470 1.203610 -1.610511
v 5.241954 1.203610 -1.923421
v 4.083470 0.003611 -1.610510
v 5.241954 0.003611 -1.923421
v 0.499905 1.203610 -8.019167
v -0.210803 1.203610 -8.986067
v 0.499905 0.003610 -8.019167
v -0.210803 0.003610 -8.986066
v -0.338899 1.203610 -8.147264
v 0.628001 1.203610 -8.857970
v -0.338898 0.003610 -8.147264
v 0.628001 0.003610 -8.857970
v -2.017782 1.203610 3.719780
v -2.953916 1.203610 2.969012
v -2.017782 0.003611 3.719780
v -2.953915 0.003611 2.969012
v -2.861232 1.203610 3.812463
v -2.110465 1.203610 2.876329
v -2.861232 0.003611 3.812463
v -2.110465 0.003611 2.876329
v 1.450961 1.203610 5.045464
v 0.268659 1.203610 4.840132
v 1.450961 0.003611 5.045464
v 0.268660 0.003611 4.840132
v 0.757144 1.203610 5.533949
v 0.962477 1.203610 4.351647
v 0.757144 0.003611 5.533949
v 0.962477 0.003611 4.351646
vt 0.000100 0.000100
vt 0.999900 0.000100
vt 0.999900 0.999900
vt 0.000100 0.999900
vn 0.000000 0.000000 1.000000
vn 1.000000 0.000000 0.000000
vn -0.906547 0.000000 0.422104
vn 0.422104 0.000000 0.906547
vn -0.747335 0.000000 0.664448
vn 0.664448 0.000000 0.747335
vn -0.685585 0.000000 0.727992
vn 0.727992 0.000000 0.685585
vn -0.917807 0.000001 -0.397027
vn -0.397027 0.000000 0.917807
vn -0.632813 0.000000 -0.774304
vn -0.774305 0.000000 0.632813
vn 0.692525 0.000000 0.721394
vn 0.721393 -0.000000 -0.692526
vn 0.721394 -0.000001 -0.692525
vn -0.361660 0.000000 0.932310
vn 0.932310 0.000000 0.361660
vn -0.550575 0.000000 0.834786
vn 0.834786 0.000000 0.550575
vn -0.078976 0.000000 0.996877
vn 0.996877 0.000000 0.078975
vn -0.937052 0.000000 0.349191
vn 0.349191 0.000001 0.937052
vn 0.349191 -0.000000 0.937052
vn 0.750161 0.000000 -0.661255
vn 0.661255 -0.000000 0.750162
vn 0.446586 -0.000000 -0.894741
vn 0.894741 -0.000000 0.446586
vn 0.877019 0.000000 0.480456
vn -0.480456 0.000001 0.877019
vn 0.418865 -0.000000 -0.908049
vn 0.908049 0.000000 0.418865
vn 0.092766 0.000000 -0.995688
vn 0.995688 0.000000 0.092766
vn -0.622618 -0.000001 -0.782526
vn 0.782526 0.000001 -0.622618
vn -0.480456 0.000000 0.877019
vn 0.941795 -0.000000 -0.336188
vn 0.336188 0.000000 0.941795
vn 0.965404 -0.000000 -0.260759
vn 0.260759 0.000000 0.965404
vn -0.236386 0.000001 -0.971659
vn 0.971659 -0.000000 -0.236386
vn 0.965404 0.000001 -0.260759
vn 0.260760 0.000000 0.965404
vn 0.805749 -0.000000 -0.592257
vn 0.592256 -0.000000 0.805750
vn 0.625641 0.000001 -0.780111
vn 0.780112 0.000000 0.625640
vn 0.171110 0.000000 -0.985252
vn 0.985252 0.000000 0.171111
vn 0.664448 0.000000 0.747334
vn -0.917807 -0.000000 -0.397028
vn -0.632813 -0.000000 -0.774305
vn -0.774304 0.000000 0.632813
vn 0.721394 -0.000000 -0.692525
vn -0.361659 0.000000 0.932310
vn 0.661254 -0.000000 0.750162
vn 0.877019 0.000001 0.480457
vn 0.092765 -0.000000 -0.995688
vn -0.622618 -0.000000 -0.782526
vn 0.782525 -0.000000 -0.622619
vn -0.236384 0.000000 -0.971660
vn 0.971659 0.000000 -0.236385
vn 0.965404 0.000000 -0.260760
vn 0.260759 0.000001 0.965404
vn 0.805750 0.000000 -0.592256
vn 0.625640 -0.000000 -0.780112
vn 0.780112 0.000000 0.625639
s off
f 2/1/1 1/2/1 3/3/1
f 6/1/2 5/2/2 7/3/2
f 10/1/1 9/2/1 11/3/1
f 14/1/2 13/2/2 15/3/2
f 18/1/3 17/2/3 20/4/3
f 22/1/4 21/2/4 23/3/4
f 26/1/5 25/2/5 28/4/5
f 30/1/6 29/2/6 31/3/6
f 34/1/7 33/2/7 36/4/7
f 38/1/8 37/2/8 39/3/8
f 42/1/9 41/2/9 44/4/9
f 46/1/10 45/2/10 48/4/10
f 50/1/11 49/2/11 52/4/11
f 54/1/12 53/2/12 56/4/12
f 58/1/13 57/2/13 59/3/13
f 62/1/14 61/2/14 63/3/14
f 66/1/13 65/2/13 67/3/13
f 70/1/15 69/2/15 71/3/15
f 74/1/16 73/2/16 76/4/16
f 78/1/17 77/2/17 79/3/17
f 82/1/18 81/2/18 84/4/18
f 86/1/19 85/2/19 87/3/19
f 90/1/20 89/2/20 92/4/20
f 94/1/21 93/2/21 95/3/21
f 98/1/22 97/2/22 100/4/22
f 102/1/23 101/2/23 103/3/23
f 106/1/22 105/2/22 108/4/22
f 110/1/24 109/2/24 111/3/24
f 115/1/25 116/2/25 114/3/25
f 119/1/26 120/2/26 118/3/26
f 123/1/27 124/2/27 122/3/27
f 127/1/28 128/2/28 126/3/28
f 131/1/29 132/2/29 130/3/29
f 135/1/30 136/2/30 133/4/30
f 139/1/31 140/2/31 138/3/31
f 143/1/32 144/2/32 142/3/32
f 147/1/33 148/2/33 146/3/33
f 151/1/34 152/2/34 150/3/34
f 155/1/35 156/2/35 153/4/35
f 159/1/36 160/2/36 158/3/36
f 163/1/29 164/2/29 162/3/29
f 167/1/37 168/2/37 165/4/37
f 171/1/38 172/2/38 170/3/38
f 175/1/39 176/2/39 174/3/39
f 179/1/40 180/2/40 178/3/40
f 183/1/41 184/2/41 182/3/41
f 187/1/42 188/2/42 185/4/42
f 191/1/43 192/2/43 190/3/43
f 195/1/44 196/2/44 194/3/44
f 199/1/45 200/2/45 198/3/45
f 203/1/46 204/2/46 202/3/46
f 207/1/47 208/2/47 206/3/47
f 211/1/48 212/2/48 210/3/48
f 215/1/49 216/2/49 214/3/49
f 219/1/50 220/2/50 218/3/50
f 223/1/51 224/2/51 222/3/51
f 4/4/1 2/1/1 3/3/1
f 8/4/2 6/1/2 7/3/2
f 12/4/1 10/1/1 11/3/1
f 16/4/2 14/1/2 15/3/2
f 17/2/3 19/3/3 20/4/3
f 24/4/4 22/1/4 23/3/4
f 25/2/5 27/3/5 28/4/5
f 32/4/52 30/1/52 31/3/52
f 33/2/7 35/3/7 36/4/7
f 40/4/8 38/1/8 39/3/8
f 41/2/53 43/3/53 44/4/53
f 45/2/10 47/3/10 48/4/10
f 49/2/54 51/3/54 52/4/54
f 53/2/55 55/3/55 56/4/55
f 60/4/13 58/1/13 59/3/13
f 64/4/14 62/1/14 63/3/14
f 68/4/13 66/1/13 67/3/13
f 72/4/56 70/1/56 71/3/56
f 73/2/57 75/3/57 76/4/57
f 80/4/17 78/1/17 79/3/17
f 81/2/18 83/3/18 84/4/18
f 88/4/19 86/1/19 87/3/19
f 89/2/20 91/3/20 92/4/20
f 96/4/21 94/1/21 95/3/21
f 97/2/22 99/3/22 100/4/22
f 104/4/24 102/1/24 103/3/24
f 105/2/22 107/3/22 108/4/22
f 112/4/24 110/1/24 111/3/24
f 113/4/25 115/1/25 114/3/25
f 117/4/58 119/1/58 118/3/58
f 121/4/27 123/1/27 122/3/27
f 125/4/28 127/1/28 126/3/28
f 129/4/59 131/1/59 130/3/59
f 136/2/37 134/3/37 133/4/37
f 137/4/31 139/1/31 138/3/31
f 141/4/32 143/1/32 142/3/32
f 145/4/60 147/1/60 146/3/60
f 149/4/34 151/1/34 150/3/34
f 156/2/61 154/3/61 153/4/61
f 157/4/62 159/1/62 158/3/62
f 161/4/29 163/1/29 162/3/29
f 168/2/37 166/3/37 165/4/37
f 169/4/38 171/1/38 170/3/38
f 173/4/39 175/1/39 174/3/39
f 177/4/40 179/1/40 178/3/40
f 181/4/45 183/1/45 182/3/45
f 188/2/63 186/3/63 185/4/63
f 189/4/64 191/1/64 190/3/64
f 193/4/65 195/1/65 194/3/65
f 197/4/66 199/1/66 198/3/66
f 201/4/67 203/1/67 202/3/67
f 205/4/47 207/1/47 206/3/47
f 209/4/68 211/1/68 210/3/68
f 213/4/69 215/1/69 214/3/69
f 217/4/50 219/1/50 218/3/50
f 221/4/51 223/1/51 222/3/51

BIN
res/grassTexture.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

1099
res/lowPolyTree.obj Normal file

File diff suppressed because it is too large Load Diff

BIN
res/lowPolyTree.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 296 B

View File

@ -45,13 +45,21 @@ public class MainGameLoop {
Loader loader = new Loader();
manager.init();
TexturedModel staticModel = new TexturedModel(OBJLoader.loadObjModel("tree", loader),
new ModelTexture(loader.loadTexture("tree")));
//ModelTexture texture = staticModel.getTexture();
//texture.setShineDamper(10);
//texture.setReflectivity(1);
RawModel model = OBJLoader.loadObjModel("tree", loader);
TexturedModel staticModel = new TexturedModel(model, new ModelTexture(loader.loadTexture("tree")));
ModelTexture texture = staticModel.getTexture();
texture.setShineDamper(10);
texture.setReflectivity(1);
TexturedModel grassModel = new TexturedModel(OBJLoader.loadObjModel("grassModel", loader),
new ModelTexture(loader.loadTexture("grassTexture")));
grassModel.getTexture().setHasTransparency(true);
grassModel.getTexture().setUseFakeLighting(true);
TexturedModel fernModel = new TexturedModel(OBJLoader.loadObjModel("fern", loader),
new ModelTexture(loader.loadTexture("fern")));
fernModel.getTexture().setHasTransparency(true);
Light light = new Light(new Vector3f(3000,2000,2000), new Vector3f(1,1,1));
@ -63,8 +71,16 @@ public class MainGameLoop {
List<Entity> entities = new ArrayList<Entity>();
Random random = new Random();
for (int iii=0; iii<2000; iii++) {
entities.add(new Entity(staticModel, new Vector3f(random.nextFloat()*800 - 400,0,random.nextFloat() * -600),new Vector3f(0,0,0),3));
for (int iii=0; iii<500; iii++) {
entities.add(new Entity(staticModel,
new Vector3f(random.nextFloat()*800 - 400, 0, random.nextFloat() * -600),
new Vector3f(0,0,0),3));
entities.add(new Entity(grassModel,
new Vector3f(random.nextFloat()*800 - 400, 0, random.nextFloat() * -600),
new Vector3f(0,0,0),1));
entities.add(new Entity(fernModel,
new Vector3f(random.nextFloat()*800 - 400, 0, random.nextFloat() * -600),
new Vector3f(0,0,0),0.6f));
}
MasterRenderer renderer = new MasterRenderer();
@ -75,11 +91,11 @@ public class MainGameLoop {
//entity.increaseRotation(0, 0, 0.01f);
//entity.increaseRotation(0.01f, 0.02f, 0.0f);
camera.move();
renderer.processTerrain(terrain);
renderer.processTerrain(terrain2);
for (Entity entity : entities) {
renderer.processEntity(entity);
}
renderer.processTerrain(terrain);
renderer.processTerrain(terrain2);
renderer.render(light, camera);
}
});

View File

@ -7,25 +7,25 @@ public class TexturedModel {
private RawModel rawModel;
private ModelTexture texture;
public TexturedModel(RawModel model, ModelTexture texture) {
this.rawModel = model;
this.texture = texture;
public TexturedModel(RawModel model, ModelTexture texture) {
this.rawModel = model;
this.texture = texture;
}
public RawModel getRawModel() {
return rawModel;
}
public RawModel getRawModel() {
return rawModel;
}
public void setRawModel(RawModel rawModel) {
this.rawModel = rawModel;
}
public void setRawModel(RawModel rawModel) {
this.rawModel = rawModel;
}
public ModelTexture getTexture() {
return texture;
}
public ModelTexture getTexture() {
return texture;
}
public void setTexture(ModelTexture texture) {
this.texture = texture;
}
public void setTexture(ModelTexture texture) {
this.texture = texture;
}
}

View File

@ -0,0 +1,40 @@
package objConverter;
public class ModelData {
private float[] vertices;
private float[] textureCoords;
private float[] normals;
private int[] indices;
private float furthestPoint;
public ModelData(float[] vertices, float[] textureCoords, float[] normals, int[] indices,
float furthestPoint) {
this.vertices = vertices;
this.textureCoords = textureCoords;
this.normals = normals;
this.indices = indices;
this.furthestPoint = furthestPoint;
}
public float[] getVertices() {
return vertices;
}
public float[] getTextureCoords() {
return textureCoords;
}
public float[] getNormals() {
return normals;
}
public int[] getIndices() {
return indices;
}
public float getFurthestPoint() {
return furthestPoint;
}
}

View File

@ -0,0 +1,161 @@
package objConverter;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.vecmath.Vector2f;
import javax.vecmath.Vector3f;
public class OBJFileLoader {
private static final String RES_LOC = "res/";
public static ModelData loadOBJ(String objFileName) {
FileReader isr = null;
File objFile = new File(RES_LOC + objFileName + ".obj");
try {
isr = new FileReader(objFile);
} catch (FileNotFoundException e) {
System.err.println("File not found in res; don't use any extention");
}
BufferedReader reader = new BufferedReader(isr);
String line;
List<Vertex> vertices = new ArrayList<Vertex>();
List<Vector2f> textures = new ArrayList<Vector2f>();
List<Vector3f> normals = new ArrayList<Vector3f>();
List<Integer> indices = new ArrayList<Integer>();
try {
while (true) {
line = reader.readLine();
if (line.startsWith("v ")) {
String[] currentLine = line.split(" ");
Vector3f vertex = new Vector3f((float) Float.valueOf(currentLine[1]),
(float) Float.valueOf(currentLine[2]),
(float) Float.valueOf(currentLine[3]));
Vertex newVertex = new Vertex(vertices.size(), vertex);
vertices.add(newVertex);
} else if (line.startsWith("vt ")) {
String[] currentLine = line.split(" ");
Vector2f texture = new Vector2f((float) Float.valueOf(currentLine[1]),
(float) Float.valueOf(currentLine[2]));
textures.add(texture);
} else if (line.startsWith("vn ")) {
String[] currentLine = line.split(" ");
Vector3f normal = new Vector3f((float) Float.valueOf(currentLine[1]),
(float) Float.valueOf(currentLine[2]),
(float) Float.valueOf(currentLine[3]));
normals.add(normal);
} else if (line.startsWith("f ")) {
break;
}
}
while (line != null && line.startsWith("f ")) {
String[] currentLine = line.split(" ");
String[] vertex1 = currentLine[1].split("/");
String[] vertex2 = currentLine[2].split("/");
String[] vertex3 = currentLine[3].split("/");
processVertex(vertex1, vertices, indices);
processVertex(vertex2, vertices, indices);
processVertex(vertex3, vertices, indices);
line = reader.readLine();
}
reader.close();
} catch (IOException e) {
System.err.println("Error reading the file");
}
removeUnusedVertices(vertices);
float[] verticesArray = new float[vertices.size() * 3];
float[] texturesArray = new float[vertices.size() * 2];
float[] normalsArray = new float[vertices.size() * 3];
float furthest = convertDataToArrays(vertices, textures, normals, verticesArray,
texturesArray, normalsArray);
int[] indicesArray = convertIndicesListToArray(indices);
ModelData data = new ModelData(verticesArray, texturesArray, normalsArray, indicesArray,
furthest);
return data;
}
private static void processVertex(String[] vertex, List<Vertex> vertices, List<Integer> indices) {
int index = Integer.parseInt(vertex[0]) - 1;
Vertex currentVertex = vertices.get(index);
int textureIndex = Integer.parseInt(vertex[1]) - 1;
int normalIndex = Integer.parseInt(vertex[2]) - 1;
if (!currentVertex.isSet()) {
currentVertex.setTextureIndex(textureIndex);
currentVertex.setNormalIndex(normalIndex);
indices.add(index);
} else {
dealWithAlreadyProcessedVertex(currentVertex, textureIndex, normalIndex, indices,
vertices);
}
}
private static int[] convertIndicesListToArray(List<Integer> indices) {
int[] indicesArray = new int[indices.size()];
for (int i = 0; i < indicesArray.length; i++) {
indicesArray[i] = indices.get(i);
}
return indicesArray;
}
private static float convertDataToArrays(List<Vertex> vertices, List<Vector2f> textures,
List<Vector3f> normals, float[] verticesArray, float[] texturesArray,
float[] normalsArray) {
float furthestPoint = 0;
for (int i = 0; i < vertices.size(); i++) {
Vertex currentVertex = vertices.get(i);
if (currentVertex.getLength() > furthestPoint) {
furthestPoint = currentVertex.getLength();
}
Vector3f position = currentVertex.getPosition();
Vector2f textureCoord = textures.get(currentVertex.getTextureIndex());
Vector3f normalVector = normals.get(currentVertex.getNormalIndex());
verticesArray[i * 3] = position.x;
verticesArray[i * 3 + 1] = position.y;
verticesArray[i * 3 + 2] = position.z;
texturesArray[i * 2] = textureCoord.x;
texturesArray[i * 2 + 1] = 1 - textureCoord.y;
normalsArray[i * 3] = normalVector.x;
normalsArray[i * 3 + 1] = normalVector.y;
normalsArray[i * 3 + 2] = normalVector.z;
}
return furthestPoint;
}
private static void dealWithAlreadyProcessedVertex(Vertex previousVertex, int newTextureIndex,
int newNormalIndex, List<Integer> indices, List<Vertex> vertices) {
if (previousVertex.hasSameTextureAndNormal(newTextureIndex, newNormalIndex)) {
indices.add(previousVertex.getIndex());
} else {
Vertex anotherVertex = previousVertex.getDuplicateVertex();
if (anotherVertex != null) {
dealWithAlreadyProcessedVertex(anotherVertex, newTextureIndex, newNormalIndex,
indices, vertices);
} else {
Vertex duplicateVertex = new Vertex(vertices.size(), previousVertex.getPosition());
duplicateVertex.setTextureIndex(newTextureIndex);
duplicateVertex.setNormalIndex(newNormalIndex);
previousVertex.setDuplicateVertex(duplicateVertex);
vertices.add(duplicateVertex);
indices.add(duplicateVertex.getIndex());
}
}
}
private static void removeUnusedVertices(List<Vertex> vertices){
for(Vertex vertex:vertices){
if(!vertex.isSet()){
vertex.setTextureIndex(0);
vertex.setNormalIndex(0);
}
}
}
}

View File

@ -0,0 +1,66 @@
package objConverter;
import javax.vecmath.Vector3f;
public class Vertex {
private static final int NO_INDEX = -1;
private Vector3f position;
private int textureIndex = NO_INDEX;
private int normalIndex = NO_INDEX;
private Vertex duplicateVertex = null;
private int index;
private float length;
public Vertex(int index,Vector3f position){
this.index = index;
this.position = position;
this.length = position.length();
}
public int getIndex(){
return index;
}
public float getLength(){
return length;
}
public boolean isSet(){
return textureIndex!=NO_INDEX && normalIndex!=NO_INDEX;
}
public boolean hasSameTextureAndNormal(int textureIndexOther,int normalIndexOther){
return textureIndexOther==textureIndex && normalIndexOther==normalIndex;
}
public void setTextureIndex(int textureIndex){
this.textureIndex = textureIndex;
}
public void setNormalIndex(int normalIndex){
this.normalIndex = normalIndex;
}
public Vector3f getPosition() {
return position;
}
public int getTextureIndex() {
return textureIndex;
}
public int getNormalIndex() {
return normalIndex;
}
public Vertex getDuplicateVertex() {
return duplicateVertex;
}
public void setDuplicateVertex(Vertex duplicateVertex) {
this.duplicateVertex = duplicateVertex;
}
}

View File

@ -57,12 +57,17 @@ public class EntityRenderer {
GL20.glEnableVertexAttribArray(1);
GL20.glEnableVertexAttribArray(2);
ModelTexture texture = model.getTexture();
if (texture.isHasTransparency()) {
MasterRenderer.disableCulling();
}
shader.loadFakeLightingVariable(texture.isUseFakeLighting());
shader.loadShineVariable(texture.getShineDamper(), texture.getReflectivity());
GL13.glActiveTexture(GL13.GL_TEXTURE0);
GL11.glBindTexture(GL11.GL_TEXTURE_2D, model.getTexture().getTexturedID());
}
private void unbindTexturedModel() {
MasterRenderer.enableCulling();
GL20.glDisableVertexAttribArray(0);
GL20.glDisableVertexAttribArray(1);
GL20.glDisableVertexAttribArray(2);

View File

@ -21,14 +21,7 @@ import de.matthiasmann.twl.utils.PNGDecoder;
import de.matthiasmann.twl.utils.PNGDecoder.Format;
import models.RawModel;
/**
* Handles the loading of geometry data into VAOs. It also keeps track of all
* the created VAOs and VBOs so that they can all be deleted when the game
* closes.
*
* @author Karl
*
*/
public class Loader {
private List<Integer> vaos = new ArrayList<Integer>();
@ -47,28 +40,6 @@ public class Loader {
System.exit(-1);
}
}
/**
* Creates a VAO and stores the position data of the vertices into attribute
* 0 of the VAO. The indices are stored in an index buffer and bound to the
* VAO.
*
* @param positions
* - The 3D positions of each vertex in the geometry (in this
* example a quad).
* @param indices
* - The indices of the model that we want to store in the VAO.
* The indices indicate how the vertices should be connected
* together to form triangles.
* @return The loaded model.
*/
public RawModel loadToVAO(float[] positions, int[] indices) {
int vaoID = createVAO();
bindIndicesBuffer(indices);
storeDataInAttributeList(0, 3, positions);
unbindVAO();
return new RawModel(vaoID, indices.length);
}
public RawModel loadToVAO(float[] positions, float[] textureCoordinates, float[] normals, int[] indices) {
int vaoID = createVAO();
bindIndicesBuffer(indices);
@ -86,7 +57,8 @@ public class Loader {
}
private int loadPNGTexture(String filename, int textureUnit) {
ByteBuffer buf = null;
ByteBuffer bufIn = null;
ByteBuffer buf = null;
int tWidth = 0;
int tHeight = 0;
try {
@ -98,9 +70,8 @@ public class Loader {
tWidth = decoder.getWidth();
tHeight = decoder.getHeight();
// Decode the PNG file in a ByteBuffer
buf = ByteBuffer.allocateDirect(
4 * decoder.getWidth() * decoder.getHeight());
decoder.decode(buf, decoder.getWidth() * 4, Format.RGBA);
buf = ByteBuffer.allocateDirect(4 * decoder.getWidth() * decoder.getHeight());
decoder.decodeFlipped(buf, decoder.getWidth() * 4, Format.RGBA);
buf.flip();
in.close();
} catch (IOException e) {
@ -117,8 +88,7 @@ public class Loader {
GL11.glPixelStorei(GL11.GL_UNPACK_ALIGNMENT, 1);
// Upload the texture data and generate mip maps (for scaling)
GL11.glTexImage2D(GL11.GL_TEXTURE_2D, 0, GL11.GL_RGB, tWidth, tHeight, 0,
GL11.GL_RGBA, GL11.GL_UNSIGNED_BYTE, buf);
GL11.glTexImage2D(GL11.GL_TEXTURE_2D, 0, GL11.GL_RGBA, tWidth, tHeight, 0, GL11.GL_RGBA, GL11.GL_UNSIGNED_BYTE, buf);
GL30.glGenerateMipmap(GL11.GL_TEXTURE_2D);
// Setup the ST coordinate system
@ -126,10 +96,10 @@ public class Loader {
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T, GL11.GL_REPEAT);
// Setup what to do when the texture has to be scaled
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER,
GL11.GL_NEAREST);
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER,
GL11.GL_LINEAR_MIPMAP_LINEAR);
// GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_NEAREST);
// GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_LINEAR_MIPMAP_LINEAR);
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_LINEAR);
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_LINEAR);
this.exitOnGLError("loadPNGTexture");

View File

@ -7,6 +7,7 @@ import java.util.Map;
import javax.vecmath.Matrix4f;
import javax.vecmath.Vector2f;
import javax.vecmath.Vector3f;
import org.lwjgl.opengl.GL11;
@ -22,6 +23,7 @@ public class MasterRenderer {
private static final float FOV = 70;
private static final float NEAR_PLANE = 0.1f;
private static final float FAR_PLANE = 10000;
private static final Vector3f SKY_COLOUR = new Vector3f(0.5f, 0.5f, 0.5f);
private Matrix4f projectionMatrix;
@ -35,25 +37,37 @@ public class MasterRenderer {
private List<Terrain> terrains = new ArrayList<Terrain>();
public MasterRenderer() {
GL11.glEnable(GL11.GL_CULL_FACE);
GL11.glEnable(GL11.GL_BACK);
enableCulling();
GL11.glEnable(GL11.GL_BLEND);
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
createProjectionMatrix();
renderer = new EntityRenderer(shader, projectionMatrix);
terrainRenderer = new TerrainRenderer(terrainShader, projectionMatrix);
}
public static void enableCulling() {
GL11.glEnable(GL11.GL_CULL_FACE);
GL11.glEnable(GL11.GL_BACK);
}
public static void disableCulling() {
GL11.glDisable(GL11.GL_CULL_FACE);
GL11.glDisable(GL11.GL_BACK);
}
public void render(Light sun, Camera camera) {
prepare();
shader.start();
shader.loadSkyColour(SKY_COLOUR);
shader.loadLight(sun);
shader.loadViewMatrix(camera);
renderer.render(entities);
shader.stop();
entities.clear();
terrainShader.start();
terrainShader.loadSkyColour(SKY_COLOUR);
terrainShader.loadLight(sun);
terrainShader.loadViewMatrix(camera);
terrainRenderer.render(terrains);
terrainRenderer.render(terrains);
terrainShader.stop();
terrains.clear();
}
@ -76,14 +90,16 @@ public class MasterRenderer {
public void prepare() {
GL11.glEnable(GL11.GL_DEPTH_TEST);
GL11.glClearColor(1, 0, 0, 1);
GL11.glClear(GL11.GL_COLOR_BUFFER_BIT|GL11.GL_DEPTH_BUFFER_BIT);
GL11.glClearColor(SKY_COLOUR.x, SKY_COLOUR.y, SKY_COLOUR.z, 1.0f);
}
public void cleanUp () {
shader.cleanUp();
terrainShader.cleanUp();
}
private void createProjectionMatrix() {
//float aspectRatio = (float) Display.getWidth() / (float) Display.getHeight();
Vector2f windowsSize = DisplayManager.getSize();

View File

@ -1,101 +1,12 @@
package renderEngine;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;
import javax.vecmath.Vector2f;
import javax.vecmath.Vector3f;
import models.RawModel;
import objConverter.ModelData;
import objConverter.OBJFileLoader;
public class OBJLoader {
public static RawModel loadObjModel(String fileName, Loader loader) {
FileReader fr = null;
try {
fr = new FileReader(new File("res/" + fileName + ".obj"));
} catch (FileNotFoundException e) {
System.out.println("Couldn't load file! " + fileName);
e.printStackTrace();
}
BufferedReader reader = new BufferedReader(fr);
String line;
List<Vector3f> vertices = new ArrayList<Vector3f>();
List<Vector2f> textures = new ArrayList<Vector2f>();
List<Vector3f> normals = new ArrayList<Vector3f>();
List<Integer> indices = new ArrayList<Integer>();
float[] verticesArray = null;
float[] normalsArray = null;
float[] texturesArray = null;
int[] indicesArray = null;
try {
while(true) {
line = reader.readLine();
String[] currentLine = line.split(" ");
if (line.startsWith("v ")) {
Vector3f vertex = new Vector3f(Float.parseFloat(currentLine[1]),
Float.parseFloat(currentLine[2]), Float.parseFloat(currentLine[3]));
vertices.add(vertex);
} else if (line.startsWith("vt ")) {
Vector2f texture = new Vector2f(Float.parseFloat(currentLine[1]),
Float.parseFloat(currentLine[2]));
textures.add(texture);
} else if (line.startsWith("vn ")) {
Vector3f normal = new Vector3f(Float.parseFloat(currentLine[1]),
Float.parseFloat(currentLine[2]), Float.parseFloat(currentLine[3]));
normals.add(normal);
} else if (line.startsWith("f ")) {
texturesArray = new float[vertices.size()*2];
normalsArray = new float[vertices.size()*3];
break;
}
}
while(line != null) {
if (!line.startsWith("f ")) {
line = reader.readLine();
continue;
}
String[] currentLine = line.split(" ");
String[] vertex1 = currentLine[1].split("/");
String[] vertex2 = currentLine[2].split("/");
String[] vertex3 = currentLine[3].split("/");
processVertex(vertex1, indices, textures, normals, texturesArray, normalsArray);
processVertex(vertex2, indices, textures, normals, texturesArray, normalsArray);
processVertex(vertex3, indices, textures, normals, texturesArray, normalsArray);
line = reader.readLine();
}
reader.close();
} catch (Exception e) {
e.printStackTrace();
}
verticesArray = new float[vertices.size()*3];
indicesArray = new int[indices.size()*3];
int vertexPointer = 0;
for (Vector3f vertex: vertices) {
verticesArray[vertexPointer++] = vertex.x;
verticesArray[vertexPointer++] = vertex.y;
verticesArray[vertexPointer++] = vertex.z;
}
for (int iii=0; iii<indices.size(); iii++) {
indicesArray[iii] = indices.get(iii);
}
return loader.loadToVAO(verticesArray, texturesArray, normalsArray, indicesArray);
}
private static void processVertex(String[] vertexData, List<Integer> indices,
List<Vector2f> textures, List<Vector3f> normals, float[] textureArray,
float[] normalsArray) {
int currentVertexPointer = Integer.parseInt(vertexData[0]) - 1;
indices.add(currentVertexPointer);
Vector2f currentTex = textures.get(Integer.parseInt(vertexData[1])-1);
textureArray[currentVertexPointer*2] = currentTex.x;
textureArray[currentVertexPointer*2+1] = currentTex.y;
Vector3f currentNorm = normals.get(Integer.parseInt(vertexData[2])-1);
normalsArray[currentVertexPointer*3] = currentNorm.x;
normalsArray[currentVertexPointer*3+1] = currentNorm.y;
normalsArray[currentVertexPointer*3+2] = currentNorm.z;
ModelData data = OBJFileLoader.loadOBJ("tree");
return loader.loadToVAO(data.getVertices(), data.getTextureCoords(), data.getNormals(), data.getIndices());
}
}

View File

@ -65,7 +65,8 @@ public abstract class ShaderProgram {
GL20.glUniform3f(location, value.x, value.y, value.z);
}
protected void loadBoolean(int location, boolean value) {
GL20.glUniform1f(location, value?1.0f:0.0f);
//System.out.println("set value " + value + " " + (value==true?1.0f:0.0f));
GL20.glUniform1f(location, value==true?1.0f:0.0f);
}
protected void loadMatrix(int location, Matrix4f value) {

View File

@ -1,6 +1,7 @@
package shaders;
import javax.vecmath.Matrix4f;
import javax.vecmath.Vector3f;
import entities.Camera;
import entities.Light;
@ -17,6 +18,8 @@ public class StaticShader extends ShaderProgram {
private int location_lightColour;
private int location_reflectivity;
private int location_shineDamper;
private int location_useFakeLighting;
private int location_skyColor;
public StaticShader() {
super(VERTEX_FILE, FRAGMENT_FILE);
@ -38,7 +41,18 @@ public class StaticShader extends ShaderProgram {
location_lightColour = super.getUniformLocation("lightColour");
location_reflectivity = super.getUniformLocation("reflectivity");
location_shineDamper = super.getUniformLocation("shineDamper");
location_useFakeLighting = super.getUniformLocation("useFakeLighting");
location_skyColor = super.getUniformLocation("skyColor");
}
public void loadSkyColour(Vector3f color) {
super.loadVector(location_skyColor, color);
}
public void loadFakeLightingVariable(boolean useFake) {
super.loadBoolean(location_useFakeLighting, useFake);
}
public void loadShineVariable(float shineDamper, float reflectivity) {
super.loadFloat(location_reflectivity, reflectivity);
super.loadFloat(location_shineDamper, shineDamper);

View File

@ -1,6 +1,7 @@
package shaders;
import javax.vecmath.Matrix4f;
import javax.vecmath.Vector3f;
import entities.Camera;
import entities.Light;
@ -17,6 +18,7 @@ public class TerrainShader extends ShaderProgram {
private int location_lightColour;
private int location_reflectivity;
private int location_shineDamper;
private int location_skyColor;
public TerrainShader() {
super(VERTEX_FILE, FRAGMENT_FILE);
@ -38,7 +40,13 @@ public class TerrainShader extends ShaderProgram {
location_lightColour = super.getUniformLocation("lightColour");
location_reflectivity = super.getUniformLocation("reflectivity");
location_shineDamper = super.getUniformLocation("shineDamper");
location_skyColor = super.getUniformLocation("skyColor");
}
public void loadSkyColour(Vector3f color) {
super.loadVector(location_skyColor, color);
}
public void loadShineVariable(float shineDamper, float reflectivity) {
super.loadFloat(location_reflectivity, reflectivity);
super.loadFloat(location_shineDamper, shineDamper);
@ -47,13 +55,16 @@ public class TerrainShader extends ShaderProgram {
public void loadTransformationMatrix(Matrix4f matrix) {
super.loadMatrix(location_transformationMatrix, matrix);
}
public void loadLight(Light light) {
super.loadVector(location_lightPosition, light.getPosition());
super.loadVector(location_lightColour, light.getColour());
}
public void loadProjectionMatrix(Matrix4f projection) {
super.loadMatrix(location_projectionMatrix, projection);
}
public void loadViewMatrix(Camera camera) {
super.loadMatrix(location_viewMatrix, Maths.createViewMatrix(camera));
}

View File

@ -1,9 +1,11 @@
#version 400 core
in vec2 pass_textureCoords;
in vec2 pass_textureCoordinates;
in vec3 surfaceNormal;
in vec3 toLightVector;
in vec3 toCameraVector;
// FOW: Fog Of War result calculation
in float visibility;
out vec4 out_Color;
@ -11,6 +13,7 @@ uniform sampler2D textureSampler;
uniform vec3 lightColour;
uniform float reflectivity;
uniform float shineDamper;
uniform vec3 skyColor;
void main(void) {
@ -32,6 +35,14 @@ void main(void) {
float damperFactor = pow(specularFactor, shineDamper);
vec3 finalSpecular = damperFactor * reflectivity * lightColour;
out_Color = vec4(diffuse,1.0) * texture(textureSampler,pass_textureCoords) + vec4(finalSpecular, 1.0);
// disable transparency elements in the texture ...
// Can be set at the start of the shader ...
vec4 textureColour = texture(textureSampler,pass_textureCoordinates);
if (textureColour.a < 0.5) {
discard;
}
out_Color = vec4(diffuse,1.0) * textureColour + vec4(finalSpecular, 1.0);
out_Color = mix(vec4(skyColor,1.0), out_Color, visibility);
}

View File

@ -1,9 +1,11 @@
#version 400 core
in vec2 pass_textureCoords;
in vec2 pass_textureCoordinates;
in vec3 surfaceNormal;
in vec3 toLightVector;
in vec3 toCameraVector;
// FOW: Fog Of War result calculation
in float visibility;
out vec4 out_Color;
@ -11,6 +13,7 @@ uniform sampler2D textureSampler;
uniform vec3 lightColour;
uniform float reflectivity;
uniform float shineDamper;
uniform vec3 skyColor;
void main(void) {
@ -32,6 +35,7 @@ void main(void) {
float damperFactor = pow(specularFactor, shineDamper);
vec3 finalSpecular = damperFactor * reflectivity * lightColour;
out_Color = vec4(diffuse,1.0) * texture(textureSampler,pass_textureCoords) + vec4(finalSpecular, 1.0);
out_Color = vec4(diffuse,1.0) * texture(textureSampler,pass_textureCoordinates) + vec4(finalSpecular, 1.0);
out_Color = mix(vec4(skyColor,1.0), out_Color, visibility);
}

View File

@ -4,23 +4,34 @@ in vec3 position;
in vec2 textureCoords;
in vec3 normal;
out vec2 pass_textureCoords;
out vec2 pass_textureCoordinates;
out vec3 surfaceNormal;
out vec3 toLightVector;
out vec3 toCameraVector;
// FOW: Fog Of War result calculation
out float visibility;
uniform mat4 transformationMatrix;
uniform mat4 projectionMatrix;
uniform mat4 viewMatrix;
uniform vec3 lightPosition;
const float density = 0.007;
const float gradient = 1.5;
void main(void) {
vec4 worldPosition = transformationMatrix * vec4(position, 1.0);
gl_Position = projectionMatrix * viewMatrix * worldPosition;
pass_textureCoords = textureCoords;
vec4 positionRelativeToCam = viewMatrix * worldPosition;
gl_Position = projectionMatrix * positionRelativeToCam;
pass_textureCoordinates = textureCoords;
surfaceNormal = (transformationMatrix * vec4(normal, 0.0)).xyz;
toLightVector = lightPosition - worldPosition.xyz;
toCameraVector = (inverse(viewMatrix) * vec4(0.0,0.0,0.0,1.0)).xyz - worldPosition.xyz;
float distance = length(positionRelativeToCam.xyz);
visibility = exp(-pow((distance*density),gradient));
visibility = clamp(visibility, 0.0, 1.0);
}

View File

@ -4,23 +4,40 @@ in vec3 position;
in vec2 textureCoords;
in vec3 normal;
out vec2 pass_textureCoords;
out vec2 pass_textureCoordinates;
out vec3 surfaceNormal;
out vec3 toLightVector;
out vec3 toCameraVector;
// FOW: Fog Of War result calculation
out float visibility;
uniform mat4 transformationMatrix;
uniform mat4 projectionMatrix;
uniform mat4 viewMatrix;
uniform vec3 lightPosition;
uniform vec3 lightPosition;
uniform float useFakeLighting;
const float density = 0.007;
const float gradient = 1.5;
void main(void) {
vec4 worldPosition = transformationMatrix * vec4(position, 1.0);
gl_Position = projectionMatrix * viewMatrix * worldPosition;
pass_textureCoords = textureCoords;
vec4 positionRelativeToCam = viewMatrix * worldPosition;
gl_Position = projectionMatrix * positionRelativeToCam;
pass_textureCoordinates = textureCoords;
surfaceNormal = (transformationMatrix * vec4(normal, 0.0)).xyz;
vec3 actualNormal = normal;
if (useFakeLighting > 0.5) {
actualNormal = vec3(0.0, 1.0, 0.0);
}
surfaceNormal = (transformationMatrix * vec4(actualNormal, 0.0)).xyz;
toLightVector = lightPosition - worldPosition.xyz;
toCameraVector = (inverse(viewMatrix) * vec4(0.0,0.0,0.0,1.0)).xyz - worldPosition.xyz;
float distance = length(positionRelativeToCam.xyz);
visibility = exp(-pow((distance*density),gradient));
visibility = clamp(visibility, 0.0, 1.0);
}

View File

@ -35,8 +35,8 @@ public class Terrain {
normals[vertexPointer*3] = 0;
normals[vertexPointer*3+1] = 1;
normals[vertexPointer*3+2] = 0;
textureCoords[vertexPointer*2] = (float)j/((float)VERTEX_COUNT - 1);
textureCoords[vertexPointer*2+1] = (float)i/((float)VERTEX_COUNT - 1);
textureCoords[vertexPointer*2] = (float)j/((float)VERTEX_COUNT - 1)*100;
textureCoords[vertexPointer*2+1] = (float)i/((float)VERTEX_COUNT - 1)*100;
vertexPointer++;
}
}

View File

@ -6,8 +6,10 @@ public class ModelTexture {
// Reflectivity of the light on the surface of the texture
private float reflectivity = 0;
// Distance of whitch the camera must to be to receive the the reflection
// Distance of witch the camera must to be to receive the the reflection
private float shineDamper = 1;
private boolean hasTransparency = false;
private boolean useFakeLighting = false;
public ModelTexture(int id) {
this.textureID = id;
@ -33,4 +35,21 @@ public class ModelTexture {
this.shineDamper = shineDamper;
}
public boolean isHasTransparency() {
return hasTransparency;
}
public void setHasTransparency(boolean hasTransparency) {
this.hasTransparency = hasTransparency;
}
public boolean isUseFakeLighting() {
return useFakeLighting;
}
public void setUseFakeLighting(boolean useFakeLighting) {
this.useFakeLighting = useFakeLighting;
}
}