1
0
Fork 0
mirror of https://git.coom.tech/drummyfish/small3dlib.git synced 2024-11-23 20:59:58 +01:00

Start game demo

This commit is contained in:
Miloslav Číž 2019-06-09 20:30:18 +02:00
parent d71b117fe7
commit 6764fd12a5
3 changed files with 10124 additions and 0 deletions

956
programs/cityModel.h Normal file
View file

@ -0,0 +1,956 @@
#ifndef CITY_MODEL_H
#define CITY_MODEL_H
#define CITY_VERTEX_COUNT 157
const S3L_Unit cityVertices[CITY_VERTEX_COUNT * 3] = {
-3584, 5, 512, // 0
-4608, 5, 1536, // 3
-5632, 5, -512, // 6
-5632, 5, -1536, // 9
-5632, 5, -2560, // 12
-4608, 5, -1536, // 15
-4608, 5, -512, // 18
-2560, 5, 1536, // 21
-2560, 5, 512, // 24
-1536, 5, 1536, // 27
-2560, 5, -512, // 30
-3584, 5, -512, // 33
-2560, 1779, 512, // 36
-2560, 1779, -512, // 39
-3584, 1779, -512, // 42
-4061, 1581, -1536, // 45
-2560, 1581, -1536, // 48
-5632, 777, -1536, // 51
-5632, 777, -2560, // 54
-2560, 777, 1536, // 57
-1536, 777, 1536, // 60
-4608, 1396, 1536, // 63
-5632, 1396, -512, // 66
-5632, 777, -512, // 69
-4608, 1396, -512, // 72
-2560, 1396, 1536, // 75
-2560, 815, 2731, // 78
-2560, 1396, 2731, // 81
-4608, 296, -1536, // 84
-4061, 296, -1536, // 87
-4608, 296, -2086, // 90
-6329, 595, 573, // 93
-5874, 595, 1132, // 96
-6329, 2807, 573, // 99
-5874, 2807, 1132, // 102
1536, 5, 2560, // 105
512, 5, 3584, // 108
-1536, 5, -1536, // 111
-1536, 5, -2560, // 114
-2560, 5, -3584, // 117
-1536, 5, -3584, // 120
512, 5, -2560, // 123
512, 5, -3584, // 126
-512, 5, -2560, // 129
-512, 5, -1536, // 132
-1536, 5, -512, // 135
-2560, 5, -1536, // 138
-512, 5, 1536, // 141
-512, 5, 512, // 144
-512, 5, -512, // 147
512, 5, 512, // 150
512, 5, 1536, // 153
2560, 5, 3584, // 156
2560, 5, 2560, // 159
3584, 5, 3584, // 162
2560, 5, 512, // 165
1536, 5, 1536, // 168
1536, 5, -1536, // 171
1536, 5, -2560, // 174
512, 5, -1536, // 177
-1536, 311, -1536, // 180
-1536, 311, -2560, // 183
-512, 311, -2560, // 186
-512, 311, -1536, // 189
1536, 1779, 2560, // 192
2560, 1779, 2560, // 195
2560, 1779, 1536, // 198
1536, 1779, 1536, // 201
-1536, 632, -3584, // 204
512, 632, -3584, // 207
-2560, 1584, -3584, // 210
-1536, 597, -4813, // 213
-2560, 1584, -1536, // 216
1058, 1581, 512, // 219
2560, 1581, 512, // 222
512, 1581, -1536, // 225
-2560, 1584, -4813, // 228
-1024, 594, -2048, // 231
1536, 1581, -1536, // 234
1536, 519, -1536, // 237
1536, 519, -2560, // 240
-1536, 777, -512, // 243
-512, 777, 512, // 246
-512, 777, -512, // 249
2560, 777, 3584, // 252
3584, 777, 3584, // 255
512, 1396, 3584, // 258
-512, 1396, 1536, // 261
-512, 777, 1536, // 264
512, 1396, 1536, // 267
2560, 1396, 3584, // 270
2560, 815, 4779, // 273
2560, 1396, 4779, // 276
-512, 1396, 3313, // 279
-512, 777, 3313, // 282
512, 296, 512, // 285
1058, 296, 512, // 288
512, 296, -38, // 291
512, 1581, -38, // 294
512, 2969, -2560, // 297
512, 2454, -3584, // 300
1536, 2969, -2560, // 303
1302, 282, -5879, // 306
1859, 282, -4816, // 309
1302, 2156, -5879, // 312
1859, 2156, -4816, // 315
-1209, 595, 2621, // 318
-754, 595, 3180, // 321
-1209, 2807, 2621, // 324
-754, 2807, 3180, // 327
-1473, 595, 3206, // 330
-1473, 2807, 3206, // 333
3584, 5, 512, // 336
3584, 5, -512, // 339
2560, 5, -1536, // 342
3584, 5, -1536, // 345
5632, 5, -512, // 348
5632, 5, -1536, // 351
4608, 5, -512, // 354
4608, 5, 512, // 357
3584, 5, 1536, // 360
2560, 5, 1536, // 363
4608, 5, 1536, // 366
5632, 5, 2560, // 369
6656, 5, 512, // 372
6656, 5, -512, // 375
5632, 5, 512, // 378
3584, 311, 512, // 381
3584, 311, -512, // 384
4608, 311, 512, // 387
3584, 632, -1536, // 390
5632, 632, -1536, // 393
2560, 1584, -1536, // 396
2560, 1584, 512, // 399
6178, 1581, 2560, // 402
5632, 1581, 512, // 405
4096, 594, 0, // 408
6656, 519, 512, // 411
6656, 519, -512, // 414
3584, 777, 1536, // 417
4608, 777, 1536, // 420
6178, 296, 2560, // 423
5632, 296, 2009, // 426
5632, 1581, 2009, // 429
5632, 2969, -512, // 432
5632, 2454, -1536, // 435
6656, 2969, -512, // 438
6422, 282, -3831, // 441
6979, 282, -2768, // 444
6422, 2156, -3831, // 447
6979, 2156, -2768, // 450
3910, 595, 4669, // 453
4365, 595, 5228, // 456
3910, 2807, 4669, // 459
4365, 2807, 5228, // 462
3646, 595, 5254, // 465
3646, 2807, 5254 // 468
}; // cityVertices
#define CITY_TRIANGLE_COUNT 197
const S3L_Index cityTriangleIndices[CITY_TRIANGLE_COUNT * 3] = {
0, 1, 6, // 0
2, 3, 5, // 3
5, 3, 4, // 6
11, 5, 46, // 9
0, 6, 11, // 12
1, 0, 7, // 15
8, 45, 9, // 18
8, 10, 45, // 21
46, 10, 11, // 24
5, 11, 6, // 27
0, 8, 7, // 30
8, 9, 7, // 33
5, 6, 2, // 36
11, 13, 14, // 39
10, 8, 12, // 42
3, 18, 4, // 45
9, 19, 7, // 48
9, 45, 81, // 51
1, 7, 19, // 54
22, 23, 24, // 57
19, 21, 1, // 60
1, 24, 6, // 63
25, 21, 19, // 66
2, 23, 17, // 69
24, 23, 6, // 72
2, 17, 3, // 75
25, 26, 27, // 78
6, 23, 2, // 81
29, 28, 30, // 84
28, 29, 5, // 87
5, 29, 46, // 90
46, 29, 16, // 93
29, 15, 16, // 96
3, 17, 18, // 99
1, 21, 24, // 102
11, 10, 13, // 105
10, 12, 13, // 108
9, 20, 19, // 111
9, 81, 20, // 114
25, 19, 26, // 117
34, 31, 32, // 120
34, 33, 31, // 123
35, 36, 51, // 126
38, 46, 39, // 129
40, 38, 39, // 132
42, 41, 43, // 135
43, 40, 42, // 138
41, 59, 43, // 141
45, 37, 44, // 144
10, 46, 37, // 147
47, 48, 50, // 150
49, 59, 50, // 153
50, 48, 49, // 156
56, 50, 55, // 159
35, 51, 56, // 162
36, 35, 52, // 165
53, 120, 54, // 168
53, 121, 120, // 171
55, 121, 56, // 174
59, 44, 43, // 177
59, 49, 44, // 180
50, 56, 51, // 183
35, 53, 52, // 186
53, 54, 52, // 189
50, 51, 47, // 192
40, 43, 38, // 195
38, 37, 46, // 198
37, 45, 10, // 201
44, 49, 45, // 204
57, 59, 41, // 207
41, 58, 57, // 210
44, 37, 60, // 213
37, 38, 61, // 216
62, 43, 44, // 219
43, 61, 38, // 222
62, 63, 77, // 225
56, 66, 67, // 228
56, 64, 35, // 231
121, 53, 65, // 234
35, 65, 53, // 237
40, 69, 42, // 240
99, 80, 41, // 243
68, 70, 76, // 246
39, 46, 72, // 249
39, 70, 68, // 252
39, 68, 40, // 255
60, 77, 63, // 258
41, 80, 58, // 261
79, 75, 59, // 264
58, 79, 57, // 267
97, 98, 96, // 270
45, 49, 83, // 273
48, 83, 49, // 276
54, 84, 52, // 279
54, 120, 139, // 282
36, 52, 84, // 285
87, 88, 89, // 288
84, 86, 36, // 291
36, 89, 51, // 294
90, 86, 84, // 297
47, 88, 82, // 300
89, 88, 51, // 303
47, 82, 48, // 306
90, 91, 92, // 309
51, 88, 47, // 312
88, 87, 93, // 315
77, 60, 61, // 318
61, 62, 77, // 321
75, 98, 97, // 324
97, 59, 75, // 327
57, 79, 59, // 330
59, 97, 50, // 333
95, 50, 97, // 336
96, 95, 97, // 339
95, 96, 50, // 342
50, 96, 55, // 345
55, 96, 74, // 348
96, 73, 74, // 351
98, 73, 96, // 354
42, 69, 41, // 357
69, 99, 41, // 360
40, 68, 69, // 363
68, 76, 71, // 366
45, 83, 81, // 369
48, 82, 83, // 372
39, 72, 70, // 375
36, 86, 89, // 378
88, 93, 94, // 381
56, 121, 66, // 384
56, 67, 64, // 387
121, 65, 66, // 390
35, 64, 65, // 393
99, 101, 80, // 396
58, 80, 79, // 399
79, 78, 75, // 402
99, 69, 100, // 405
44, 60, 63, // 408
37, 61, 60, // 411
62, 44, 63, // 414
43, 62, 61, // 417
54, 85, 84, // 420
54, 139, 85, // 423
90, 84, 91, // 426
102, 105, 103, // 429
102, 104, 105, // 432
109, 106, 107, // 435
111, 106, 108, // 438
109, 108, 106, // 441
111, 110, 106, // 444
113, 55, 114, // 447
115, 113, 114, // 450
118, 115, 117, // 453
116, 126, 118, // 456
120, 112, 119, // 459
121, 55, 112, // 462
122, 126, 123, // 465
126, 119, 118, // 468
126, 122, 119, // 471
115, 118, 113, // 474
113, 112, 55, // 477
112, 120, 121, // 480
119, 122, 120, // 483
124, 126, 116, // 486
116, 125, 124, // 489
119, 112, 127, // 492
112, 113, 128, // 495
115, 131, 117, // 498
144, 138, 116, // 501
114, 55, 133, // 504
114, 132, 130, // 507
114, 130, 115, // 510
127, 136, 129, // 513
116, 138, 125, // 516
125, 137, 124, // 519
142, 143, 141, // 522
120, 122, 140, // 525
136, 127, 128, // 528
135, 143, 142, // 531
142, 126, 135, // 534
126, 142, 123, // 537
143, 134, 141, // 540
117, 131, 116, // 543
131, 144, 116, // 546
115, 130, 131, // 549
120, 140, 139, // 552
114, 133, 132, // 555
144, 146, 138, // 558
125, 138, 137, // 561
144, 131, 145, // 564
119, 127, 129, // 567
112, 128, 127, // 570
147, 150, 148, // 573
147, 149, 150, // 576
154, 151, 152, // 579
156, 151, 153, // 582
154, 153, 151, // 585
156, 155, 151 // 588
}; // cityTriangleIndices
#define CITY_UV_COUNT 377
const S3L_Unit cityUVs[CITY_UV_COUNT * 2] = {
125, 125, // 0
1, 1, // 2
1, 249, // 4
2, 1, // 6
2, 126, // 8
126, 126, // 10
2, 262, // 12
126, 262, // 14
126, 386, // 16
126, 387, // 18
2, 511, // 20
2, 262, // 22
125, 249, // 24
1, 2, // 26
125, 126, // 28
1, 251, // 30
126, 125, // 32
2, 249, // 34
2, 1, // 36
126, 249, // 38
126, 262, // 40
126, 511, // 42
125, 251, // 44
126, 1, // 46
126, 1, // 48
258, 253, // 50
386, 1, // 52
258, 1, // 54
260, 253, // 56
405, 253, // 58
405, 2, // 60
253, 511, // 62
130, 386, // 64
130, 511, // 66
381, 508, // 68
256, 386, // 70
256, 508, // 72
130, 509, // 74
380, 509, // 76
380, 386, // 78
258, 253, // 80
510, 253, // 82
510, 114, // 84
354, 3, // 86
354, 115, // 88
510, 3, // 90
258, 3, // 92
507, 252, // 94
255, 2, // 96
255, 252, // 98
510, 3, // 100
376, 511, // 102
376, 386, // 104
253, 386, // 106
510, 254, // 108
258, 3, // 110
475, 112, // 112
475, 3, // 114
354, 254, // 116
245, 319, // 118
190, 264, // 120
135, 319, // 122
509, 209, // 124
443, 209, // 126
509, 253, // 128
259, 253, // 130
259, 16, // 132
443, 16, // 134
507, 2, // 136
386, 253, // 138
260, 2, // 140
381, 386, // 142
130, 386, // 144
258, 112, // 146
509, 352, // 148
261, 259, // 150
261, 352, // 152
509, 259, // 154
125, 125, // 156
1, 1, // 158
1, 249, // 160
127, 125, // 162
3, 249, // 164
3, 1, // 166
127, 1, // 168
1, 2, // 170
125, 2, // 172
125, 126, // 174
1, 250, // 176
125, 254, // 178
125, 129, // 180
1, 254, // 182
126, 128, // 184
1, 128, // 186
1, 252, // 188
130, 1, // 190
130, 125, // 192
254, 125, // 194
2, 1, // 196
2, 126, // 198
126, 126, // 200
126, 386, // 202
2, 510, // 204
2, 262, // 206
2, 262, // 208
126, 262, // 210
126, 386, // 212
126, 387, // 214
2, 511, // 216
2, 262, // 218
125, 249, // 220
1, 2, // 222
125, 126, // 224
1, 251, // 226
126, 125, // 228
2, 249, // 230
2, 1, // 232
126, 249, // 234
126, 262, // 236
1, 129, // 238
126, 510, // 240
126, 511, // 242
125, 251, // 244
126, 1, // 246
126, 1, // 248
125, 250, // 250
127, 249, // 252
254, 1, // 254
126, 252, // 256
253, 130, // 258
129, 130, // 260
129, 254, // 262
253, 254, // 264
387, 448, // 266
508, 448, // 268
508, 386, // 270
387, 446, // 272
508, 446, // 274
508, 388, // 276
385, 390, // 278
385, 446, // 280
510, 446, // 282
511, 447, // 284
386, 388, // 286
386, 447, // 288
254, 259, // 290
131, 259, // 292
192, 321, // 294
258, 253, // 296
386, 1, // 298
258, 1, // 300
510, 252, // 302
385, 2, // 304
385, 252, // 306
260, 253, // 308
405, 253, // 310
405, 2, // 312
510, 254, // 314
384, 0, // 316
384, 254, // 318
381, 511, // 320
131, 434, // 322
131, 511, // 324
510, 350, // 326
302, 261, // 328
259, 350, // 330
221, 324, // 332
221, 257, // 334
163, 257, // 336
259, 252, // 338
511, 252, // 340
511, 15, // 342
259, 352, // 344
404, 352, // 346
317, 258, // 348
259, 258, // 350
130, 259, // 352
191, 320, // 354
253, 259, // 356
259, 261, // 358
259, 176, // 360
414, 16, // 362
414, 254, // 364
253, 382, // 366
129, 327, // 368
129, 382, // 370
477, 210, // 372
477, 15, // 374
354, 210, // 376
222, 509, // 378
352, 509, // 380
352, 386, // 382
253, 511, // 384
130, 386, // 386
130, 511, // 388
381, 508, // 390
256, 386, // 392
256, 508, // 394
130, 509, // 396
380, 509, // 398
380, 386, // 400
258, 253, // 402
510, 253, // 404
510, 114, // 406
354, 3, // 408
354, 115, // 410
510, 3, // 412
258, 3, // 414
507, 252, // 416
255, 2, // 418
255, 252, // 420
510, 3, // 422
376, 511, // 424
376, 386, // 426
253, 386, // 428
510, 254, // 430
258, 3, // 432
475, 112, // 434
475, 3, // 436
354, 254, // 438
509, 117, // 440
509, 2, // 442
259, 2, // 444
191, 321, // 446
254, 258, // 448
128, 258, // 450
252, 259, // 452
131, 259, // 454
192, 320, // 456
260, 16, // 458
442, 16, // 460
442, 211, // 462
260, 255, // 464
259, 254, // 466
509, 255, // 468
509, 211, // 470
245, 319, // 472
190, 264, // 474
135, 319, // 476
509, 209, // 478
443, 209, // 480
509, 253, // 482
259, 253, // 484
259, 16, // 486
443, 16, // 488
354, 15, // 490
260, 350, // 492
312, 350, // 494
260, 264, // 496
509, 264, // 498
381, 434, // 500
163, 324, // 502
222, 386, // 504
259, 15, // 506
507, 2, // 508
259, 117, // 510
386, 253, // 512
510, 2, // 514
260, 2, // 516
510, 0, // 518
510, 261, // 520
253, 327, // 522
259, 16, // 524
466, 350, // 526
387, 386, // 528
387, 388, // 530
510, 390, // 532
511, 388, // 534
381, 386, // 536
130, 386, // 538
258, 112, // 540
509, 251, // 542
351, 1, // 544
351, 251, // 546
509, 1, // 548
509, 352, // 550
261, 259, // 552
261, 352, // 554
509, 260, // 556
261, 351, // 558
509, 351, // 560
509, 259, // 562
261, 260, // 564
127, 125, // 566
3, 249, // 568
3, 1, // 570
127, 1, // 572
125, 126, // 574
1, 250, // 576
1, 2, // 578
125, 254, // 580
125, 129, // 582
1, 254, // 584
126, 128, // 586
1, 128, // 588
1, 252, // 590
130, 1, // 592
130, 125, // 594
254, 125, // 596
126, 386, // 598
2, 510, // 600
2, 262, // 602
1, 129, // 604
126, 510, // 606
125, 250, // 608
127, 249, // 610
254, 1, // 612
126, 252, // 614
253, 130, // 616
129, 130, // 618
129, 254, // 620
253, 254, // 622
387, 448, // 624
508, 448, // 626
508, 386, // 628
387, 446, // 630
508, 446, // 632
508, 388, // 634
381, 511, // 636
131, 434, // 638
131, 511, // 640
510, 350, // 642
302, 261, // 644
259, 350, // 646
259, 252, // 648
511, 252, // 650
511, 15, // 652
259, 352, // 654
404, 352, // 656
317, 258, // 658
259, 258, // 660
130, 259, // 662
191, 320, // 664
253, 259, // 666
259, 261, // 668
253, 382, // 670
129, 327, // 672
129, 382, // 674
477, 210, // 676
477, 15, // 678
354, 210, // 680
222, 509, // 682
352, 509, // 684
352, 386, // 686
191, 321, // 688
254, 258, // 690
128, 258, // 692
260, 16, // 694
442, 16, // 696
442, 211, // 698
260, 255, // 700
509, 255, // 702
354, 15, // 704
260, 350, // 706
312, 350, // 708
260, 264, // 710
509, 264, // 712
381, 434, // 714
222, 386, // 716
259, 15, // 718
510, 261, // 720
253, 327, // 722
466, 350, // 724
387, 386, // 726
387, 388, // 728
509, 251, // 730
351, 1, // 732
351, 251, // 734
509, 1, // 736
509, 352, // 738
261, 259, // 740
261, 352, // 742
509, 260, // 744
261, 351, // 746
509, 351, // 748
509, 259, // 750
261, 260 // 752
}; // cityUVs
#define CITY_UV_INDEX_COUNT 197
const S3L_Index cityUVIndices[CITY_UV_INDEX_COUNT * 3] = {
0, 1, 2, // 0
3, 4, 5, // 3
6, 7, 8, // 6
9, 10, 11, // 9
0, 2, 12, // 12
13, 14, 15, // 15
16, 17, 18, // 18
16, 19, 17, // 21
11, 20, 9, // 24
10, 9, 21, // 27
14, 22, 15, // 30
16, 18, 23, // 33
5, 24, 3, // 36
25, 26, 27, // 39
28, 29, 30, // 42
31, 32, 33, // 45
34, 35, 36, // 48
37, 38, 39, // 51
40, 41, 42, // 54
43, 44, 45, // 57
42, 46, 40, // 60
47, 48, 49, // 63
50, 46, 42, // 66
51, 52, 53, // 69
45, 44, 54, // 72
51, 53, 31, // 75
55, 56, 57, // 78
54, 44, 58, // 81
59, 60, 61, // 84
62, 63, 64, // 87
64, 63, 65, // 90
65, 63, 66, // 93
63, 67, 66, // 96
31, 53, 32, // 99
47, 68, 48, // 102
25, 69, 26, // 105
28, 30, 70, // 108
34, 71, 35, // 111
37, 39, 72, // 114
55, 73, 56, // 117
74, 75, 76, // 120
74, 77, 75, // 123
78, 79, 80, // 126
81, 82, 83, // 129
84, 81, 83, // 132
85, 86, 87, // 135
87, 88, 85, // 138
89, 90, 91, // 141
92, 93, 94, // 144
95, 96, 97, // 147
98, 99, 100, // 150
101, 102, 103, // 153
104, 105, 106, // 156
107, 108, 109, // 159
78, 80, 110, // 162
111, 112, 113, // 165
114, 115, 116, // 168
114, 117, 115, // 171
109, 118, 107, // 174
90, 119, 91, // 177
102, 101, 120, // 180
108, 107, 121, // 183
112, 122, 113, // 186
114, 116, 123, // 189
100, 124, 98, // 192
88, 87, 125, // 195
81, 126, 82, // 198
97, 127, 95, // 201
94, 128, 92, // 204
129, 130, 131, // 207
131, 132, 129, // 210
133, 134, 135, // 213
136, 137, 138, // 216
139, 140, 141, // 219
142, 143, 144, // 222
145, 146, 147, // 225
148, 149, 150, // 228
151, 152, 153, // 231
154, 155, 156, // 234
157, 158, 159, // 237
160, 161, 162, // 240
163, 164, 165, // 243
166, 167, 168, // 246
169, 170, 171, // 249
172, 173, 174, // 252
172, 174, 175, // 255
176, 177, 178, // 258
165, 164, 179, // 261
180, 181, 182, // 264
183, 184, 185, // 267
186, 187, 188, // 270
189, 190, 191, // 273
192, 193, 194, // 276
195, 196, 197, // 279
198, 199, 200, // 282
201, 202, 203, // 285
204, 205, 206, // 288
203, 207, 201, // 291
208, 209, 210, // 294
211, 207, 203, // 297
212, 213, 214, // 300
206, 205, 215, // 303
212, 214, 192, // 306
216, 217, 218, // 309
215, 205, 219, // 312
220, 221, 222, // 315
223, 224, 225, // 318
226, 227, 228, // 321
229, 230, 231, // 324
231, 232, 229, // 327
233, 180, 182, // 330
232, 231, 234, // 333
235, 234, 231, // 336
236, 237, 238, // 339
239, 240, 241, // 342
241, 240, 242, // 345
242, 240, 243, // 348
240, 244, 243, // 351
187, 245, 188, // 354
246, 247, 248, // 357
247, 249, 248, // 360
160, 250, 161, // 363
166, 168, 251, // 366
189, 191, 252, // 369
192, 214, 193, // 372
169, 171, 253, // 375
208, 254, 209, // 378
220, 222, 255, // 381
148, 256, 149, // 384
151, 257, 152, // 387
154, 156, 258, // 390
157, 259, 158, // 393
163, 260, 164, // 396
183, 261, 184, // 399
180, 262, 181, // 402
249, 247, 263, // 405
133, 135, 264, // 408
136, 138, 265, // 411
139, 141, 266, // 414
142, 267, 143, // 417
195, 268, 196, // 420
198, 200, 269, // 423
216, 270, 217, // 426
271, 272, 273, // 429
271, 274, 272, // 432
275, 276, 277, // 435
278, 279, 280, // 438
275, 281, 276, // 441
278, 282, 279, // 444
283, 284, 285, // 447
286, 283, 285, // 450
287, 288, 289, // 453
290, 291, 292, // 456
293, 294, 295, // 459
296, 297, 298, // 462
299, 300, 301, // 465
291, 302, 292, // 468
300, 299, 303, // 471
288, 287, 304, // 474
283, 305, 284, // 477
298, 306, 296, // 480
295, 307, 293, // 483
308, 309, 310, // 486
310, 311, 308, // 489
312, 313, 314, // 492
315, 316, 317, // 495
318, 319, 320, // 498
321, 322, 323, // 501
324, 325, 326, // 504
327, 328, 329, // 507
327, 329, 330, // 510
331, 332, 333, // 513
323, 322, 334, // 516
335, 336, 337, // 519
338, 339, 340, // 522
341, 342, 343, // 525
344, 345, 346, // 528
347, 348, 349, // 531
349, 350, 347, // 534
350, 349, 351, // 537
339, 352, 340, // 540
353, 354, 355, // 543
354, 356, 355, // 546
318, 357, 319, // 549
341, 343, 358, // 552
324, 326, 359, // 555
321, 360, 322, // 558
335, 361, 336, // 561
356, 354, 362, // 564
312, 314, 363, // 567
315, 317, 364, // 570
365, 366, 367, // 573
365, 368, 366, // 576
369, 370, 371, // 579
372, 373, 374, // 582
369, 375, 370, // 585
372, 376, 373 // 588
}; // cityUVIndices
S3L_Model3D cityModel =
{
.vertices = cityVertices,
.vertexCount = CITY_VERTEX_COUNT,
.triangles = cityTriangleIndices,
.triangleCount = CITY_TRIANGLE_COUNT
};
#endif // guard

8942
programs/cityTexture.h Normal file

File diff suppressed because it is too large Load diff

226
programs/demo.c Normal file
View file

@ -0,0 +1,226 @@
/*
author: Miloslav Ciz
license: CC0
*/
#include <SDL2/SDL.h>
#include <stdio.h>
#include <math.h>
#include <time.h>
#include <stdlib.h>
#define S3L_FLAT 0
#define S3L_STRICT_NEAR_CULLING 0
#define S3L_PERSPECTIVE_CORRECTION 1
#define S3L_SORT 2
#define S3L_STENCIL_BUFFER 1
#define S3L_Z_BUFFER 0
#define S3L_PIXEL_FUNCTION drawPixel
#define S3L_RESOLUTION_X 800
#define S3L_RESOLUTION_Y 600
#include "../small3dlib.h"
#include "cityModel.h"
#include "cityTexture.h"
#define TEXTURE_W 256
#define TEXTURE_H 256
S3L_Model3D model;
S3L_Scene scene;
uint32_t pixels[S3L_RESOLUTION_X * S3L_RESOLUTION_Y];
uint32_t frame = 0;
void clearScreen()
{
memset(pixels,255,S3L_RESOLUTION_X * S3L_RESOLUTION_Y * sizeof(uint32_t));
}
static inline void setPixel(int x, int y, uint8_t red, uint8_t green, uint8_t blue)
{
if (x < 0 || x >= S3L_RESOLUTION_X || y < 0 || y >= S3L_RESOLUTION_Y)
return;
uint32_t r = red & 0x000000FF;
r = r << 24;
uint32_t g = green & 0x000000FF;
g = g << 16;
uint32_t b = blue & 0x000000FF;
b = b << 8;
pixels[y * S3L_RESOLUTION_X + x] = r | g | b;
}
void sampleTexture(uint8_t *texture, int32_t u, int32_t v, uint8_t *r, uint8_t *g, uint8_t *b)
{
u = S3L_clamp(u,0,TEXTURE_W - 1);
v = S3L_clamp(v,0,TEXTURE_H - 1);
int32_t index = (v * TEXTURE_W + u) * 3;
*r = texture[index];
index++;
*g = texture[index];
index++;
*b = texture[index];
}
int16_t previousTriangle = -1;
S3L_Unit uv0[2], uv1[2], uv2[2];
void drawPixel(S3L_PixelInfo *p)
{
if (p->triangleIndex != previousTriangle)
{
int16_t index;
index = p->triangleIndex * 3;
int16_t i0 = cityUVIndices[index];
int16_t i1 = cityUVIndices[index + 1];
int16_t i2 = cityUVIndices[index + 2];
index = i0 * 2;
uv0[0] = cityUVs[index];
uv0[1] = cityUVs[index + 1];
index = i1 * 2;
uv1[0] = cityUVs[index];
uv1[1] = cityUVs[index + 1];
index = i2 * 2;
uv2[0] = cityUVs[index];
uv2[1] = cityUVs[index + 1];
previousTriangle = p->triangleIndex;
}
uint8_t r,g,b;
S3L_Unit uv[2];
uv[0] = S3L_interpolateBarycentric(uv0[0],uv1[0],uv2[0],
p->barycentric[0], p->barycentric[1], p->barycentric[2]);
uv[1] = S3L_interpolateBarycentric(uv0[1],uv1[1],uv2[1],
p->barycentric[0], p->barycentric[1], p->barycentric[2]);
sampleTexture(cityTexture,uv[0] / 2,uv[1] / 2,&r,&g,&b);
setPixel(p->x,p->y,r,g,b);
}
void draw()
{
S3L_newFrame();
clearScreen();
S3L_drawScene(scene);
}
int16_t fps = 0;
int main()
{
SDL_Window *window = SDL_CreateWindow("model viewer", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, S3L_RESOLUTION_X, S3L_RESOLUTION_Y, SDL_WINDOW_SHOWN);
SDL_Renderer *renderer = SDL_CreateRenderer(window,-1,0);
SDL_Texture *textureSDL = SDL_CreateTexture(renderer,SDL_PIXELFORMAT_RGBX8888, SDL_TEXTUREACCESS_STATIC, S3L_RESOLUTION_X, S3L_RESOLUTION_Y);
SDL_Surface *screenSurface = SDL_GetWindowSurface(window);
SDL_Event event;
S3L_initModel3D(cityVertices,CITY_VERTEX_COUNT,cityTriangleIndices,CITY_TRIANGLE_COUNT,&model);
S3L_initScene(&model,1,&scene);
scene.camera.transform.translation.z = -S3L_FRACTIONS_PER_UNIT * 8;
int running = 1;
clock_t nextPrintT;
nextPrintT = clock();
while (running)
{
clock_t frameStartT = clock();
draw();
fps++;
SDL_UpdateTexture(textureSDL,NULL,pixels,S3L_RESOLUTION_X * sizeof(uint32_t));
clock_t nowT = clock();
double timeDiff = ((double) (nowT - nextPrintT)) / CLOCKS_PER_SEC;
double frameDiff = ((double) (nowT - frameStartT)) / CLOCKS_PER_SEC;
if (timeDiff >= 1.0)
{
nextPrintT = nowT;
printf("FPS: %d\n",fps);
fps = 0;
}
while (SDL_PollEvent(&event))
{
if (event.type == SDL_QUIT)
running = 0;
}
uint8_t *state = SDL_GetKeyboardState(NULL);
int16_t rotationStep = S3L_max(1,300 * frameDiff);
int16_t zoomStep = S3L_max(1,3000 * frameDiff);
int16_t fovStep = S3L_max(1,1000 * frameDiff);
if (!state[SDL_SCANCODE_LCTRL])
{
if (state[SDL_SCANCODE_LEFT])
model.transform.rotation.y += rotationStep;
else if (state[SDL_SCANCODE_RIGHT])
model.transform.rotation.y -= rotationStep;
if (state[SDL_SCANCODE_DOWN])
model.transform.rotation.x += rotationStep;
else if (state[SDL_SCANCODE_UP])
model.transform.rotation.x -= rotationStep;
}
else
{
if (state[SDL_SCANCODE_LEFT])
scene.camera.focalLength =
S3L_min(S3L_FRACTIONS_PER_UNIT * 5,scene.camera.focalLength + fovStep);
else if (state[SDL_SCANCODE_RIGHT])
scene.camera.focalLength =
S3L_max(S3L_FRACTIONS_PER_UNIT / 2,scene.camera.focalLength - fovStep);
if (state[SDL_SCANCODE_UP])
scene.camera.transform.translation.z =
S3L_min(S3L_FRACTIONS_PER_UNIT, scene.camera.transform.translation.z + zoomStep);
else if (state[SDL_SCANCODE_DOWN])
scene.camera.transform.translation.z =
S3L_max(-S3L_FRACTIONS_PER_UNIT * 16, scene.camera.transform.translation.z - zoomStep);
}
SDL_RenderClear(renderer);
SDL_RenderCopy(renderer,textureSDL,NULL,NULL);
SDL_RenderPresent(renderer);
frame++;
}
return 0;
}