diff --git a/simul/Cargo.lock b/simul/Cargo.lock index bd24979..6f969ad 100644 --- a/simul/Cargo.lock +++ b/simul/Cargo.lock @@ -14,6 +14,33 @@ version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" 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]] name = "lazy_static" version = "1.5.0" @@ -26,6 +53,12 @@ version = "0.2.184" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "48f5d2a454e16a5ea0f4ced81bd44e4cfc7bd3a507b61887c99fd3538b28e4af" +[[package]] +name = "memchr" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" + [[package]] name = "num-traits" version = "0.2.19" @@ -63,6 +96,12 @@ dependencies = [ "proc-macro2", ] +[[package]] +name = "ryu" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" + [[package]] name = "sdl3" version = "0.17.3" @@ -135,8 +174,10 @@ dependencies = [ name = "simul" version = "0.1.0" dependencies = [ + "csv", "obj-rs", "sdl3", + "serde", ] [[package]] diff --git a/simul/Cargo.toml b/simul/Cargo.toml index b082c1a..f3129e6 100644 --- a/simul/Cargo.toml +++ b/simul/Cargo.toml @@ -4,5 +4,7 @@ version = "0.1.0" edition = "2024" [dependencies] +csv = "1.4.0" obj-rs = "0.7.4" sdl3 = { version = "0.17.3", features = ["ttf", "image"] } +serde = { version = "1.0.228", features = ["derive"] } diff --git a/simul/inputs_moving.csv b/simul/assets/inputs_moving.csv similarity index 100% rename from simul/inputs_moving.csv rename to simul/assets/inputs_moving.csv diff --git a/simul/inputs_still.csv b/simul/assets/inputs_still.csv similarity index 100% rename from simul/inputs_still.csv rename to simul/assets/inputs_still.csv diff --git a/simul/assets/probe.mtl b/simul/assets/probe.mtl new file mode 100644 index 0000000..31c5ac7 --- /dev/null +++ b/simul/assets/probe.mtl @@ -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 diff --git a/simul/assets/probe.obj b/simul/assets/probe.obj new file mode 100644 index 0000000..46a6202 --- /dev/null +++ b/simul/assets/probe.obj @@ -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 diff --git a/simul/src/main.rs b/simul/src/main.rs index 1fb4c84..64c033f 100644 --- a/simul/src/main.rs +++ b/simul/src/main.rs @@ -1,8 +1,8 @@ #![allow(unused)] -use std::{collections::HashMap, f64::consts::PI, fs::File, io::BufReader}; - use obj::{Obj, load_obj}; +use serde::Deserialize; +use std::{collections::HashMap, f64::consts::PI, fs::File, io::BufReader}; use crate::{ m3x3::M3x3, @@ -65,38 +65,31 @@ impl App { impl window::App for App { fn update(&mut self, delta_time: std::time::Duration) { - self.rot.0 += PI * 2.0 * delta_time.as_secs_f64() * 0.1; - self.rot.1 += PI * 2.0 * delta_time.as_secs_f64() * 0.1; - self.rot.2 += 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.2; + // self.rot.2 += PI * 2.0 * delta_time.as_secs_f64() * 0.2; } fn render(&self, r: &mut R) { let mut scene = Scene::new(); - let mut model1 = 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 mut cube = Model::new(); let cube_obj = self.assets.get("assets/cube.obj").unwrap(); - model2 - .add_obj(&cube_obj, Color::RGB(165, 125, 165)) + cube.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)) .scale(V3(0.2, 0.2, 0.2)) - .translate(V3(0.0, -0.2, 1.0)); - - scene.draw_model(model2); - - // scene.draw_obj(&cube_obj, V3(0.1, 0.1, 0.1), Color::RGB(125, 125, 125)); + .translate(V3(1.2, 0.0, 1.0)); + scene.draw_model(probe); scene.render( r, @@ -104,17 +97,33 @@ impl window::App for App { M3x3::from_v3_rot(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) {} } +#[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() { let mut window = Window::new(); let mut app = App::new(); 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::() { + let entry: Measurement = entry.unwrap(); + // println!("{:?}", entry); + } window.run(&mut app); } diff --git a/simul/src/scene.rs b/simul/src/scene.rs index da9cc11..811cf77 100644 --- a/simul/src/scene.rs +++ b/simul/src/scene.rs @@ -1,3 +1,5 @@ +use std::f64::consts::PI; + use obj::Obj; use crate::{ @@ -48,12 +50,24 @@ impl Scene { 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); - r.draw_triangles(&[tri2], *color); - r.draw_line(tri2.0, tri2.1, Color::BLACK); - r.draw_line(tri2.1, tri2.2, Color::BLACK); - r.draw_line(tri2.2, tri2.0, Color::BLACK); + r.draw_triangles(&[tri2], color); + // r.draw_line(tri2.0, tri2.1, Color::BLACK); + // r.draw_line(tri2.1, tri2.2, Color::BLACK); + // r.draw_line(tri2.2, tri2.0, Color::BLACK); } } diff --git a/simul/src/v3.rs b/simul/src/v3.rs index 92d48f3..1f45ae5 100644 --- a/simul/src/v3.rs +++ b/simul/src/v3.rs @@ -1,6 +1,5 @@ -use std::ops::{Add, Div, Mul, Neg, Sub}; - use crate::{m3x3::M3x3, v2::V2}; +use std::ops::{Add, Div, Mul, Neg, Sub}; #[derive(Clone, Copy, Debug)] 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) } + pub fn angle(&self, rhs: Self) -> f64 { + (self.dot(rhs) / (self.len() * rhs.len())).acos() + } + pub fn dot(&self, rhs: Self) -> f64 { self.zip(rhs, |a, b| a * b).reduce(0.0, |acc, v| acc + v) }