slim shading

This commit is contained in:
sfja 2026-04-05 02:15:30 +02:00
parent 578f12679f
commit bc351ef6e7
9 changed files with 515 additions and 34 deletions

41
simul/Cargo.lock generated
View File

@ -14,6 +14,33 @@ version = "2.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af" checksum = "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af"
[[package]]
name = "csv"
version = "1.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "52cd9d68cf7efc6ddfaaee42e7288d3a99d613d4b50f76ce9827ae0c6e14f938"
dependencies = [
"csv-core",
"itoa",
"ryu",
"serde_core",
]
[[package]]
name = "csv-core"
version = "0.1.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "704a3c26996a80471189265814dbc2c257598b96b8a7feae2d31ace646bb9782"
dependencies = [
"memchr",
]
[[package]]
name = "itoa"
version = "1.0.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682"
[[package]] [[package]]
name = "lazy_static" name = "lazy_static"
version = "1.5.0" version = "1.5.0"
@ -26,6 +53,12 @@ version = "0.2.184"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "48f5d2a454e16a5ea0f4ced81bd44e4cfc7bd3a507b61887c99fd3538b28e4af" checksum = "48f5d2a454e16a5ea0f4ced81bd44e4cfc7bd3a507b61887c99fd3538b28e4af"
[[package]]
name = "memchr"
version = "2.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79"
[[package]] [[package]]
name = "num-traits" name = "num-traits"
version = "0.2.19" version = "0.2.19"
@ -63,6 +96,12 @@ dependencies = [
"proc-macro2", "proc-macro2",
] ]
[[package]]
name = "ryu"
version = "1.0.23"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f"
[[package]] [[package]]
name = "sdl3" name = "sdl3"
version = "0.17.3" version = "0.17.3"
@ -135,8 +174,10 @@ dependencies = [
name = "simul" name = "simul"
version = "0.1.0" version = "0.1.0"
dependencies = [ dependencies = [
"csv",
"obj-rs", "obj-rs",
"sdl3", "sdl3",
"serde",
] ]
[[package]] [[package]]

View File

@ -4,5 +4,7 @@ version = "0.1.0"
edition = "2024" edition = "2024"
[dependencies] [dependencies]
csv = "1.4.0"
obj-rs = "0.7.4" obj-rs = "0.7.4"
sdl3 = { version = "0.17.3", features = ["ttf", "image"] } sdl3 = { version = "0.17.3", features = ["ttf", "image"] }
serde = { version = "1.0.228", features = ["derive"] }

12
simul/assets/probe.mtl Normal file
View File

@ -0,0 +1,12 @@
# Blender 5.1.0 MTL File: 'None'
# www.blender.org
newmtl Material
Ns 250.000000
Ka 1.000000 1.000000 1.000000
Kd 0.800000 0.800000 0.800000
Ks 0.500000 0.500000 0.500000
Ke 0.000000 0.000000 0.000000
Ni 1.500000
d 1.000000
illum 2

400
simul/assets/probe.obj Normal file
View File

@ -0,0 +1,400 @@
# Blender 5.1.0
# www.blender.org
mtllib probe.mtl
o Cube
v 1.000000 0.101130 -1.527883
v 1.000000 -0.101130 -1.527883
v 1.000000 0.101130 1.527883
v 1.000000 -0.101130 1.527883
v -1.000000 0.101130 -1.527883
v -1.000000 -0.101130 -1.527883
v -1.000000 0.101130 1.527883
v -1.000000 -0.101130 1.527883
v 0.008186 -0.628219 0.059172
v 0.539580 -0.256799 0.412578
v -0.194785 -0.256799 0.631000
v -0.648653 -0.256796 0.059172
v -0.194785 -0.256799 -0.512655
v 0.539580 -0.256799 -0.294233
v 0.211156 0.344187 0.631000
v -0.523209 0.344187 0.412578
v -0.523209 0.344187 -0.294233
v 0.211156 0.344187 -0.512655
v 0.665024 0.344184 0.059172
v 0.008186 0.715607 0.059172
v -0.111117 -0.527872 0.395282
v 0.320529 -0.527872 0.266897
v 0.201228 -0.309556 0.603010
v 0.632875 -0.309555 0.059172
v 0.320529 -0.527872 -0.148553
v -0.377894 -0.527870 0.059172
v -0.497199 -0.309555 0.395283
v -0.111117 -0.527872 -0.276937
v -0.497199 -0.309555 -0.276938
v 0.201228 -0.309556 -0.484666
v 0.706613 0.043694 0.266898
v 0.706613 0.043694 -0.148554
v 0.008186 0.043694 0.731397
v 0.439837 0.043694 0.603014
v -0.690242 0.043694 0.266898
v -0.423466 0.043694 0.603014
v -0.423466 0.043694 -0.484669
v -0.690242 0.043694 -0.148554
v 0.439837 0.043694 -0.484669
v 0.008186 0.043694 -0.613053
v 0.513570 0.396943 0.395283
v -0.184857 0.396944 0.603010
v -0.616504 0.396943 0.059172
v -0.184857 0.396944 -0.484666
v 0.513570 0.396943 -0.276938
v 0.127488 0.615260 0.395282
v 0.394265 0.615258 0.059172
v -0.304158 0.615260 0.266897
v -0.304158 0.615260 -0.148553
v 0.127488 0.615260 -0.276937
v -0.213092 0.101130 -0.296547
v -0.174677 0.139545 -1.446611
v 0.211278 0.101130 -0.296547
v 0.172863 0.139545 -1.446611
v 0.211278 0.397765 -0.296547
v 0.121256 0.487787 -0.296547
v 0.105344 0.449373 -1.446611
v 0.172863 0.381853 -1.446611
v -0.123065 0.487787 -0.296547
v -0.213092 0.397760 -0.296547
v -0.174677 0.381849 -1.446611
v -0.107153 0.449373 -1.446611
v 0.211278 0.101130 -1.446611
v -0.213092 0.101130 -1.446611
v 0.211278 0.397765 -1.446611
v 0.121256 0.487787 -1.446611
v -0.123065 0.487787 -1.446611
v -0.213092 0.397760 -1.446611
v -0.174677 0.139545 -0.777891
v 0.172863 0.139545 -0.777891
v 0.105344 0.449372 -0.777891
v 0.172863 0.381853 -0.777891
v -0.174677 0.381848 -0.777891
v -0.107153 0.449372 -0.777891
vn -0.0000 -0.0000 1.0000
vn -1.0000 -0.0000 -0.0000
vn -0.0000 -1.0000 -0.0000
vn 1.0000 -0.0000 -0.0000
vn -0.0000 -0.0000 -1.0000
vn 0.0938 -0.9444 0.3152
vn 0.6679 -0.6898 0.2793
vn -0.2467 -0.9491 0.1958
vn -0.2467 -0.9491 -0.1958
vn 0.0938 -0.9444 -0.3152
vn 0.8895 -0.3549 0.2878
vn 0.0227 -0.3305 0.9435
vn -0.8722 -0.3540 0.3375
vn -0.5406 -0.3397 -0.7696
vn 0.5011 -0.3385 -0.7965
vn 0.7763 -0.1328 0.6162
vn -0.2828 -0.1267 0.9508
vn -0.9906 -0.1371 -0.0000
vn -0.2828 -0.1267 -0.9508
vn 0.7763 -0.1328 -0.6162
vn 0.3794 0.6710 0.6370
vn -0.4393 0.6741 0.5938
vn -0.6679 0.6898 -0.2793
vn 0.0353 0.6620 -0.7487
vn 0.6927 0.6919 -0.2035
vn 0.2467 0.9491 -0.1958
vn 0.4585 0.8108 -0.3639
vn 0.3794 0.6710 -0.6370
vn -0.0938 0.9444 -0.3152
vn -0.1722 0.7971 -0.5788
vn -0.4393 0.6741 -0.5938
vn -0.3059 0.9521 -0.0000
vn -0.5729 0.8196 -0.0000
vn -0.6679 0.6898 0.2793
vn -0.0938 0.9444 0.3152
vn -0.1722 0.7971 0.5788
vn 0.0353 0.6620 0.7487
vn 0.2467 0.9491 0.1958
vn 0.4585 0.8108 0.3639
vn 0.6927 0.6919 0.2035
vn 0.8722 0.3540 -0.3375
vn 0.7677 0.1981 -0.6094
vn 0.5406 0.3397 -0.7696
vn -0.0227 0.3305 -0.9435
vn -0.2799 0.1891 -0.9412
vn -0.5011 0.3385 -0.7965
vn -0.8895 0.3549 -0.2878
vn -0.9789 0.2043 -0.0000
vn -0.8895 0.3549 0.2878
vn -0.5011 0.3385 0.7965
vn -0.2799 0.1891 0.9412
vn -0.0227 0.3305 0.9435
vn 0.5406 0.3397 0.7696
vn 0.7677 0.1981 0.6094
vn 0.8722 0.3540 0.3375
vn 0.2828 0.1267 -0.9508
vn 0.2799 -0.1891 -0.9412
vn 0.0227 -0.3305 -0.9435
vn -0.7763 0.1328 -0.6162
vn -0.7677 -0.1981 -0.6094
vn -0.8722 -0.3540 -0.3375
vn -0.7763 0.1328 0.6162
vn -0.7677 -0.1981 0.6094
vn -0.5406 -0.3397 0.7696
vn 0.2828 0.1267 0.9508
vn 0.2799 -0.1891 0.9412
vn 0.5011 -0.3385 0.7965
vn 0.9906 0.1371 -0.0000
vn 0.9789 -0.2043 -0.0000
vn 0.8895 -0.3549 -0.2878
vn 0.4393 -0.6741 -0.5938
vn 0.1722 -0.7971 -0.5788
vn -0.0353 -0.6620 -0.7487
vn -0.3794 -0.6710 -0.6370
vn -0.4585 -0.8108 -0.3639
vn -0.6927 -0.6919 -0.2035
vn -0.6927 -0.6919 0.2035
vn -0.4585 -0.8108 0.3639
vn -0.3794 -0.6710 0.6370
vn 0.6679 -0.6898 -0.2793
vn 0.5729 -0.8196 -0.0000
vn 0.3059 -0.9521 -0.0000
vn -0.0353 -0.6620 0.7487
vn 0.1722 -0.7971 0.5788
vn 0.4393 -0.6741 0.5938
vn 0.7071 0.7071 -0.0000
vn -0.7071 0.7071 -0.0000
vn -0.0000 1.0000 -0.0000
vn 0.7071 -0.7071 -0.0000
vn -0.7071 -0.7071 -0.0000
vt 0.625000 0.750000
vt 0.375000 1.000000
vt 0.375000 0.750000
vt 0.625000 0.000000
vt 0.375000 0.250000
vt 0.375000 0.000000
vt 0.375000 0.500000
vt 0.125000 0.750000
vt 0.125000 0.500000
vt 0.625000 0.500000
vt 0.625000 0.250000
vt 0.181819 0.000000
vt 0.227273 0.078731
vt 0.136365 0.078731
vt 0.272728 0.157461
vt 0.318182 0.078731
vt 0.363637 0.157461
vt 0.909091 0.000000
vt 0.954545 0.078731
vt 0.863636 0.078731
vt 0.727273 0.000000
vt 0.772727 0.078731
vt 0.681818 0.078731
vt 0.545455 0.000000
vt 0.590909 0.078731
vt 0.500000 0.078731
vt 0.318182 0.236191
vt 0.090910 0.157461
vt 0.181819 0.157461
vt 0.136365 0.236191
vt 0.818182 0.157461
vt 0.909091 0.157461
vt 0.863636 0.236191
vt 0.636364 0.157461
vt 0.727273 0.157461
vt 0.681818 0.236191
vt 0.454546 0.157461
vt 0.545455 0.157461
vt 0.500000 0.236191
vt 0.227273 0.236191
vt 0.045455 0.236191
vt 0.772727 0.236191
vt 0.590909 0.236191
vt 0.409092 0.236191
vt 0.181819 0.314921
vt 0.272728 0.314921
vt 0.227273 0.393651
vt 0.000000 0.314921
vt 0.090910 0.314921
vt 0.045455 0.393651
vt 0.727273 0.314921
vt 0.818182 0.314921
vt 0.772727 0.393651
vt 0.545455 0.314921
vt 0.636364 0.314921
vt 0.590909 0.393651
vt 0.363637 0.314921
vt 0.454546 0.314921
vt 0.409092 0.393651
vt 0.500000 0.393651
vt 0.454546 0.472382
vt 0.681818 0.393651
vt 0.636364 0.472382
vt 0.863636 0.393651
vt 0.818182 0.472382
vt 0.909091 0.314921
vt 0.136365 0.393651
vt 0.090910 0.472382
vt 0.318182 0.393651
vt 0.272728 0.472382
vt 0.954545 0.236191
vt 1.000000 0.157461
vt 0.409092 0.078731
vt 0.363637 0.000000
vt 0.660355 0.767678
vt 0.566795 0.500000
vt 0.660355 0.482322
vt 0.629760 0.281278
vt 0.566791 0.000000
vt 0.566795 0.750000
vt 0.634520 0.937445
vt 0.817204 0.495240
vt 0.400254 0.272695
vt 0.400354 0.477620
vt 0.624889 0.460309
vt 0.562059 0.482339
vt 0.558015 0.270056
vt 0.606124 0.300096
vt 0.566792 0.250000
vt 0.875000 0.750000
vt 0.875000 0.500000
vt 0.625000 1.000000
vt 0.566791 1.000000
vt 0.817204 0.754760
s 0
usemtl Material
f 3/1/1 8/2/1 4/3/1
f 7/4/2 6/5/2 8/6/2
f 2/7/3 8/8/3 6/9/3
f 1/10/4 4/3/4 2/7/4
f 5/11/5 2/7/5 6/5/5
f 9/12/6 22/13/6 21/14/6
f 10/15/7 22/16/7 24/17/7
f 9/18/8 21/19/8 26/20/8
f 9/21/9 26/22/9 28/23/9
f 9/24/10 28/25/10 25/26/10
f 10/15/11 24/17/11 31/27/11
f 11/28/12 23/29/12 33/30/12
f 12/31/13 27/32/13 35/33/13
f 13/34/14 29/35/14 37/36/14
f 14/37/15 30/38/15 39/39/15
f 10/15/16 31/27/16 34/40/16
f 11/28/17 33/30/17 36/41/17
f 12/31/18 35/33/18 38/42/18
f 13/34/19 37/36/19 40/43/19
f 14/37/20 39/39/20 32/44/20
f 15/45/21 41/46/21 46/47/21
f 16/48/22 42/49/22 48/50/22
f 17/51/23 43/52/23 49/53/23
f 18/54/24 44/55/24 50/56/24
f 19/57/25 45/58/25 47/59/25
f 47/59/26 50/60/26 20/61/26
f 47/59/27 45/58/27 50/60/27
f 45/58/28 18/54/28 50/60/28
f 50/56/29 49/62/29 20/63/29
f 50/56/30 44/55/30 49/62/30
f 44/55/31 17/51/31 49/62/31
f 49/53/32 48/64/32 20/65/32
f 49/53/33 43/52/33 48/64/33
f 43/52/34 16/66/34 48/64/34
f 48/50/35 46/67/35 20/68/35
f 48/50/36 42/49/36 46/67/36
f 42/49/37 15/45/37 46/67/37
f 46/47/38 47/69/38 20/70/38
f 46/47/39 41/46/39 47/69/39
f 41/46/40 19/57/40 47/69/40
f 32/44/41 45/58/41 19/57/41
f 32/44/42 39/39/42 45/58/42
f 39/39/43 18/54/43 45/58/43
f 40/43/44 44/55/44 18/54/44
f 40/43/45 37/36/45 44/55/45
f 37/36/46 17/51/46 44/55/46
f 38/42/47 43/52/47 17/51/47
f 38/42/48 35/33/48 43/52/48
f 35/33/49 16/66/49 43/52/49
f 36/41/50 42/49/50 16/48/50
f 36/41/51 33/30/51 42/49/51
f 33/30/52 15/45/52 42/49/52
f 34/40/53 41/46/53 15/45/53
f 34/40/54 31/27/54 41/46/54
f 31/27/55 19/57/55 41/46/55
f 39/39/56 40/43/56 18/54/56
f 39/39/57 30/38/57 40/43/57
f 30/38/58 13/34/58 40/43/58
f 37/36/59 38/42/59 17/51/59
f 37/36/60 29/35/60 38/42/60
f 29/35/61 12/31/61 38/42/61
f 35/33/62 36/71/62 16/66/62
f 35/33/63 27/32/63 36/71/63
f 27/32/64 11/72/64 36/71/64
f 33/30/65 34/40/65 15/45/65
f 33/30/66 23/29/66 34/40/66
f 23/29/67 10/15/67 34/40/67
f 31/27/68 32/44/68 19/57/68
f 31/27/69 24/17/69 32/44/69
f 24/17/70 14/37/70 32/44/70
f 25/26/71 30/38/71 14/37/71
f 25/26/72 28/25/72 30/38/72
f 28/25/73 13/34/73 30/38/73
f 28/23/74 29/35/74 13/34/74
f 28/23/75 26/22/75 29/35/75
f 26/22/76 12/31/76 29/35/76
f 26/20/77 27/32/77 12/31/77
f 26/20/78 21/19/78 27/32/78
f 21/19/79 11/72/79 27/32/79
f 24/17/80 25/73/80 14/37/80
f 24/17/81 22/16/81 25/73/81
f 22/16/82 9/74/82 25/73/82
f 21/14/83 23/29/83 11/28/83
f 21/14/84 22/13/84 23/29/84
f 22/13/85 10/15/85 23/29/85
f 63/7/3 51/8/3 64/9/3
f 56/75/86 65/76/86 66/77/86
f 65/76/4 53/3/4 63/7/4
f 67/78/87 60/79/87 59/4/87
f 55/80/1 59/81/1 51/2/1
f 60/79/2 64/5/2 51/6/2
f 67/82/88 56/75/88 66/77/88
f 52/83/88 70/84/88 54/84/88
f 54/84/5 64/5/5 52/83/5
f 57/85/5 65/76/5 58/86/5
f 54/84/5 65/76/5 63/7/5
f 61/87/5 67/78/5 62/88/5
f 52/83/5 68/89/5 61/87/5
f 62/88/5 66/77/5 57/85/5
f 73/87/5 71/85/5 70/84/5
f 57/85/3 74/88/3 62/88/3
f 61/87/89 74/88/89 73/87/89
f 57/85/90 72/86/90 71/85/90
f 52/83/4 73/87/4 69/83/4
f 54/84/2 72/86/2 58/86/2
f 7/90/88 1/10/88 5/91/88
f 3/1/1 7/92/1 8/2/1
f 7/4/2 5/11/2 6/5/2
f 2/7/3 4/3/3 8/8/3
f 1/10/4 3/1/4 4/3/4
f 5/11/5 1/10/5 2/7/5
f 63/7/3 53/3/3 51/8/3
f 56/75/86 55/80/86 65/76/86
f 65/76/4 55/80/4 53/3/4
f 67/78/87 68/89/87 60/79/87
f 51/2/1 53/3/1 55/80/1
f 55/80/1 56/75/1 59/81/1
f 59/81/1 60/93/1 51/2/1
f 60/79/2 68/89/2 64/5/2
f 67/82/88 59/94/88 56/75/88
f 52/83/88 69/83/88 70/84/88
f 54/84/5 63/7/5 64/5/5
f 57/85/5 66/77/5 65/76/5
f 54/84/5 58/86/5 65/76/5
f 61/87/5 68/89/5 67/78/5
f 52/83/5 64/5/5 68/89/5
f 62/88/5 67/78/5 66/77/5
f 70/84/5 69/83/5 73/87/5
f 73/87/5 74/88/5 71/85/5
f 71/85/5 72/86/5 70/84/5
f 57/85/3 71/85/3 74/88/3
f 61/87/89 62/88/89 74/88/89
f 57/85/90 58/86/90 72/86/90
f 52/83/4 61/87/4 73/87/4
f 54/84/2 70/84/2 72/86/2
f 7/90/88 3/1/88 1/10/88

View File

@ -1,8 +1,8 @@
#![allow(unused)] #![allow(unused)]
use std::{collections::HashMap, f64::consts::PI, fs::File, io::BufReader};
use obj::{Obj, load_obj}; use obj::{Obj, load_obj};
use serde::Deserialize;
use std::{collections::HashMap, f64::consts::PI, fs::File, io::BufReader};
use crate::{ use crate::{
m3x3::M3x3, m3x3::M3x3,
@ -65,38 +65,31 @@ impl App {
impl<R: Renderer> window::App<R> for App { impl<R: Renderer> window::App<R> for App {
fn update(&mut self, delta_time: std::time::Duration) { fn update(&mut self, delta_time: std::time::Duration) {
self.rot.0 += PI * 2.0 * delta_time.as_secs_f64() * 0.1; self.rot.0 += PI * 2.0 * delta_time.as_secs_f64() * 0.2;
self.rot.1 += PI * 2.0 * delta_time.as_secs_f64() * 0.1; self.rot.1 += PI * 2.0 * delta_time.as_secs_f64() * 0.2;
self.rot.2 += PI * 2.0 * delta_time.as_secs_f64() * 0.1; // self.rot.2 += PI * 2.0 * delta_time.as_secs_f64() * 0.2;
} }
fn render(&self, r: &mut R) { fn render(&self, r: &mut R) {
let mut scene = Scene::new(); let mut scene = Scene::new();
let mut model1 = Model::new(); let mut cube = Model::new();
model1
.add_tri(
Tri3(V3(0.0, 0.0, 0.0), V3(0.3, 0.3, 0.0), V3(0.3, 0.0, 0.0)),
Color::RGB(125, 165, 165),
)
.rotate_by_m3x3(M3x3::from_v3_rot(self.rot))
.translate(V3(1.0, 0.0, 1.0))
.scale(V3(1.0, 1.0, 1.0));
scene.draw_model(model1);
let mut model2 = Model::new();
let cube_obj = self.assets.get("assets/cube.obj").unwrap(); let cube_obj = self.assets.get("assets/cube.obj").unwrap();
model2 cube.add_obj(&cube_obj, Color::RGB(165, 125, 165))
.add_obj(&cube_obj, Color::RGB(165, 125, 165)) .rotate_by_m3x3(M3x3::from_v3_rot(self.rot))
.scale(V3(0.4, 0.4, 0.4))
.translate(V3(0.0, 0.0, 1.0));
scene.draw_model(cube);
let mut probe = Model::new();
let probe_obj = self.assets.get("assets/probe.obj").unwrap();
probe
.add_obj(&probe_obj, Color::RGB(165, 125, 165))
.rotate_by_m3x3(M3x3::new_rotate_x(PI))
.rotate_by_m3x3(M3x3::from_v3_rot(self.rot)) .rotate_by_m3x3(M3x3::from_v3_rot(self.rot))
.scale(V3(0.2, 0.2, 0.2)) .scale(V3(0.2, 0.2, 0.2))
.translate(V3(0.0, -0.2, 1.0)); .translate(V3(1.2, 0.0, 1.0));
scene.draw_model(probe);
scene.draw_model(model2);
// scene.draw_obj(&cube_obj, V3(0.1, 0.1, 0.1), Color::RGB(125, 125, 125));
scene.render( scene.render(
r, r,
@ -104,17 +97,33 @@ impl<R: Renderer> window::App<R> for App {
M3x3::from_v3_rot(V3(0.0, 0.0, 0.0)), M3x3::from_v3_rot(V3(0.0, 0.0, 0.0)),
V3(0.0, 0.0, 0.0), V3(0.0, 0.0, 0.0),
); );
// r.draw_line(V2(0.0, 0.0), V2(0.6, 0.2), Color::RED);
} }
fn event(&mut self, event: Event) {} fn event(&mut self, event: Event) {}
} }
#[derive(Debug, Deserialize)]
struct Measurement {
time_delta_us: i64,
accel_x: f64,
accel_y: f64,
accel_z: f64,
rotation_x: f64,
rotation_y: f64,
rotation_z: f64,
}
fn main() { fn main() {
let mut window = Window::new(); let mut window = Window::new();
let mut app = App::new(); let mut app = App::new();
app.assets.load("assets/cube.obj"); app.assets.load("assets/cube.obj");
app.assets.load("assets/probe.obj");
let mut reader = csv::Reader::from_path("assets/inputs_still.csv").unwrap();
for entry in reader.deserialize::<Measurement>() {
let entry: Measurement = entry.unwrap();
// println!("{:?}", entry);
}
window.run(&mut app); window.run(&mut app);
} }

View File

@ -1,3 +1,5 @@
use std::f64::consts::PI;
use obj::Obj; use obj::Obj;
use crate::{ use crate::{
@ -48,12 +50,24 @@ impl Scene {
continue; continue;
} }
let light = V3(1.0, 1.0, -1.0);
let exposure = 1.5 - normal.angle(light) / PI;
let (red, green, blue) = color.rgb();
let color = Color::RGB(
(red as f64 * exposure).clamp(0.0, 255.0) as _,
(green as f64 * exposure).clamp(0.0, 255.0) as _,
(blue as f64 * exposure).clamp(0.0, 255.0) as _,
);
let tri2 = tri3.project_2d(camera_pos, camera_rot, screen_rel_pos); let tri2 = tri3.project_2d(camera_pos, camera_rot, screen_rel_pos);
r.draw_triangles(&[tri2], *color); r.draw_triangles(&[tri2], color);
r.draw_line(tri2.0, tri2.1, Color::BLACK); // r.draw_line(tri2.0, tri2.1, Color::BLACK);
r.draw_line(tri2.1, tri2.2, Color::BLACK); // r.draw_line(tri2.1, tri2.2, Color::BLACK);
r.draw_line(tri2.2, tri2.0, Color::BLACK); // r.draw_line(tri2.2, tri2.0, Color::BLACK);
} }
} }

View File

@ -1,6 +1,5 @@
use std::ops::{Add, Div, Mul, Neg, Sub};
use crate::{m3x3::M3x3, v2::V2}; use crate::{m3x3::M3x3, v2::V2};
use std::ops::{Add, Div, Mul, Neg, Sub};
#[derive(Clone, Copy, Debug)] #[derive(Clone, Copy, Debug)]
pub struct V3(pub f64, pub f64, pub f64); pub struct V3(pub f64, pub f64, pub f64);
@ -59,6 +58,10 @@ impl V3 {
V2(e.2 / d.2 * d.0 + e.0, e.2 / d.2 * d.1 + e.1) V2(e.2 / d.2 * d.0 + e.0, e.2 / d.2 * d.1 + e.1)
} }
pub fn angle(&self, rhs: Self) -> f64 {
(self.dot(rhs) / (self.len() * rhs.len())).acos()
}
pub fn dot(&self, rhs: Self) -> f64 { pub fn dot(&self, rhs: Self) -> f64 {
self.zip(rhs, |a, b| a * b).reduce(0.0, |acc, v| acc + v) self.zip(rhs, |a, b| a * b).reduce(0.0, |acc, v| acc + v)
} }