diff --git a/.helix/config.toml b/.helix/config.toml index 35fd786..43a1527 100644 --- a/.helix/config.toml +++ b/.helix/config.toml @@ -5,3 +5,4 @@ [keys.normal." ".o] b = ":sh odin run buddies" h = ":sh odin run house" +c = ":sh odin run collisions" diff --git a/assets/models/.xdp-model.mtl-djtEiY b/assets/models/.xdp-model.mtl-djtEiY new file mode 100644 index 0000000..c0f4679 --- /dev/null +++ b/assets/models/.xdp-model.mtl-djtEiY @@ -0,0 +1,4 @@ +# Made in Blockbench 4.12.1 +newmtl m_c635d5d5-1aa0-7e8f-f427-c4c1aa38de09 +map_Kd tex.png +newmtl none \ No newline at end of file diff --git a/assets/models/.xdp-unnamed2.mtl-f7EDxP b/assets/models/.xdp-unnamed2.mtl-f7EDxP new file mode 100644 index 0000000..8704c13 --- /dev/null +++ b/assets/models/.xdp-unnamed2.mtl-f7EDxP @@ -0,0 +1,4 @@ +# Made in Blockbench 4.12.1 +newmtl m_d3225dde-a8e4-9d3a-05cb-656a25ac9643 +map_Kd tex.png +newmtl none \ No newline at end of file diff --git a/assets/models/model.glb b/assets/models/model.glb new file mode 100644 index 0000000..58ecbf2 Binary files /dev/null and b/assets/models/model.glb differ diff --git a/assets/models/model.obj b/assets/models/model.obj new file mode 100644 index 0000000..3ee3e3f --- /dev/null +++ b/assets/models/model.obj @@ -0,0 +1,674 @@ +# Made in Blockbench 4.12.1 +mtllib model.mtl + +o unknown +o entity0_brush0 +v 0.7000000000000001 0.1 2.5 +v -0.7000000000000001 -0.1 -1 +v -0.7000000000000001 -0.1 2.5 +v -0.7000000000000001 0.1 2.5 +v -0.7000000000000001 0.1 -1 +v 0.7000000000000001 -0.1 2.5 +v 0.7000000000000001 -0.1 -1 +v 0.7000000000000001 0.1 -1 +vt 5 -0.5 +vt -12.5 -0.5 +vt -12.5 0.5 +vt 5 0.5 +vt 3.5 0.5 +vt -3.5 0.5 +vt -3.5 -0.5 +vt 3.5 -0.5 +vt 3.5 -12.5 +vt -3.5 -12.5 +vt -3.5 5 +vt 3.5 5 +vt 3.5 5 +vt -3.5 5 +vt -3.5 -12.5 +vt 3.5 -12.5 +vt 3.5 -0.5 +vt -3.5 -0.5 +vt -3.5 0.5 +vt 3.5 0.5 +vt 5 0.5 +vt -12.5 0.5 +vt -12.5 -0.5 +vt 5 -0.5 +vn -1 0 0 +vn 0 0 1 +vn 0 -1 0 +vn 0 1 0 +vn 0 0 -1 +vn 1 0 0 +usemtl m_c635d5d5-1aa0-7e8f-f427-c4c1aa38de09 +f 2/1/1 3/2/1 4/3/1 5/4/1 +f 1/5/2 4/6/2 3/7/2 6/8/2 +f 6/9/3 3/10/3 2/11/3 7/12/3 +f 8/13/4 5/14/4 4/15/4 1/16/4 +f 7/17/5 2/18/5 5/19/5 8/20/5 +f 8/21/6 1/22/6 6/23/6 7/24/6 +o entity0_brush1 +v 0.6000000000000001 0.1 -1 +v 0.6000000000000001 0.1 1 +v 0.6000000000000001 1 1 +v 0.6000000000000001 1 -1 +v 0.7000000000000001 1 1 +v 0.7000000000000001 0.1 1 +v 0.7000000000000001 0.1 -1 +v 0.7000000000000001 1 -1 +vt 5 0.5 +vt -5 0.5 +vt -5 5 +vt 5 5 +vt 3.5 5 +vt 3 5 +vt 3 0.5 +vt 3.5 0.5 +vt 3.5 -5 +vt 3 -5 +vt 3 5 +vt 3.5 5 +vt 3.5 5 +vt 3 5 +vt 3 -5 +vt 3.5 -5 +vt 3.5 0.5 +vt 3 0.5 +vt 3 5 +vt 3.5 5 +vt 5 5 +vt -5 5 +vt -5 0.5 +vt 5 0.5 +vn -1 0 0 +vn 0 0 1 +vn 0 -1 0 +vn 0 1 0 +vn 0 0 -1 +vn 1 0 0 +usemtl m_c635d5d5-1aa0-7e8f-f427-c4c1aa38de09 +f 9/25/7 10/26/7 11/27/7 12/28/7 +f 13/29/8 11/30/8 10/31/8 14/32/8 +f 14/33/9 10/34/9 9/35/9 15/36/9 +f 16/37/10 12/38/10 11/39/10 13/40/10 +f 15/41/11 9/42/11 12/43/11 16/44/11 +f 16/45/12 13/46/12 14/47/12 15/48/12 +o entity0_brush2 +v -0.7000000000000001 0.1 -1 +v -0.7000000000000001 0.1 1 +v -0.7000000000000001 1 1 +v -0.7000000000000001 1 -1 +v -0.6000000000000001 1 1 +v -0.6000000000000001 0.1 1 +v -0.6000000000000001 0.1 -1 +v -0.6000000000000001 1 -1 +vt 5 0.5 +vt -5 0.5 +vt -5 5 +vt 5 5 +vt -2.5 5 +vt -3 5 +vt -3 0.5 +vt -2.5 0.5 +vt -2.5 -5 +vt -3 -5 +vt -3 5 +vt -2.5 5 +vt -2.5 5 +vt -3 5 +vt -3 -5 +vt -2.5 -5 +vt -2.5 0.5 +vt -3 0.5 +vt -3 5 +vt -2.5 5 +vt 5 5 +vt -5 5 +vt -5 0.5 +vt 5 0.5 +vn -1 0 0 +vn 0 0 1 +vn 0 -1 0 +vn 0 1 0 +vn 0 0 -1 +vn 1 0 0 +usemtl m_c635d5d5-1aa0-7e8f-f427-c4c1aa38de09 +f 17/49/13 18/50/13 19/51/13 20/52/13 +f 21/53/14 19/54/14 18/55/14 22/56/14 +f 22/57/15 18/58/15 17/59/15 23/60/15 +f 24/61/16 20/62/16 19/63/16 21/64/16 +f 23/65/17 17/66/17 20/67/17 24/68/17 +f 24/69/18 21/70/18 22/71/18 23/72/18 +o entity0_brush3 +v 0.2 0.1 0.9 +v 0.2 0.1 1 +v 0.2 1 1 +v 0.2 1 0.9 +v 0.6000000000000001 1 1 +v 0.6000000000000001 0.1 1 +v 0.6000000000000001 0.1 0.9 +v 0.6000000000000001 1 0.9 +vt -4.5 0.5 +vt -5 0.5 +vt -5 5 +vt -4.5 5 +vt 3 5 +vt 1 5 +vt 1 0.5 +vt 3 0.5 +vt 3 -5 +vt 1 -5 +vt 1 -4.5 +vt 3 -4.5 +vt 3 -4.5 +vt 1 -4.5 +vt 1 -5 +vt 3 -5 +vt 3 0.5 +vt 1 0.5 +vt 1 5 +vt 3 5 +vt -4.5 5 +vt -5 5 +vt -5 0.5 +vt -4.5 0.5 +vn -1 0 0 +vn 0 0 1 +vn 0 -1 0 +vn 0 1 0 +vn 0 0 -1 +vn 1 0 0 +usemtl m_c635d5d5-1aa0-7e8f-f427-c4c1aa38de09 +f 25/73/19 26/74/19 27/75/19 28/76/19 +f 29/77/20 27/78/20 26/79/20 30/80/20 +f 30/81/21 26/82/21 25/83/21 31/84/21 +f 32/85/22 28/86/22 27/87/22 29/88/22 +f 31/89/23 25/90/23 28/91/23 32/92/23 +f 32/93/24 29/94/24 30/95/24 31/96/24 +o entity0_brush4 +v -0.6000000000000001 0.1 0.9 +v -0.6000000000000001 0.1 1 +v -0.6000000000000001 1 1 +v -0.6000000000000001 1 0.9 +v -0.2 1 1 +v -0.2 0.1 1 +v -0.2 0.1 0.9 +v -0.2 1 0.9 +vt -4.5 0.5 +vt -5 0.5 +vt -5 5 +vt -4.5 5 +vt -1 5 +vt -3 5 +vt -3 0.5 +vt -1 0.5 +vt -1 -5 +vt -3 -5 +vt -3 -4.5 +vt -1 -4.5 +vt -1 -4.5 +vt -3 -4.5 +vt -3 -5 +vt -1 -5 +vt -1 0.5 +vt -3 0.5 +vt -3 5 +vt -1 5 +vt -4.5 5 +vt -5 5 +vt -5 0.5 +vt -4.5 0.5 +vn -1 0 0 +vn 0 0 1 +vn 0 -1 0 +vn 0 1 0 +vn 0 0 -1 +vn 1 0 0 +usemtl m_c635d5d5-1aa0-7e8f-f427-c4c1aa38de09 +f 33/97/25 34/98/25 35/99/25 36/100/25 +f 37/101/26 35/102/26 34/103/26 38/104/26 +f 38/105/27 34/106/27 33/107/27 39/108/27 +f 40/109/28 36/110/28 35/111/28 37/112/28 +f 39/113/29 33/114/29 36/115/29 40/116/29 +f 40/117/30 37/118/30 38/119/30 39/120/30 +o entity0_brush5 +v -0.2 0.6000000000000001 0.9 +v -0.2 0.6000000000000001 1 +v -0.2 1 1 +v -0.2 1 0.9 +v 0.2 1 1 +v 0.2 0.6000000000000001 1 +v 0.2 0.6000000000000001 0.9 +v 0.2 1 0.9 +vt -4.5 3 +vt -5 3 +vt -5 5 +vt -4.5 5 +vt 1 5 +vt -1 5 +vt -1 3 +vt 1 3 +vt 1 -5 +vt -1 -5 +vt -1 -4.5 +vt 1 -4.5 +vt 1 -4.5 +vt -1 -4.5 +vt -1 -5 +vt 1 -5 +vt 1 3 +vt -1 3 +vt -1 5 +vt 1 5 +vt -4.5 5 +vt -5 5 +vt -5 3 +vt -4.5 3 +vn -1 0 0 +vn 0 0 1 +vn 0 -1 0 +vn 0 1 0 +vn 0 0 -1 +vn 1 0 0 +usemtl m_c635d5d5-1aa0-7e8f-f427-c4c1aa38de09 +f 41/121/31 42/122/31 43/123/31 44/124/31 +f 45/125/32 43/126/32 42/127/32 46/128/32 +f 46/129/33 42/130/33 41/131/33 47/132/33 +f 48/133/34 44/134/34 43/135/34 45/136/34 +f 47/137/35 41/138/35 44/139/35 48/140/35 +f 48/141/36 45/142/36 46/143/36 47/144/36 +o entity0_brush6 +v -0.6000000000000001 0.1 -1 +v -0.6000000000000001 0.1 -0.9 +v -0.6000000000000001 1 -0.9 +v -0.6000000000000001 1 -1 +v 0.6000000000000001 1 -0.9 +v 0.6000000000000001 0.1 -0.9 +v 0.6000000000000001 0.1 -1 +v 0.6000000000000001 1 -1 +vt 5 0.5 +vt 4.5 0.5 +vt 4.5 5 +vt 5 5 +vt 3 5 +vt -3 5 +vt -3 0.5 +vt 3 0.5 +vt 3 4.5 +vt -3 4.5 +vt -3 5 +vt 3 5 +vt 3 5 +vt -3 5 +vt -3 4.5 +vt 3 4.5 +vt 3 0.5 +vt -3 0.5 +vt -3 5 +vt 3 5 +vt 5 5 +vt 4.5 5 +vt 4.5 0.5 +vt 5 0.5 +vn -1 0 0 +vn 0 0 1 +vn 0 -1 0 +vn 0 1 0 +vn 0 0 -1 +vn 1 0 0 +usemtl m_c635d5d5-1aa0-7e8f-f427-c4c1aa38de09 +f 49/145/37 50/146/37 51/147/37 52/148/37 +f 53/149/38 51/150/38 50/151/38 54/152/38 +f 54/153/39 50/154/39 49/155/39 55/156/39 +f 56/157/40 52/158/40 51/159/40 53/160/40 +f 55/161/41 49/162/41 52/163/41 56/164/41 +f 56/165/42 53/166/42 54/167/42 55/168/42 +o entity0_brush7 +v -0.7000000000000001 1 -1 +v -0.7000000000000001 1 1 +v -0.7000000000000001 1.1 1 +v -0.7000000000000001 1.1 -1 +v 0.7000000000000001 1.1 1 +v 0.7000000000000001 1 1 +v 0.7000000000000001 1 -1 +v 0.7000000000000001 1.1 -1 +vt 5 5 +vt -5 5 +vt -5 5.5 +vt 5 5.5 +vt 3.5 5.5 +vt -3.5 5.5 +vt -3.5 5 +vt 3.5 5 +vt 3.5 -5 +vt -3.5 -5 +vt -3.5 5 +vt 3.5 5 +vt 3.5 5 +vt -3.5 5 +vt -3.5 -5 +vt 3.5 -5 +vt 3.5 5 +vt -3.5 5 +vt -3.5 5.5 +vt 3.5 5.5 +vt 5 5.5 +vt -5 5.5 +vt -5 5 +vt 5 5 +vn -1 0 0 +vn 0 0 1 +vn 0 -1 0 +vn 0 1 0 +vn 0 0 -1 +vn 1 0 0 +usemtl m_c635d5d5-1aa0-7e8f-f427-c4c1aa38de09 +f 57/169/43 58/170/43 59/171/43 60/172/43 +f 61/173/44 59/174/44 58/175/44 62/176/44 +f 62/177/45 58/178/45 57/179/45 63/180/45 +f 64/181/46 60/182/46 59/183/46 61/184/46 +f 63/185/47 57/186/47 60/187/47 64/188/47 +f 64/189/48 61/190/48 62/191/48 63/192/48 +o entity0_brush8 +v -0.5 0.1 1.4000000000000001 +v -0.5 0.1 2.3000000000000003 +v -0.5 0.7000000000000001 2.3000000000000003 +v -0.30000000000000004 0.7000000000000001 2.3000000000000003 +v -0.30000000000000004 0.1 2.3000000000000003 +v -0.30000000000000004 0.1 1.4000000000000001 +vt -7 0.5 +vt -11.5 0.5 +vt -11.5 3.5 +vt -1.5 3.5 +vt -2.5 3.5 +vt -2.5 0.5 +vt -1.5 0.5 +vt -1.5 -11.5 +vt -2.5 -11.5 +vt -2.5 -7 +vt -1.5 -7 +vt -1.5 -7 +vt -2.5 -7 +vt -2.5 -11.5 +vt -1.5 -11.5 +vt -11.5 0.5 +vt -7 0.5 +vt -11.5 3.5 +vn -1 0 0 +vn 0 0 1 +vn 0 -1 0 +vn 0 0.8320502943378437 -0.5547001962252291 +vn 1 0 0 +usemtl m_c635d5d5-1aa0-7e8f-f427-c4c1aa38de09 +f 65/193/49 66/194/49 67/195/49 +f 68/196/50 67/197/50 66/198/50 69/199/50 +f 69/200/51 66/201/51 65/202/51 70/203/51 +f 70/204/52 65/205/52 67/206/52 68/207/52 +f 69/208/53 70/209/53 68/210/53 +o entity0_brush9 +v -0.7000000000000001 0.1 2.3000000000000003 +v -0.7000000000000001 0.1 2.5 +v -0.7000000000000001 0.7000000000000001 2.5 +v -0.7000000000000001 0.7000000000000001 2.3000000000000003 +v -0.30000000000000004 0.7000000000000001 2.5 +v -0.30000000000000004 0.1 2.5 +v -0.30000000000000004 0.1 2.3000000000000003 +v -0.30000000000000004 0.7000000000000001 2.3000000000000003 +vt -11.5 0.5 +vt -12.5 0.5 +vt -12.5 3.5 +vt -11.5 3.5 +vt -1.5 3.5 +vt -3.5 3.5 +vt -3.5 0.5 +vt -1.5 0.5 +vt -1.5 -12.5 +vt -3.5 -12.5 +vt -3.5 -11.5 +vt -1.5 -11.5 +vt -1.5 -11.5 +vt -3.5 -11.5 +vt -3.5 -12.5 +vt -1.5 -12.5 +vt -1.5 0.5 +vt -3.5 0.5 +vt -3.5 3.5 +vt -1.5 3.5 +vt -11.5 3.5 +vt -12.5 3.5 +vt -12.5 0.5 +vt -11.5 0.5 +vn -1 0 0 +vn 0 0 1 +vn 0 -1 0 +vn 0 1 0 +vn 0 0 -1 +vn 1 0 0 +usemtl m_c635d5d5-1aa0-7e8f-f427-c4c1aa38de09 +f 71/211/54 72/212/54 73/213/54 74/214/54 +f 75/215/55 73/216/55 72/217/55 76/218/55 +f 76/219/56 72/220/56 71/221/56 77/222/56 +f 78/223/57 74/224/57 73/225/57 75/226/57 +f 77/227/58 71/228/58 74/229/58 78/230/58 +f 78/231/59 75/232/59 76/233/59 77/234/59 +o entity0_brush10 +v -0.7000000000000001 0.7000000000000001 1 +v -0.7000000000000001 0.7000000000000001 2.3000000000000003 +v -0.7000000000000001 1.1 1 +v -0.5 1.1 1 +v -0.5 0.7000000000000001 2.3000000000000003 +v -0.5 0.7000000000000001 1 +vt 4.5 3.5 +vt 11 3.5 +vt 4.5 5.5 +vt 2.5 4.5 +vt 3.5 4.5 +vt 3.5 11 +vt 2.5 11 +vt 2.5 11 +vt 3.5 11 +vt 3.5 4.5 +vt 2.5 4.5 +vt 2.5 3.5 +vt 3.5 3.5 +vt 3.5 5.5 +vt 2.5 5.5 +vt 11 3.5 +vt 4.5 3.5 +vt 4.5 5.5 +vn -1 0 0 +vn 0 0.9557790087219501 0.2940858488375231 +vn 0 -1 0 +vn 0 0 -1 +vn 1 0 0 +usemtl m_c635d5d5-1aa0-7e8f-f427-c4c1aa38de09 +f 79/235/60 80/236/60 81/237/60 +f 82/238/61 81/239/61 80/240/61 83/241/61 +f 83/242/62 80/243/62 79/244/62 84/245/62 +f 84/246/63 79/247/63 81/248/63 82/249/63 +f 83/250/64 84/251/64 82/252/64 +o entity0_brush11 +v -0.7000000000000001 0.1 1 +v -0.7000000000000001 0.1 2.3000000000000003 +v -0.7000000000000001 0.7000000000000001 2.3000000000000003 +v -0.7000000000000001 0.7000000000000001 1 +v -0.5 0.7000000000000001 2.3000000000000003 +v -0.5 0.1 2.3000000000000003 +v -0.5 0.1 1 +v -0.5 0.7000000000000001 1 +vt -5 0.5 +vt -11.5 0.5 +vt -11.5 3.5 +vt -5 3.5 +vt -2.5 3.5 +vt -3.5 3.5 +vt -3.5 0.5 +vt -2.5 0.5 +vt -2.5 -11.5 +vt -3.5 -11.5 +vt -3.5 -5 +vt -2.5 -5 +vt -2.5 -5 +vt -3.5 -5 +vt -3.5 -11.5 +vt -2.5 -11.5 +vt -2.5 0.5 +vt -3.5 0.5 +vt -3.5 3.5 +vt -2.5 3.5 +vt -5 3.5 +vt -11.5 3.5 +vt -11.5 0.5 +vt -5 0.5 +vn -1 0 0 +vn 0 0 1 +vn 0 -1 0 +vn 0 1 0 +vn 0 0 -1 +vn 1 0 0 +usemtl m_c635d5d5-1aa0-7e8f-f427-c4c1aa38de09 +f 85/253/65 86/254/65 87/255/65 88/256/65 +f 89/257/66 87/258/66 86/259/66 90/260/66 +f 90/261/67 86/262/67 85/263/67 91/264/67 +f 92/265/68 88/266/68 87/267/68 89/268/68 +f 91/269/69 85/270/69 88/271/69 92/272/69 +f 92/273/70 89/274/70 90/275/70 91/276/70 +o entity0_brush12 +v 0.2 0.1 1.1 +v 0.2 0.1 1.2000000000000002 +v 0.2 0.2 1.2000000000000002 +v 0.2 0.2 1.1 +v 0.30000000000000004 0.2 1.2000000000000002 +v 0.30000000000000004 0.1 1.2000000000000002 +v 0.30000000000000004 0.1 1.1 +v 0.30000000000000004 0.2 1.1 +vt -5.5 0.5 +vt -6 0.5 +vt -6 1 +vt -5.5 1 +vt 1.5 1 +vt 1 1 +vt 1 0.5 +vt 1.5 0.5 +vt 1.5 -6 +vt 1 -6 +vt 1 -5.5 +vt 1.5 -5.5 +vt 1.5 -5.5 +vt 1 -5.5 +vt 1 -6 +vt 1.5 -6 +vt 1.5 0.5 +vt 1 0.5 +vt 1 1 +vt 1.5 1 +vt -5.5 1 +vt -6 1 +vt -6 0.5 +vt -5.5 0.5 +vn -1 0 0 +vn 0 0 1 +vn 0 -1 0 +vn 0 1 0 +vn 0 0 -1 +vn 1 0 0 +usemtl m_c635d5d5-1aa0-7e8f-f427-c4c1aa38de09 +f 93/277/71 94/278/71 95/279/71 96/280/71 +f 97/281/72 95/282/72 94/283/72 98/284/72 +f 98/285/73 94/286/73 93/287/73 99/288/73 +f 100/289/74 96/290/74 95/291/74 97/292/74 +f 99/293/75 93/294/75 96/295/75 100/296/75 +f 100/297/76 97/298/76 98/299/76 99/300/76 +o entity0_brush13 +v 0.2 0.1 1.3 +v 0.2 0.1 1.4000000000000001 +v 0.2 0.30000000000000004 1.4000000000000001 +v 0.2 0.30000000000000004 1.3 +v 0.30000000000000004 0.30000000000000004 1.4000000000000001 +v 0.30000000000000004 0.1 1.4000000000000001 +v 0.30000000000000004 0.1 1.3 +v 0.30000000000000004 0.30000000000000004 1.3 +vt -6.5 0.5 +vt -7 0.5 +vt -7 1.5 +vt -6.5 1.5 +vt 1.5 1.5 +vt 1 1.5 +vt 1 0.5 +vt 1.5 0.5 +vt 1.5 -7 +vt 1 -7 +vt 1 -6.5 +vt 1.5 -6.5 +vt 1.5 -6.5 +vt 1 -6.5 +vt 1 -7 +vt 1.5 -7 +vt 1.5 0.5 +vt 1 0.5 +vt 1 1.5 +vt 1.5 1.5 +vt -6.5 1.5 +vt -7 1.5 +vt -7 0.5 +vt -6.5 0.5 +vn -1 0 0 +vn 0 0 1 +vn 0 -1 0 +vn 0 1 0 +vn 0 0 -1 +vn 1 0 0 +usemtl m_c635d5d5-1aa0-7e8f-f427-c4c1aa38de09 +f 101/301/77 102/302/77 103/303/77 104/304/77 +f 105/305/78 103/306/78 102/307/78 106/308/78 +f 106/309/79 102/310/79 101/311/79 107/312/79 +f 108/313/80 104/314/80 103/315/80 105/316/80 +f 107/317/81 101/318/81 104/319/81 108/320/81 +f 108/321/82 105/322/82 106/323/82 107/324/82 +o entity0_brush14 +v 0.2 0.1 1.5 +v 0.2 0.1 1.6 +v 0.2 0.5 1.6 +v 0.2 0.5 1.5 +v 0.30000000000000004 0.5 1.6 +v 0.30000000000000004 0.1 1.6 +v 0.30000000000000004 0.1 1.5 +v 0.30000000000000004 0.5 1.5 +vt -7.5 0.5 +vt -8 0.5 +vt -8 2.5 +vt -7.5 2.5 +vt 1.5 2.5 +vt 1 2.5 +vt 1 0.5 +vt 1.5 0.5 +vt 1.5 -8 +vt 1 -8 +vt 1 -7.5 +vt 1.5 -7.5 +vt 1.5 -7.5 +vt 1 -7.5 +vt 1 -8 +vt 1.5 -8 +vt 1.5 0.5 +vt 1 0.5 +vt 1 2.5 +vt 1.5 2.5 +vt -7.5 2.5 +vt -8 2.5 +vt -8 0.5 +vt -7.5 0.5 +vn -1 0 0 +vn 0 0 1 +vn 0 -1 0 +vn 0 1 0 +vn 0 0 -1 +vn 1 0 0 +usemtl m_c635d5d5-1aa0-7e8f-f427-c4c1aa38de09 +f 109/325/83 110/326/83 111/327/83 112/328/83 +f 113/329/84 111/330/84 110/331/84 114/332/84 +f 114/333/85 110/334/85 109/335/85 115/336/85 +f 116/337/86 112/338/86 111/339/86 113/340/86 +f 115/341/87 109/342/87 112/343/87 116/344/87 +f 116/345/88 113/346/88 114/347/88 115/348/88 \ No newline at end of file diff --git a/assets/models/tex.png b/assets/models/tex.png new file mode 100644 index 0000000..0bd691e Binary files /dev/null and b/assets/models/tex.png differ diff --git a/assets/models/unnamed.mtl b/assets/models/unnamed.mtl new file mode 100644 index 0000000..0bfee96 --- /dev/null +++ b/assets/models/unnamed.mtl @@ -0,0 +1,3 @@ +newmtl __TB_empty +map_Kd tex.png + diff --git a/assets/models/unnamed.obj b/assets/models/unnamed.obj new file mode 100644 index 0000000..e624fb5 --- /dev/null +++ b/assets/models/unnamed.obj @@ -0,0 +1,442 @@ +mtllib unnamed.mtl +# vertices +v -112 -16 -160 +v -112 -16 400 +v -112 16 400 +v -112 16 -160 +v 112 16 400 +v 112 -16 400 +v 112 -16 -160 +v 112 16 -160 +v 96 16 -160 +v 96 16 160 +v 96 160 160 +v 96 160 -160 +v 112 160 160 +v 112 16 160 +v 112 16 -160 +v 112 160 -160 +v -112 16 -160 +v -112 16 160 +v -112 160 160 +v -112 160 -160 +v -96 160 160 +v -96 16 160 +v -96 16 -160 +v -96 160 -160 +v 32 16 144 +v 32 16 160 +v 32 160 160 +v 32 160 144 +v 96 160 160 +v 96 16 160 +v 96 16 144 +v 96 160 144 +v -96 16 144 +v -96 16 160 +v -96 160 160 +v -96 160 144 +v -32 160 160 +v -32 16 160 +v -32 16 144 +v -32 160 144 +v -32 96 144 +v -32 96 160 +v -32 160 160 +v -32 160 144 +v 32 160 160 +v 32 96 160 +v 32 96 144 +v 32 160 144 +v -96 16 -160 +v -96 16 -144 +v -96 160 -144 +v -96 160 -160 +v 96 160 -144 +v 96 16 -144 +v 96 16 -160 +v 96 160 -160 +v -112 160 -160 +v -112 160 160 +v -112 176 160 +v -112 176 -160 +v 112 176 160 +v 112 160 160 +v 112 160 -160 +v 112 176 -160 +v -80 16 224 +v -80 16 368 +v -80 112 368 +v -48 112 368 +v -48 16 368 +v -48 16 224 +v -112 16 368 +v -112 16 400 +v -112 112 400 +v -112 112 368 +v -48 112 400 +v -48 16 400 +v -48 16 368 +v -48 112 368 +v -112 112 160 +v -112 112 368 +v -112 176 160 +v -80 176 160 +v -80 112 368 +v -80 112 160 +v -112 16 160 +v -112 16 368 +v -112 112 368 +v -112 112 160 +v -80 112 368 +v -80 16 368 +v -80 16 160 +v -80 112 160 +v 32 16 176 +v 32 16 192 +v 32 32 192 +v 32 32 176 +v 48 32 192 +v 48 16 192 +v 48 16 176 +v 48 32 176 +v 32 16 208 +v 32 16 224 +v 32 48 224 +v 32 48 208 +v 48 48 224 +v 48 16 224 +v 48 16 208 +v 48 48 208 +v 32 16 240 +v 32 16 256 +v 32 80 256 +v 32 80 240 +v 48 80 256 +v 48 16 256 +v 48 16 240 +v 48 80 240 + +# texture coordinates +vt 5 -0.5 +vt -12.5 -0.5 +vt -12.5 0.5 +vt 5 0.5 +vt 3.5 0.5 +vt -3.5 0.5 +vt -3.5 -0.5 +vt 3.5 -0.5 +vt 3.5 -12.5 +vt -3.5 -12.5 +vt -3.5 5 +vt 3.5 5 +vt -5 0.5 +vt -5 5 +vt 5 5 +vt 3 5 +vt 3 0.5 +vt 3.5 -5 +vt 3 -5 +vt -2.5 5 +vt -3 5 +vt -3 0.5 +vt -2.5 0.5 +vt -2.5 -5 +vt -3 -5 +vt -4.5 0.5 +vt -4.5 5 +vt 1 5 +vt 1 0.5 +vt 1 -5 +vt 1 -4.5 +vt 3 -4.5 +vt -1 5 +vt -1 0.5 +vt -1 -5 +vt -3 -4.5 +vt -1 -4.5 +vt -4.5 3 +vt -5 3 +vt -1 3 +vt 1 3 +vt 4.5 0.5 +vt 4.5 5 +vt 3 4.5 +vt -3 4.5 +vt -5 5.5 +vt 5 5.5 +vt 3.5 5.5 +vt -3.5 5.5 +vt -3.5 -5 +vt -7 0.5 +vt -11.5 0.5 +vt -11.5 3.5 +vt -1.5 3.5 +vt -2.5 3.5 +vt -1.5 0.5 +vt -1.5 -11.5 +vt -2.5 -11.5 +vt -2.5 -7 +vt -1.5 -7 +vt -12.5 3.5 +vt -3.5 3.5 +vt -1.5 -12.5 +vt -3.5 -11.5 +vt 4.5 3.5 +vt 11 3.5 +vt 4.5 5.5 +vt 2.5 4.5 +vt 3.5 4.5 +vt 3.5 11 +vt 2.5 11 +vt 2.5 3.5 +vt 3.5 3.5 +vt 2.5 5.5 +vt -5 3.5 +vt -5.5 0.5 +vt -6 0.5 +vt -6 1 +vt -5.5 1 +vt 1.5 1 +vt 1 1 +vt 1.5 0.5 +vt 1.5 -6 +vt 1 -6 +vt 1 -5.5 +vt 1.5 -5.5 +vt -6.5 0.5 +vt -7 1.5 +vt -6.5 1.5 +vt 1.5 1.5 +vt 1 1.5 +vt 1.5 -7 +vt 1 -7 +vt 1 -6.5 +vt 1.5 -6.5 +vt -7.5 0.5 +vt -8 0.5 +vt -8 2.5 +vt -7.5 2.5 +vt 1.5 2.5 +vt 1 2.5 +vt 1.5 -8 +vt 1 -8 +vt 1 -7.5 +vt 1.5 -7.5 + +# normals +vn -1 0 0 +vn 0 0 1 +vn 0 -1 -0 +vn -0 1 -0 +vn 0 -0 -1 +vn 1 0 0 +vn -0 0.8320502943378436 -0.554700196225229 +vn 0 0.95577900872195 0.2940858488375231 + +o entity0_brush0 +usemtl __TB_empty +f 1/1/1 2/2/1 3/3/1 4/4/1 +usemtl __TB_empty +f 5/5/2 3/6/2 2/7/2 6/8/2 +usemtl __TB_empty +f 6/9/3 2/10/3 1/11/3 7/12/3 +usemtl __TB_empty +f 8/12/4 4/11/4 3/10/4 5/9/4 +usemtl __TB_empty +f 7/8/5 1/7/5 4/6/5 8/5/5 +usemtl __TB_empty +f 8/4/6 5/3/6 6/2/6 7/1/6 + +o entity0_brush1 +usemtl __TB_empty +f 9/4/1 10/13/1 11/14/1 12/15/1 +usemtl __TB_empty +f 13/12/2 11/16/2 10/17/2 14/5/2 +usemtl __TB_empty +f 14/18/3 10/19/3 9/16/3 15/12/3 +usemtl __TB_empty +f 16/12/4 12/16/4 11/19/4 13/18/4 +usemtl __TB_empty +f 15/5/5 9/17/5 12/16/5 16/12/5 +usemtl __TB_empty +f 16/15/6 13/14/6 14/13/6 15/4/6 + +o entity0_brush2 +usemtl __TB_empty +f 17/4/1 18/13/1 19/14/1 20/15/1 +usemtl __TB_empty +f 21/20/2 19/21/2 18/22/2 22/23/2 +usemtl __TB_empty +f 22/24/3 18/25/3 17/21/3 23/20/3 +usemtl __TB_empty +f 24/20/4 20/21/4 19/25/4 21/24/4 +usemtl __TB_empty +f 23/23/5 17/22/5 20/21/5 24/20/5 +usemtl __TB_empty +f 24/15/6 21/14/6 22/13/6 23/4/6 + +o entity0_brush3 +usemtl __TB_empty +f 25/26/1 26/13/1 27/14/1 28/27/1 +usemtl __TB_empty +f 29/16/2 27/28/2 26/29/2 30/17/2 +usemtl __TB_empty +f 30/19/3 26/30/3 25/31/3 31/32/3 +usemtl __TB_empty +f 32/32/4 28/31/4 27/30/4 29/19/4 +usemtl __TB_empty +f 31/17/5 25/29/5 28/28/5 32/16/5 +usemtl __TB_empty +f 32/27/6 29/14/6 30/13/6 31/26/6 + +o entity0_brush4 +usemtl __TB_empty +f 33/26/1 34/13/1 35/14/1 36/27/1 +usemtl __TB_empty +f 37/33/2 35/21/2 34/22/2 38/34/2 +usemtl __TB_empty +f 38/35/3 34/25/3 33/36/3 39/37/3 +usemtl __TB_empty +f 40/37/4 36/36/4 35/25/4 37/35/4 +usemtl __TB_empty +f 39/34/5 33/22/5 36/21/5 40/33/5 +usemtl __TB_empty +f 40/27/6 37/14/6 38/13/6 39/26/6 + +o entity0_brush5 +usemtl __TB_empty +f 41/38/1 42/39/1 43/14/1 44/27/1 +usemtl __TB_empty +f 45/28/2 43/33/2 42/40/2 46/41/2 +usemtl __TB_empty +f 46/30/3 42/35/3 41/37/3 47/31/3 +usemtl __TB_empty +f 48/31/4 44/37/4 43/35/4 45/30/4 +usemtl __TB_empty +f 47/41/5 41/40/5 44/33/5 48/28/5 +usemtl __TB_empty +f 48/27/6 45/14/6 46/39/6 47/38/6 + +o entity0_brush6 +usemtl __TB_empty +f 49/4/1 50/42/1 51/43/1 52/15/1 +usemtl __TB_empty +f 53/16/2 51/21/2 50/22/2 54/17/2 +usemtl __TB_empty +f 54/44/3 50/45/3 49/21/3 55/16/3 +usemtl __TB_empty +f 56/16/4 52/21/4 51/45/4 53/44/4 +usemtl __TB_empty +f 55/17/5 49/22/5 52/21/5 56/16/5 +usemtl __TB_empty +f 56/15/6 53/43/6 54/42/6 55/4/6 + +o entity0_brush7 +usemtl __TB_empty +f 57/15/1 58/14/1 59/46/1 60/47/1 +usemtl __TB_empty +f 61/48/2 59/49/2 58/11/2 62/12/2 +usemtl __TB_empty +f 62/18/3 58/50/3 57/11/3 63/12/3 +usemtl __TB_empty +f 64/12/4 60/11/4 59/50/4 61/18/4 +usemtl __TB_empty +f 63/12/5 57/11/5 60/49/5 64/48/5 +usemtl __TB_empty +f 64/47/6 61/46/6 62/14/6 63/15/6 + +o entity0_brush8 +usemtl __TB_empty +f 65/51/1 66/52/1 67/53/1 +usemtl __TB_empty +f 68/54/2 67/55/2 66/23/2 69/56/2 +usemtl __TB_empty +f 69/57/3 66/58/3 65/59/3 70/60/3 +usemtl __TB_empty +f 70/60/7 65/59/7 67/58/7 68/57/7 +usemtl __TB_empty +f 69/52/6 70/51/6 68/53/6 + +o entity0_brush9 +usemtl __TB_empty +f 71/52/1 72/3/1 73/61/1 74/53/1 +usemtl __TB_empty +f 75/54/2 73/62/2 72/6/2 76/56/2 +usemtl __TB_empty +f 76/63/3 72/10/3 71/64/3 77/57/3 +usemtl __TB_empty +f 78/57/4 74/64/4 73/10/4 75/63/4 +usemtl __TB_empty +f 77/56/5 71/6/5 74/62/5 78/54/5 +usemtl __TB_empty +f 78/53/6 75/61/6 76/3/6 77/52/6 + +o entity0_brush10 +usemtl __TB_empty +f 79/65/1 80/66/1 81/67/1 +usemtl __TB_empty +f 82/68/8 81/69/8 80/70/8 83/71/8 +usemtl __TB_empty +f 83/71/3 80/70/3 79/69/3 84/68/3 +usemtl __TB_empty +f 84/72/5 79/73/5 81/48/5 82/74/5 +usemtl __TB_empty +f 83/66/6 84/65/6 82/67/6 + +o entity0_brush11 +usemtl __TB_empty +f 85/13/1 86/52/1 87/53/1 88/75/1 +usemtl __TB_empty +f 89/55/2 87/62/2 86/6/2 90/23/2 +usemtl __TB_empty +f 90/58/3 86/64/3 85/50/3 91/24/3 +usemtl __TB_empty +f 92/24/4 88/50/4 87/64/4 89/58/4 +usemtl __TB_empty +f 91/23/5 85/6/5 88/62/5 92/55/5 +usemtl __TB_empty +f 92/75/6 89/53/6 90/52/6 91/13/6 + +o entity0_brush12 +usemtl __TB_empty +f 93/76/1 94/77/1 95/78/1 96/79/1 +usemtl __TB_empty +f 97/80/2 95/81/2 94/29/2 98/82/2 +usemtl __TB_empty +f 98/83/3 94/84/3 93/85/3 99/86/3 +usemtl __TB_empty +f 100/86/4 96/85/4 95/84/4 97/83/4 +usemtl __TB_empty +f 99/82/5 93/29/5 96/81/5 100/80/5 +usemtl __TB_empty +f 100/79/6 97/78/6 98/77/6 99/76/6 + +o entity0_brush13 +usemtl __TB_empty +f 101/87/1 102/51/1 103/88/1 104/89/1 +usemtl __TB_empty +f 105/90/2 103/91/2 102/29/2 106/82/2 +usemtl __TB_empty +f 106/92/3 102/93/3 101/94/3 107/95/3 +usemtl __TB_empty +f 108/95/4 104/94/4 103/93/4 105/92/4 +usemtl __TB_empty +f 107/82/5 101/29/5 104/91/5 108/90/5 +usemtl __TB_empty +f 108/89/6 105/88/6 106/51/6 107/87/6 + +o entity0_brush14 +usemtl __TB_empty +f 109/96/1 110/97/1 111/98/1 112/99/1 +usemtl __TB_empty +f 113/100/2 111/101/2 110/29/2 114/82/2 +usemtl __TB_empty +f 114/102/3 110/103/3 109/104/3 115/105/3 +usemtl __TB_empty +f 116/105/4 112/104/4 111/103/4 113/102/4 +usemtl __TB_empty +f 115/82/5 109/29/5 112/101/5 116/100/5 +usemtl __TB_empty +f 116/99/6 113/98/6 114/97/6 115/96/6 + diff --git a/assets/models/unnamed2.obj b/assets/models/unnamed2.obj new file mode 100644 index 0000000..aaab565 --- /dev/null +++ b/assets/models/unnamed2.obj @@ -0,0 +1,674 @@ +# Made in Blockbench 4.12.1 +mtllib unnamed2.mtl + +o unknown +o entity0_brush0 +v -7 -1 -10 +v -7 -1 25 +v -7 1 25 +v -7 1 -10 +v 7 1 25 +v 7 -1 25 +v 7 -1 -10 +v 7 1 -10 +vt 5 -0.5 +vt -12.5 -0.5 +vt -12.5 0.5 +vt 5 0.5 +vt 3.5 0.5 +vt -3.5 0.5 +vt -3.5 -0.5 +vt 3.5 -0.5 +vt 3.5 -12.5 +vt -3.5 -12.5 +vt -3.5 5 +vt 3.5 5 +vt 3.5 5 +vt -3.5 5 +vt -3.5 -12.5 +vt 3.5 -12.5 +vt 3.5 -0.5 +vt -3.5 -0.5 +vt -3.5 0.5 +vt 3.5 0.5 +vt 5 0.5 +vt -12.5 0.5 +vt -12.5 -0.5 +vt 5 -0.5 +vn -1 0 0 +vn 0 0 1 +vn 0 -1 0 +vn 0 1 0 +vn 0 0 -1 +vn 1 0 0 +usemtl m_d3225dde-a8e4-9d3a-05cb-656a25ac9643 +f 1/1/1 2/2/1 3/3/1 4/4/1 +f 5/5/2 3/6/2 2/7/2 6/8/2 +f 6/9/3 2/10/3 1/11/3 7/12/3 +f 8/13/4 4/14/4 3/15/4 5/16/4 +f 7/17/5 1/18/5 4/19/5 8/20/5 +f 8/21/6 5/22/6 6/23/6 7/24/6 +o entity0_brush1 +v 6 1 -10 +v 6 1 10 +v 6 10 10 +v 6 10 -10 +v 7 10 10 +v 7 1 10 +v 7 1 -10 +v 7 10 -10 +vt 5 0.5 +vt -5 0.5 +vt -5 5 +vt 5 5 +vt 3.5 5 +vt 3 5 +vt 3 0.5 +vt 3.5 0.5 +vt 3.5 -5 +vt 3 -5 +vt 3 5 +vt 3.5 5 +vt 3.5 5 +vt 3 5 +vt 3 -5 +vt 3.5 -5 +vt 3.5 0.5 +vt 3 0.5 +vt 3 5 +vt 3.5 5 +vt 5 5 +vt -5 5 +vt -5 0.5 +vt 5 0.5 +vn -1 0 0 +vn 0 0 1 +vn 0 -1 0 +vn 0 1 0 +vn 0 0 -1 +vn 1 0 0 +usemtl m_d3225dde-a8e4-9d3a-05cb-656a25ac9643 +f 9/25/7 10/26/7 11/27/7 12/28/7 +f 13/29/8 11/30/8 10/31/8 14/32/8 +f 14/33/9 10/34/9 9/35/9 15/36/9 +f 16/37/10 12/38/10 11/39/10 13/40/10 +f 15/41/11 9/42/11 12/43/11 16/44/11 +f 16/45/12 13/46/12 14/47/12 15/48/12 +o entity0_brush2 +v -7 1 -10 +v -7 1 10 +v -7 10 10 +v -7 10 -10 +v -6 10 10 +v -6 1 10 +v -6 1 -10 +v -6 10 -10 +vt 5 0.5 +vt -5 0.5 +vt -5 5 +vt 5 5 +vt -2.5 5 +vt -3 5 +vt -3 0.5 +vt -2.5 0.5 +vt -2.5 -5 +vt -3 -5 +vt -3 5 +vt -2.5 5 +vt -2.5 5 +vt -3 5 +vt -3 -5 +vt -2.5 -5 +vt -2.5 0.5 +vt -3 0.5 +vt -3 5 +vt -2.5 5 +vt 5 5 +vt -5 5 +vt -5 0.5 +vt 5 0.5 +vn -1 0 0 +vn 0 0 1 +vn 0 -1 0 +vn 0 1 0 +vn 0 0 -1 +vn 1 0 0 +usemtl m_d3225dde-a8e4-9d3a-05cb-656a25ac9643 +f 17/49/13 18/50/13 19/51/13 20/52/13 +f 21/53/14 19/54/14 18/55/14 22/56/14 +f 22/57/15 18/58/15 17/59/15 23/60/15 +f 24/61/16 20/62/16 19/63/16 21/64/16 +f 23/65/17 17/66/17 20/67/17 24/68/17 +f 24/69/18 21/70/18 22/71/18 23/72/18 +o entity0_brush3 +v 2 1 9 +v 2 1 10 +v 2 10 10 +v 2 10 9 +v 6 10 10 +v 6 1 10 +v 6 1 9 +v 6 10 9 +vt -4.5 0.5 +vt -5 0.5 +vt -5 5 +vt -4.5 5 +vt 3 5 +vt 1 5 +vt 1 0.5 +vt 3 0.5 +vt 3 -5 +vt 1 -5 +vt 1 -4.5 +vt 3 -4.5 +vt 3 -4.5 +vt 1 -4.5 +vt 1 -5 +vt 3 -5 +vt 3 0.5 +vt 1 0.5 +vt 1 5 +vt 3 5 +vt -4.5 5 +vt -5 5 +vt -5 0.5 +vt -4.5 0.5 +vn -1 0 0 +vn 0 0 1 +vn 0 -1 0 +vn 0 1 0 +vn 0 0 -1 +vn 1 0 0 +usemtl m_d3225dde-a8e4-9d3a-05cb-656a25ac9643 +f 25/73/19 26/74/19 27/75/19 28/76/19 +f 29/77/20 27/78/20 26/79/20 30/80/20 +f 30/81/21 26/82/21 25/83/21 31/84/21 +f 32/85/22 28/86/22 27/87/22 29/88/22 +f 31/89/23 25/90/23 28/91/23 32/92/23 +f 32/93/24 29/94/24 30/95/24 31/96/24 +o entity0_brush4 +v -6 1 9 +v -6 1 10 +v -6 10 10 +v -6 10 9 +v -2 10 10 +v -2 1 10 +v -2 1 9 +v -2 10 9 +vt -4.5 0.5 +vt -5 0.5 +vt -5 5 +vt -4.5 5 +vt -1 5 +vt -3 5 +vt -3 0.5 +vt -1 0.5 +vt -1 -5 +vt -3 -5 +vt -3 -4.5 +vt -1 -4.5 +vt -1 -4.5 +vt -3 -4.5 +vt -3 -5 +vt -1 -5 +vt -1 0.5 +vt -3 0.5 +vt -3 5 +vt -1 5 +vt -4.5 5 +vt -5 5 +vt -5 0.5 +vt -4.5 0.5 +vn -1 0 0 +vn 0 0 1 +vn 0 -1 0 +vn 0 1 0 +vn 0 0 -1 +vn 1 0 0 +usemtl m_d3225dde-a8e4-9d3a-05cb-656a25ac9643 +f 33/97/25 34/98/25 35/99/25 36/100/25 +f 37/101/26 35/102/26 34/103/26 38/104/26 +f 38/105/27 34/106/27 33/107/27 39/108/27 +f 40/109/28 36/110/28 35/111/28 37/112/28 +f 39/113/29 33/114/29 36/115/29 40/116/29 +f 40/117/30 37/118/30 38/119/30 39/120/30 +o entity0_brush5 +v -2 6 9 +v -2 6 10 +v -2 10 10 +v -2 10 9 +v 2 10 10 +v 2 6 10 +v 2 6 9 +v 2 10 9 +vt -4.5 3 +vt -5 3 +vt -5 5 +vt -4.5 5 +vt 1 5 +vt -1 5 +vt -1 3 +vt 1 3 +vt 1 -5 +vt -1 -5 +vt -1 -4.5 +vt 1 -4.5 +vt 1 -4.5 +vt -1 -4.5 +vt -1 -5 +vt 1 -5 +vt 1 3 +vt -1 3 +vt -1 5 +vt 1 5 +vt -4.5 5 +vt -5 5 +vt -5 3 +vt -4.5 3 +vn -1 0 0 +vn 0 0 1 +vn 0 -1 0 +vn 0 1 0 +vn 0 0 -1 +vn 1 0 0 +usemtl m_d3225dde-a8e4-9d3a-05cb-656a25ac9643 +f 41/121/31 42/122/31 43/123/31 44/124/31 +f 45/125/32 43/126/32 42/127/32 46/128/32 +f 46/129/33 42/130/33 41/131/33 47/132/33 +f 48/133/34 44/134/34 43/135/34 45/136/34 +f 47/137/35 41/138/35 44/139/35 48/140/35 +f 48/141/36 45/142/36 46/143/36 47/144/36 +o entity0_brush6 +v -6 1 -10 +v -6 1 -9 +v -6 10 -9 +v -6 10 -10 +v 6 10 -9 +v 6 1 -9 +v 6 1 -10 +v 6 10 -10 +vt 5 0.5 +vt 4.5 0.5 +vt 4.5 5 +vt 5 5 +vt 3 5 +vt -3 5 +vt -3 0.5 +vt 3 0.5 +vt 3 4.5 +vt -3 4.5 +vt -3 5 +vt 3 5 +vt 3 5 +vt -3 5 +vt -3 4.5 +vt 3 4.5 +vt 3 0.5 +vt -3 0.5 +vt -3 5 +vt 3 5 +vt 5 5 +vt 4.5 5 +vt 4.5 0.5 +vt 5 0.5 +vn -1 0 0 +vn 0 0 1 +vn 0 -1 0 +vn 0 1 0 +vn 0 0 -1 +vn 1 0 0 +usemtl m_d3225dde-a8e4-9d3a-05cb-656a25ac9643 +f 49/145/37 50/146/37 51/147/37 52/148/37 +f 53/149/38 51/150/38 50/151/38 54/152/38 +f 54/153/39 50/154/39 49/155/39 55/156/39 +f 56/157/40 52/158/40 51/159/40 53/160/40 +f 55/161/41 49/162/41 52/163/41 56/164/41 +f 56/165/42 53/166/42 54/167/42 55/168/42 +o entity0_brush7 +v -7 10 -10 +v -7 10 10 +v -7 11 10 +v -7 11 -10 +v 7 11 10 +v 7 10 10 +v 7 10 -10 +v 7 11 -10 +vt 5 5 +vt -5 5 +vt -5 5.5 +vt 5 5.5 +vt 3.5 5.5 +vt -3.5 5.5 +vt -3.5 5 +vt 3.5 5 +vt 3.5 -5 +vt -3.5 -5 +vt -3.5 5 +vt 3.5 5 +vt 3.5 5 +vt -3.5 5 +vt -3.5 -5 +vt 3.5 -5 +vt 3.5 5 +vt -3.5 5 +vt -3.5 5.5 +vt 3.5 5.5 +vt 5 5.5 +vt -5 5.5 +vt -5 5 +vt 5 5 +vn -1 0 0 +vn 0 0 1 +vn 0 -1 0 +vn 0 1 0 +vn 0 0 -1 +vn 1 0 0 +usemtl m_d3225dde-a8e4-9d3a-05cb-656a25ac9643 +f 57/169/43 58/170/43 59/171/43 60/172/43 +f 61/173/44 59/174/44 58/175/44 62/176/44 +f 62/177/45 58/178/45 57/179/45 63/180/45 +f 64/181/46 60/182/46 59/183/46 61/184/46 +f 63/185/47 57/186/47 60/187/47 64/188/47 +f 64/189/48 61/190/48 62/191/48 63/192/48 +o entity0_brush8 +v -5 1 14 +v -5 1 23 +v -5 7 23 +v -3 7 23 +v -3 1 23 +v -3 1 14 +vt -7 0.5 +vt -11.5 0.5 +vt -11.5 3.5 +vt -1.5 3.5 +vt -2.5 3.5 +vt -2.5 0.5 +vt -1.5 0.5 +vt -1.5 -11.5 +vt -2.5 -11.5 +vt -2.5 -7 +vt -1.5 -7 +vt -1.5 -7 +vt -2.5 -7 +vt -2.5 -11.5 +vt -1.5 -11.5 +vt -11.5 0.5 +vt -7 0.5 +vt -11.5 3.5 +vn -1 0 0 +vn 0 0 1 +vn 0 -1 0 +vn 0 0.8320502943378438 -0.5547001962252291 +vn 1 0 0 +usemtl m_d3225dde-a8e4-9d3a-05cb-656a25ac9643 +f 65/193/49 66/194/49 67/195/49 +f 68/196/50 67/197/50 66/198/50 69/199/50 +f 69/200/51 66/201/51 65/202/51 70/203/51 +f 70/204/52 65/205/52 67/206/52 68/207/52 +f 69/208/53 70/209/53 68/210/53 +o entity0_brush9 +v -7 1 23 +v -7 1 25 +v -7 7 25 +v -7 7 23 +v -3 7 25 +v -3 1 25 +v -3 1 23 +v -3 7 23 +vt -11.5 0.5 +vt -12.5 0.5 +vt -12.5 3.5 +vt -11.5 3.5 +vt -1.5 3.5 +vt -3.5 3.5 +vt -3.5 0.5 +vt -1.5 0.5 +vt -1.5 -12.5 +vt -3.5 -12.5 +vt -3.5 -11.5 +vt -1.5 -11.5 +vt -1.5 -11.5 +vt -3.5 -11.5 +vt -3.5 -12.5 +vt -1.5 -12.5 +vt -1.5 0.5 +vt -3.5 0.5 +vt -3.5 3.5 +vt -1.5 3.5 +vt -11.5 3.5 +vt -12.5 3.5 +vt -12.5 0.5 +vt -11.5 0.5 +vn -1 0 0 +vn 0 0 1 +vn 0 -1 0 +vn 0 1 0 +vn 0 0 -1 +vn 1 0 0 +usemtl m_d3225dde-a8e4-9d3a-05cb-656a25ac9643 +f 71/211/54 72/212/54 73/213/54 74/214/54 +f 75/215/55 73/216/55 72/217/55 76/218/55 +f 76/219/56 72/220/56 71/221/56 77/222/56 +f 78/223/57 74/224/57 73/225/57 75/226/57 +f 77/227/58 71/228/58 74/229/58 78/230/58 +f 78/231/59 75/232/59 76/233/59 77/234/59 +o entity0_brush10 +v -7 7 10 +v -7 7 23 +v -7 11 10 +v -5 11 10 +v -5 7 23 +v -5 7 10 +vt 4.5 3.5 +vt 11 3.5 +vt 4.5 5.5 +vt 2.5 4.5 +vt 3.5 4.5 +vt 3.5 11 +vt 2.5 11 +vt 2.5 11 +vt 3.5 11 +vt 3.5 4.5 +vt 2.5 4.5 +vt 2.5 3.5 +vt 3.5 3.5 +vt 3.5 5.5 +vt 2.5 5.5 +vt 11 3.5 +vt 4.5 3.5 +vt 4.5 5.5 +vn -1 0 0 +vn 0 0.9557790087219502 0.29408584883752314 +vn 0 -1 0 +vn 0 0 -1 +vn 1 0 0 +usemtl m_d3225dde-a8e4-9d3a-05cb-656a25ac9643 +f 79/235/60 80/236/60 81/237/60 +f 82/238/61 81/239/61 80/240/61 83/241/61 +f 83/242/62 80/243/62 79/244/62 84/245/62 +f 84/246/63 79/247/63 81/248/63 82/249/63 +f 83/250/64 84/251/64 82/252/64 +o entity0_brush11 +v -7 1 10 +v -7 1 23 +v -7 7 23 +v -7 7 10 +v -5 7 23 +v -5 1 23 +v -5 1 10 +v -5 7 10 +vt -5 0.5 +vt -11.5 0.5 +vt -11.5 3.5 +vt -5 3.5 +vt -2.5 3.5 +vt -3.5 3.5 +vt -3.5 0.5 +vt -2.5 0.5 +vt -2.5 -11.5 +vt -3.5 -11.5 +vt -3.5 -5 +vt -2.5 -5 +vt -2.5 -5 +vt -3.5 -5 +vt -3.5 -11.5 +vt -2.5 -11.5 +vt -2.5 0.5 +vt -3.5 0.5 +vt -3.5 3.5 +vt -2.5 3.5 +vt -5 3.5 +vt -11.5 3.5 +vt -11.5 0.5 +vt -5 0.5 +vn -1 0 0 +vn 0 0 1 +vn 0 -1 0 +vn 0 1 0 +vn 0 0 -1 +vn 1 0 0 +usemtl m_d3225dde-a8e4-9d3a-05cb-656a25ac9643 +f 85/253/65 86/254/65 87/255/65 88/256/65 +f 89/257/66 87/258/66 86/259/66 90/260/66 +f 90/261/67 86/262/67 85/263/67 91/264/67 +f 92/265/68 88/266/68 87/267/68 89/268/68 +f 91/269/69 85/270/69 88/271/69 92/272/69 +f 92/273/70 89/274/70 90/275/70 91/276/70 +o entity0_brush12 +v 2 1 11 +v 2 1 12 +v 2 2 12 +v 2 2 11 +v 3 2 12 +v 3 1 12 +v 3 1 11 +v 3 2 11 +vt -5.5 0.5 +vt -6 0.5 +vt -6 1 +vt -5.5 1 +vt 1.5 1 +vt 1 1 +vt 1 0.5 +vt 1.5 0.5 +vt 1.5 -6 +vt 1 -6 +vt 1 -5.5 +vt 1.5 -5.5 +vt 1.5 -5.5 +vt 1 -5.5 +vt 1 -6 +vt 1.5 -6 +vt 1.5 0.5 +vt 1 0.5 +vt 1 1 +vt 1.5 1 +vt -5.5 1 +vt -6 1 +vt -6 0.5 +vt -5.5 0.5 +vn -1 0 0 +vn 0 0 1 +vn 0 -1 0 +vn 0 1 0 +vn 0 0 -1 +vn 1 0 0 +usemtl m_d3225dde-a8e4-9d3a-05cb-656a25ac9643 +f 93/277/71 94/278/71 95/279/71 96/280/71 +f 97/281/72 95/282/72 94/283/72 98/284/72 +f 98/285/73 94/286/73 93/287/73 99/288/73 +f 100/289/74 96/290/74 95/291/74 97/292/74 +f 99/293/75 93/294/75 96/295/75 100/296/75 +f 100/297/76 97/298/76 98/299/76 99/300/76 +o entity0_brush13 +v 2 1 13 +v 2 1 14 +v 2 3 14 +v 2 3 13 +v 3 3 14 +v 3 1 14 +v 3 1 13 +v 3 3 13 +vt -6.5 0.5 +vt -7 0.5 +vt -7 1.5 +vt -6.5 1.5 +vt 1.5 1.5 +vt 1 1.5 +vt 1 0.5 +vt 1.5 0.5 +vt 1.5 -7 +vt 1 -7 +vt 1 -6.5 +vt 1.5 -6.5 +vt 1.5 -6.5 +vt 1 -6.5 +vt 1 -7 +vt 1.5 -7 +vt 1.5 0.5 +vt 1 0.5 +vt 1 1.5 +vt 1.5 1.5 +vt -6.5 1.5 +vt -7 1.5 +vt -7 0.5 +vt -6.5 0.5 +vn -1 0 0 +vn 0 0 1 +vn 0 -1 0 +vn 0 1 0 +vn 0 0 -1 +vn 1 0 0 +usemtl m_d3225dde-a8e4-9d3a-05cb-656a25ac9643 +f 101/301/77 102/302/77 103/303/77 104/304/77 +f 105/305/78 103/306/78 102/307/78 106/308/78 +f 106/309/79 102/310/79 101/311/79 107/312/79 +f 108/313/80 104/314/80 103/315/80 105/316/80 +f 107/317/81 101/318/81 104/319/81 108/320/81 +f 108/321/82 105/322/82 106/323/82 107/324/82 +o entity0_brush14 +v 2 1 15 +v 2 1 16 +v 2 5 16 +v 2 5 15 +v 3 5 16 +v 3 1 16 +v 3 1 15 +v 3 5 15 +vt -7.5 0.5 +vt -8 0.5 +vt -8 2.5 +vt -7.5 2.5 +vt 1.5 2.5 +vt 1 2.5 +vt 1 0.5 +vt 1.5 0.5 +vt 1.5 -8 +vt 1 -8 +vt 1 -7.5 +vt 1.5 -7.5 +vt 1.5 -7.5 +vt 1 -7.5 +vt 1 -8 +vt 1.5 -8 +vt 1.5 0.5 +vt 1 0.5 +vt 1 2.5 +vt 1.5 2.5 +vt -7.5 2.5 +vt -8 2.5 +vt -8 0.5 +vt -7.5 0.5 +vn -1 0 0 +vn 0 0 1 +vn 0 -1 0 +vn 0 1 0 +vn 0 0 -1 +vn 1 0 0 +usemtl m_d3225dde-a8e4-9d3a-05cb-656a25ac9643 +f 109/325/83 110/326/83 111/327/83 112/328/83 +f 113/329/84 111/330/84 110/331/84 114/332/84 +f 114/333/85 110/334/85 109/335/85 115/336/85 +f 116/337/86 112/338/86 111/339/86 113/340/86 +f 115/341/87 109/342/87 112/343/87 116/344/87 +f 116/345/88 113/346/88 114/347/88 115/348/88 \ No newline at end of file diff --git a/assets/shaders/fshader.glsl b/assets/shaders/fshader.glsl index 3b6cbab..01e2203 100644 --- a/assets/shaders/fshader.glsl +++ b/assets/shaders/fshader.glsl @@ -13,7 +13,7 @@ uniform vec4 colDiffuse; // Output fragment color out vec4 finalColor; -#define MAX_LIGHTS 12 +#define MAX_LIGHTS 32 struct Light { int enabled; diff --git a/assets/shaders/postprocess.glsl b/assets/shaders/postprocess.glsl index 9e1fd3a..d3d009b 100644 --- a/assets/shaders/postprocess.glsl +++ b/assets/shaders/postprocess.glsl @@ -11,7 +11,7 @@ uniform sampler2D texture0; uniform sampler2D texture1; uniform vec4 colDiffuse; -#define POSTERIZE 5.0 +#define POSTERIZE 6.0 out vec4 finalColor; @@ -27,7 +27,7 @@ void main() { int col = int(mod(gl_FragCoord.x, 4)); int row = int(mod(gl_FragCoord.y, 4)); float threshold = float(bayer16[col + 4 * row]) / 16.0 - 0.5; - grey = clamp(grey + threshold * 0.04 + 0.15 , 0.01, 0.99); + grey = clamp(grey + threshold * 0.2 , 0.01, 0.99); vec2 paluv = vec2(grey, 0.5); vec4 paletteValue = texture(texture1, paluv); diff --git a/collisions/main.odin b/collisions/main.odin new file mode 100644 index 0000000..3c5bd06 --- /dev/null +++ b/collisions/main.odin @@ -0,0 +1,398 @@ +package main + + +import "core:fmt" +import "core:log" +import "core:math" +import "core:math/linalg" +import "core:math/rand" +import rl "vendor:raylib" + + +Buddy :: struct { + pos: [3]f32, + gothit: bool, + hit_timer: f32, +} + + +Light :: struct { + enabled: i32, + used: bool, + distanceNear: f32, + distanceFar: f32, + power: f32, + position: [3]f32, + color: [4]f32, + enabledLoc: i32, + distanceNearLoc: i32, + distanceFarLoc: i32, + powerLoc: i32, + positionLoc: i32, + colorLoc: i32, + shader: ^rl.Shader, +} + +light_find_unused :: proc() -> (^Light, int) { + for &light, i in lights { + if light.enabled == 0 do return &light, i + } + return nil, -1 +} + +light_new :: proc( + shader: ^rl.Shader, + pos: [3]f32, + distanceNear: f32 = 0, + distanceFar: f32 = 10, + power: f32 = 1, + color: [4]f32 = {1, 1, 1, 1}, +) -> ^Light { + light, id := light_find_unused() + if light == nil do return nil + + light.enabled = 1 + light.position = pos + light.distanceNear = distanceNear + light.distanceFar = distanceFar + light.power = power + light.color = color + light.shader = shader + + light_set_uniforms(light, auto_cast id) + light_update_uniforms(light) + + return light +} + +light_destroy :: proc(light: ^Light) { + light.enabled = 0 + light.used = false + light_update_uniforms(light) +} + + +light_set_uniforms :: proc(light: ^Light, i: i32) { + light.enabledLoc = rl.GetShaderLocation(light.shader^, rl.TextFormat("lights[%i].enabled", i)) + light.distanceNearLoc = rl.GetShaderLocation( + light.shader^, + rl.TextFormat("lights[%i].distanceNear", i), + ) + light.distanceFarLoc = rl.GetShaderLocation( + light.shader^, + rl.TextFormat("lights[%i].distanceFar", i), + ) + light.powerLoc = rl.GetShaderLocation(light.shader^, rl.TextFormat("lights[%i].power", i)) + light.positionLoc = rl.GetShaderLocation( + light.shader^, + rl.TextFormat("lights[%i].position", i), + ) + light.colorLoc = rl.GetShaderLocation(light.shader^, rl.TextFormat("lights[%i].color", i)) +} + +light_update_uniforms :: proc(light: ^Light) { + rl.SetShaderValue(light.shader^, light.enabledLoc, &(light.enabled), .INT) + rl.SetShaderValue(light.shader^, light.distanceNearLoc, &(light.distanceNear), .FLOAT) + rl.SetShaderValue(light.shader^, light.distanceFarLoc, &(light.distanceFar), .FLOAT) + rl.SetShaderValue(light.shader^, light.powerLoc, &(light.power), .FLOAT) + rl.SetShaderValue(light.shader^, light.enabledLoc, &(light.enabled), .INT) + rl.SetShaderValue(light.shader^, light.enabledLoc, &(light.enabled), .INT) + rl.SetShaderValue(light.shader^, light.positionLoc, &(light.position), .VEC3) + rl.SetShaderValue(light.shader^, light.colorLoc, &(light.color), .VEC4) +} + +move_light :: proc(light: ^Light, pos: [3]f32) { + light.position = pos + rl.SetShaderValue(light.shader^, light.positionLoc, &(light.position), .VEC3) +} + +MAX_LIGHTS :: 32 + +lights := [MAX_LIGHTS]Light{} + +main :: proc() { + rl.SetConfigFlags({.WINDOW_RESIZABLE, .MSAA_4X_HINT}) + rl.InitWindow(900, 600, "flash") + // rl.ToggleBorderlessWindowed() + + checker := rl.GenImageChecked(128, 128, 32, 32, {128, 128, 128, 255}, {150, 150, 150, 255}) + defer rl.UnloadImage(checker) + checktex := rl.LoadTextureFromImage(checker) + defer rl.UnloadTexture(checktex) + checkmtl := rl.LoadMaterialDefault() + rl.SetMaterialTexture(&checkmtl, .ALBEDO, checktex) + checkplane := rl.GenMeshPlane(30, 30, 1, 1) + rl.GenMeshTangents(&checkplane) + + + w, h := rl.GetScreenWidth(), rl.GetScreenHeight() + pixelize: i32 = 2 + target := rl.LoadRenderTexture(w / pixelize, h / pixelize) + posttarget := rl.LoadRenderTexture(w / pixelize, h / pixelize) + + palette := rl.LoadTexture("assets/gfx/bluem0ld-1x.png") + rl.SetTextureFilter(palette, .POINT) + + shader := rl.LoadShaderFromMemory(vshader, fshader) + posterizer := rl.LoadShaderFromMemory(nil, postprocess) + poster_palette := rl.GetShaderLocation(posterizer, "texture1") + checkmtl.shader = shader + + for i := 0; i < 4; i += 1 { + light_new(&shader, {}, 0, 10, 0.8) + } + lights[0].power = 0.9 + lights[0].distanceNear = 0 + lights[0].distanceFar = 15 + light_update_uniforms(&lights[0]) + rl.SetShaderValue(shader, lights[0].distanceNearLoc, &(lights[0].distanceNear), .FLOAT) + rl.SetShaderValue(shader, lights[0].powerLoc, &(lights[0].power), .FLOAT) + + // sponza := rl.LoadModel("assets/models/sponza.glb") + // for &material in sponza.materials[:sponza.materialCount] { + // material.shader = shader + // } + mdl := rl.LoadModel("assets/models/unnamed.obj") + for &material in mdl.materials[:mdl.materialCount] { + material.shader = shader + } + Tri :: [3][3]f32 + tris := [dynamic]Tri{} + // vtx := [dynamic]f32{} + scale: f32 = 0.04 + for &mesh in mdl.meshes[:mdl.meshCount] { + // mesh := mdl.meshes[mdl.meshCount-1] + fmt.printf("Mesh: %d %d\n", mesh.vertexCount, mesh.triangleCount) + for i: i32 = 0; i < mesh.vertexCount * 3; i += 9 { + append( + &tris, + Tri { + { + mesh.vertices[i] * scale, + mesh.vertices[i + 1] * scale, + mesh.vertices[i + 2] * scale, + }, + { + mesh.vertices[i + 3] * scale, + mesh.vertices[i + 4] * scale, + mesh.vertices[i + 5] * scale, + }, + { + mesh.vertices[i + 6] * scale, + mesh.vertices[i + 7] * scale, + mesh.vertices[i + 8] * scale, + }, + }, + ) + // append(&vtx, mesh.vertices[i] * scale) + } + } + + fmt.println("====\nMESH COUNT: ", mdl.meshCount, "\n===") + // for tri in tris { + // fmt.println(tri[0], tri[1], tri[2], sep = "\n") + // } + + look_angles: rl.Vector2 = 0 + cam := rl.Camera3D { + position = {0, 5, 0}, + target = {1, 2, 0}, + up = {0, 1, 0}, + fovy = 90, + projection = .PERSPECTIVE, + } + vel: rl.Vector3 + + + rotation: f32 = 0.0 + + rl.DisableCursor() + + for !rl.WindowShouldClose() { + if rl.IsWindowResized() { + w, h = rl.GetScreenWidth(), rl.GetScreenHeight() + rl.UnloadRenderTexture(target) + target = rl.LoadRenderTexture(w / pixelize, h / pixelize) + rl.UnloadRenderTexture(posttarget) + posttarget = rl.LoadRenderTexture(w / pixelize, h / pixelize) + } + // rl.UpdateCamera(&cam, .FIRST_PERSON) + delta := rl.GetFrameTime() + + rot := + linalg.quaternion_from_euler_angle_y_f32(look_angles.y) * + linalg.quaternion_from_euler_angle_x_f32(look_angles.x) + + forward := linalg.quaternion128_mul_vector3(rot, linalg.Vector3f32{0, 0, 1}) + right := linalg.quaternion128_mul_vector3(rot, linalg.Vector3f32{1, 0, 0}) + + look_angles.y -= rl.GetMouseDelta().x * 0.0015 + look_angles.x += rl.GetMouseDelta().y * 0.0015 + + SPEED :: 70 + RAD :: 1 + + moving := false + if rl.IsKeyDown(.W) { + vel.xz += forward.xz * delta * SPEED + moving = true + } + if rl.IsKeyDown(.S) { + vel.xz -= forward.xz * delta * SPEED + moving = true + } + if rl.IsKeyDown(.D) { + vel.xz -= right.xz * delta * SPEED + moving = true + } + if rl.IsKeyDown(.A) { + vel.xz += right.xz * delta * SPEED + moving = true + } + vel.xz = rl.Vector2ClampValue(vel.xz, 0, 3) + + if rl.IsKeyDown(.E) do vel.y += delta * SPEED + if rl.IsKeyDown(.Q) do vel.y -= delta * SPEED + + // gravity + vel.y -= delta * 10 * (vel.y < 0.0 ? 2 : 1) + + if rl.IsKeyPressed(.SPACE) do vel.y = 8 + + // damping + vel *= 1.0 / (1.0 + delta * 2) + + // Collide + for t in tris { + closest := closest_point_on_triangle(cam.position, t[0], t[1], t[2]) + diff := cam.position - closest + diff.xz *= 2 + dist := linalg.length(diff) + normal := diff / dist + + rl.DrawCubeV(closest, 0.05, dist > RAD ? rl.ORANGE : rl.WHITE) + + if dist < RAD { + cam.position += normal * (RAD - dist) + // project velocity to the normal plane, if moving towards it + vel_normal_dot := linalg.dot(vel, normal) + if vel_normal_dot < 0 { + vel -= normal * vel_normal_dot + if normal.y > 0.5 && !moving { + vel.xz *= 0.5 + vel.y = 0 + } + } + } + } + + cam.position += vel * delta + cam.target = cam.position + forward + + + rotation += delta + rl.BeginTextureMode(target) + rl.ClearBackground(rl.BLACK) + rl.BeginMode3D(cam) + for &light, i in lights[1:] { + if light.enabled == 0 do continue + color: [4]u8 = { + u8(light.color.r * 255), + u8(light.color.g * 255), + u8(light.color.b * 255), + u8(light.color.a * 255), + } + move_light( + &light, + { + math.cos_f32(rotation + (f32(i) / f32(3)) * math.PI * 2) * 5, + 3, + math.sin_f32(rotation + (f32(i) / f32(3)) * math.PI * 2) * 5, + }, + ) + rl.DrawSphere(light.position, 0.1, transmute(rl.Color)color) + } + move_light(&lights[0], cam.position) + // for &tri in tris { + // rl.DrawSphere(tri[0], 0.5, rl.WHITE) + // rl.DrawSphere(tri[1], 0.5, rl.WHITE) + // rl.DrawSphere(tri[2], 0.5, rl.WHITE) + // rl.DrawTriangle3D(tri[0], tri[1], tri[2], rl.RED) + // } + rl.BeginShaderMode(shader) + rl.DrawModelEx(mdl, {}, {}, 0, 0.04, rl.WHITE) + + rl.EndShaderMode() + rl.EndMode3D() + rl.EndTextureMode() + // rl.BeginDrawing() + rl.BeginTextureMode(posttarget) + // rl.BeginShaderMode(posterizer) + rl.SetShaderValueTexture(posterizer, poster_palette, palette) + rl.DrawTexture(target.texture, 0, 0, rl.WHITE) + // rl.EndShaderMode() + rl.EndTextureMode() + + rl.BeginDrawing() + rl.DrawTexturePro( + posttarget.texture, + rl.Rectangle{0, 0, f32(w / pixelize), f32(h / pixelize)}, + {0, 0, f32(w), f32(h)}, + {}, + 0, + rl.WHITE, + ) + rl.EndDrawing() + } +} + + +vshader: cstring = #load("../assets/shaders/vshader.glsl", cstring) +fshader: cstring = #load("../assets/shaders/fshader.glsl", cstring) +postprocess: cstring = #load("../assets/shaders/postprocess.glsl", cstring) + + +// Real Time collision detection 5.1.5 +closest_point_on_triangle :: proc(p, a, b, c: rl.Vector3) -> rl.Vector3 { + // Check if P in vertex region outside A + ab := b - a + ac := c - a + ap := p - a + d1 := linalg.dot(ab, ap) + d2 := linalg.dot(ac, ap) + if d1 <= 0.0 && d2 <= 0.0 do return a // barycentric coordinates (1,0,0) + // Check if P in vertex region outside B + bp := p - b + d3 := linalg.dot(ab, bp) + d4 := linalg.dot(ac, bp) + if d3 >= 0.0 && d4 <= d3 do return b // barycentric coordinates (0,1,0) + // Check if P in edge region of AB, if so return projection of P onto AB + vc := d1 * d4 - d3 * d2 + if vc <= 0.0 && d1 >= 0.0 && d3 <= 0.0 { + v := d1 / (d1 - d3) + return a + v * ab // barycentric coordinates (1-v,v,0) + } + // Check if P in vertex region outside C + cp := p - c + d5 := linalg.dot(ab, cp) + d6 := linalg.dot(ac, cp) + if d6 >= 0.0 && d5 <= d6 do return c // barycentric coordinates (0,0,1) + // Check if P in edge region of AC, if so return projection of P onto AC + vb := d5 * d2 - d1 * d6 + if vb <= 0.0 && d2 >= 0.0 && d6 <= 0.0 { + w := d2 / (d2 - d6) + return a + w * ac // barycentric coordinates (1-w,0,w) + } + // Check if P in edge region of BC, if so return projection of P onto BC + va := d3 * d6 - d5 * d4 + if va <= 0.0 && (d4 - d3) >= 0.0 && (d5 - d6) >= 0.0 { + w := (d4 - d3) / ((d4 - d3) + (d5 - d6)) + return b + w * (c - b) // barycentric coordinates (0,1-w,w) + } + // P inside face region. Compute Q through its barycentric coordinates (u,v,w) + denom := 1.0 / (va + vb + vc) + v := vb * denom + w := vc * denom + return a + ab * v + ac * w // = u*a + v*b + w*c, u = va * denom = 1.0-v-w +} +