̬̬̬̈̬̬̬̬̈̬̬̬̬̬̪쬪̬̬̬̪쬪 >m*Ȍ̈̈̈̌̌Ȉ̌̌Ȍ̌̌̌̈̈̌̌̈̈̌̈̌̌̌̈̈̌̈̈̈̌̌̈̌Ȍ̌̌Ȍ̌̈̌Ȍ̌̌̌̌̈̌̌̌̈̌̈̈̌̌ȌȌȈ̌̌Ȉ̈Ȍ̌̌̈̈Ȍ̌̌̌̌Ȉ̌Ȍ̌̌̈̌Ȍ̈Ȉ̌Ȍ̌̌Ȉ̌̌̌̌̈̌̌̈̈Ȉ̈̌̌̌̌Ȉ̌̌̌̈̈̈̌̈̌̌̌̌̌̈̈̈̌̌̌̌̌Ȉ̌̌Ȉ̌̈Ȉ̈̌̌̈̌̈̈̌̌̌̈̈̈̈Ȍ=H-- title: obj converter -- author: nihilazo --[[ READ ME This is the .obj converter I used in making Sheepspin. It converts ONLY triangulated .obj files with points ranging from -1 to 1. everything else will (probably) crash. the material names are read as the colors of each tri, so assign materials named "1" for color 1, "2" for 2 etc replace the objfile text with your obj file. running the cart will draw the object rotating and trace the table to include in your source to use it. use the renderer from this cart as an example of using it. the example file is the sheep from Sheepspin. ]] m = math vertexlist = {} mesh = {} objfile = [[ # Blender v3.2.1 OBJ File: 'sheep2.blend' # www.blender.org mtllib sheep.mtl o body_Icosphere v 0.000000 -0.654233 0.000000 v 0.247778 -0.804534 0.502406 v 0.386352 0.233799 -0.851808 v 0.247778 -0.804534 -0.364403 v -0.182195 0.270309 -0.773500 v 0.386352 0.349657 -0.851808 v -0.344593 -0.804534 -0.364403 v 0.247778 -0.804534 0.328039 v 0.343852 0.233799 -0.744026 v -0.344593 -0.804534 0.502406 v 0.422145 -0.804534 0.502406 v -0.182195 0.386168 -0.773500 v 0.343852 0.349657 -0.744026 v 0.247778 -0.804534 -0.538770 v 0.473403 -0.292583 0.589280 v -0.099819 0.486475 -0.480607 v -0.344593 -0.804534 -0.538770 v -0.139695 0.270309 -0.881281 v -0.116384 0.286507 -0.791867 v 0.422145 -0.804534 0.328039 v 0.422145 -0.804534 -0.364403 v -0.139695 0.386168 -0.881281 v -0.180820 -0.292583 0.953483 v 0.129992 0.086538 -0.982801 v -0.344593 -0.804534 0.328039 v 0.298819 0.162921 -0.789546 v 0.422145 -0.804534 -0.538770 v 0.068834 0.655946 -0.538392 v -0.099993 0.579563 -0.731647 v -0.170226 -0.804534 -0.364403 v 0.042036 0.332391 -1.042017 v -0.585162 -0.292583 0.000000 v 0.298645 0.256009 -1.040586 v -0.180820 -0.292583 -0.953483 v 0.315209 0.455977 -0.729326 v -0.170226 -0.804534 -0.538770 v 0.156507 0.560715 -0.885362 v -0.170226 -0.804534 0.502406 v 0.473403 -0.292583 -0.589280 v -0.107776 0.439847 -0.758749 v 0.180820 0.292583 0.953483 v -0.107835 0.439356 -0.760458 v -0.170226 -0.804534 0.328039 v -0.114968 0.311811 -0.786667 v -0.114040 0.319470 -0.759990 v -0.473403 0.292583 0.589280 v -0.473403 0.292583 -0.589280 v -0.043839 0.455309 -0.862281 v -0.064830 0.324310 -0.866442 v 0.585162 0.292583 0.000000 v 0.309347 0.351158 -0.750866 v 0.304609 0.266448 -0.768273 v 0.000000 0.654233 0.000000 v 0.296065 0.268267 -0.753498 v -0.344593 -0.309587 0.502406 v 0.310520 0.373699 -0.750633 v -0.344593 -0.355287 0.328039 v 0.310066 0.393881 -0.825982 v -0.170226 -0.463052 0.328039 v 0.304007 0.293194 -0.868130 v -0.170226 -0.417352 0.502406 v 0.307863 0.367294 -0.867366 v -0.344593 -0.345757 -0.364403 v -0.344593 -0.300057 -0.538770 v 0.229896 0.462509 -0.882820 v -0.170226 -0.407822 -0.538770 v -0.170226 -0.453521 -0.364403 v -0.212166 -0.381902 -0.538770 v 0.422145 -0.331741 -0.525476 v 0.292746 -0.430593 -0.364403 v 0.422145 -0.331741 -0.364403 v 0.247778 -0.441209 -0.364403 v 0.247778 -0.367266 -0.538770 v 0.422145 -0.326103 -0.538770 v 0.247778 -0.382687 0.502406 v 0.403612 -0.345898 0.502406 v 0.263533 -0.452910 0.328039 v 0.247778 -0.456629 0.328039 v 0.422145 -0.331741 0.328039 v 0.422145 -0.331741 0.502406 v 0.115280 0.102518 -0.924578 v 0.085352 0.122770 -0.948206 v 0.083029 0.134349 -0.953483 v 0.252170 0.149883 -0.864668 v 0.226692 0.130288 -0.872110 v -0.153695 0.290867 -0.767851 v -0.150707 0.292583 -0.768924 v -0.152913 0.292583 -0.767696 v -0.115997 0.292583 -0.788247 v -0.115396 0.285855 -0.790896 v -0.087758 0.263273 -0.814051 v -0.116269 0.287893 -0.789709 v 0.280031 0.292583 -0.719532 v 0.287031 0.183436 -0.763785 v 0.284370 0.163982 -0.780887 v 0.270060 0.149909 -0.822467 v -0.150042 0.293502 -0.767126 v 0.092930 0.468368 -0.490030 v 0.011383 0.453375 -0.479987 v -0.068716 0.419799 -0.514574 v -0.115233 0.300395 -0.770250 v 0.173173 0.414839 -0.505047 v 0.147590 0.435807 -0.485370 vt 0.228466 0.086036 vt 0.220153 0.118230 vt 0.090910 0.157461 vt 0.454546 0.157461 vt 0.272728 0.157461 vt 0.313030 0.140412 vt 0.918260 0.150057 vt 1.000000 0.157461 vt 0.818182 0.157461 vt 0.923587 0.083239 vt 0.909091 0.000000 vt 0.945349 0.103137 vt 0.713566 0.154207 vt 0.636364 0.157461 vt 0.686477 0.107286 vt 0.727273 0.000000 vt 0.708239 0.087389 vt 0.508855 0.124944 vt 0.363637 0.314921 vt 0.181819 0.314921 vt 0.909091 0.314921 vt 0.727273 0.314921 vt 0.569202 0.269227 vt 0.560553 0.263777 vt 0.000000 0.314921 vt 0.619616 0.307034 vt 0.638393 0.314459 vt 0.515239 0.276529 vt 0.507827 0.280316 vt 0.272728 0.472382 vt 0.090910 0.472382 vt 0.818182 0.472382 vt 0.636364 0.472382 vt 0.610620 0.384929 vt 0.629106 0.370310 vt 0.490675 0.368151 vt 0.492194 0.377280 vt 0.818748 0.156481 vt 0.819443 0.157461 vt 0.818182 0.157461 vt 0.797057 0.157461 vt 0.817616 0.156481 vt 0.259326 0.134248 vt 0.181819 0.000000 vt 0.232426 0.087655 vt 0.419854 0.140412 vt 0.444703 0.140412 vt 0.286130 0.134248 vt 0.286130 0.140412 vt 0.313030 0.087655 vt 0.419854 0.097372 vt 0.363637 0.000000 vt 0.896497 0.130160 vt 0.735328 0.134309 vt 0.692993 0.118572 vt 0.500542 0.092750 vt 0.489238 0.097372 vt 0.545455 0.000000 vt 0.464389 0.140412 vt 0.465023 0.142866 vt 0.523286 0.276523 vt 0.530045 0.271250 vt 0.570038 0.272342 vt 0.638204 0.314921 vt 0.637591 0.314921 vt 0.627667 0.313111 vt 0.627945 0.314921 vt 0.627943 0.313659 vt 0.505279 0.285551 vt 0.500843 0.314921 vt 0.628611 0.318322 vt 0.637510 0.315321 vt 0.589643 0.391457 vt 0.501267 0.391457 vt 0.454546 0.472382 vt 0.375000 0.000000 vt 0.576825 0.250000 vt 0.375000 0.250000 vt 0.528412 0.500000 vt 0.375000 0.500000 vt 0.375000 0.750000 vt 0.548943 0.750000 vt 0.375000 1.000000 vt 0.597356 1.000000 vt 0.125000 0.750000 vt 0.125000 0.500000 vt 0.375000 0.250000 vt 0.581107 0.000000 vt 0.601638 0.250000 vt 0.564869 0.439869 vt 0.532693 0.750000 vt 0.375000 0.500000 vt 0.553224 0.500000 vt 0.375000 1.000000 vt 0.581107 1.000000 vt 0.125000 0.750000 vt 0.125000 0.500000 vt 0.375000 0.250000 vt 0.538225 0.000000 vt 0.571444 0.250000 vt 0.375000 0.500000 vt 0.589937 0.500000 vt 0.587404 0.519061 vt 0.375000 0.750000 vt 0.587404 0.750000 vt 0.542994 0.935527 vt 0.125000 0.750000 vt 0.125000 0.500000 vt 0.375000 0.000000 vt 0.531297 0.250000 vt 0.375000 0.250000 vt 0.532968 0.272589 vt 0.375000 0.750000 vt 0.587404 0.500000 vt 0.587404 0.750000 vt 0.581043 0.776572 vt 0.375000 0.500000 vt 0.125000 0.750000 vt 0.125000 0.500000 vt 0.090910 0.157461 vt 0.110803 0.123005 vt 0.169701 0.157461 vt 0.439455 0.157461 vt 0.449425 0.148591 vt 0.454546 0.157461 vt 1.000000 0.157461 vt 0.830809 0.157461 vt 0.980107 0.123005 vt 0.651619 0.131039 vt 0.669307 0.157461 vt 0.636364 0.157461 vt 0.459667 0.148591 vt 0.485518 0.157461 vt 0.532224 0.157461 vt 0.621109 0.131038 vt 0.416034 0.206696 vt 0.422431 0.213087 vt 0.222371 0.185607 vt 0.181819 0.314921 vt 0.866463 0.239211 vt 0.839537 0.165189 vt 0.727273 0.314921 vt 0.672466 0.166210 vt 0.512641 0.171097 vt 0.545455 0.314921 vt 0.363637 0.314921 vt 0.263220 0.173930 vt 0.282130 0.173746 vt 0.000000 0.314921 vt 0.909091 0.314921 vt 0.827974 0.301931 vt 0.391111 0.272462 vt 0.420097 0.314921 vt 0.460845 0.269355 vt 0.272728 0.472382 vt 0.090910 0.472382 vt 0.818182 0.472382 vt 0.636364 0.472382 vt 0.453177 0.395689 vt 0.454546 0.472382 vt 0.625000 0.000000 vt 0.375000 0.250000 vt 0.375000 0.000000 vt 0.625000 0.250000 vt 0.375000 0.353089 vt 0.375000 0.955724 vt 0.375000 0.906150 vt 0.625000 1.000000 vt 0.125000 0.500000 vt 0.204229 0.693005 vt 0.167521 0.746417 vt 0.875000 0.750000 vt 0.772524 0.750000 vt 0.773461 0.746348 vt 0.625000 0.000000 vt 0.375000 0.250000 vt 0.375000 0.000000 vt 0.625000 0.250000 vt 0.625000 0.295897 vt 0.574534 0.297513 vt 0.625000 1.000000 vt 0.375000 0.886611 vt 0.540895 0.891921 vt 0.125000 0.500000 vt 0.190802 0.500000 vt 0.187330 0.535428 vt 0.790575 0.661909 vt 0.875000 0.500000 vt 0.875000 0.750000 vt 0.597356 0.000000 vt 0.375000 0.000000 vt 0.375000 0.750000 vt 0.375000 0.000000 vt 0.538225 1.000000 vt 0.375000 1.000000 vt 0.564516 0.000000 vt 0.564516 1.000000 vt 0.375000 1.000000 vt 0.396153 0.258601 vt 0.396757 0.204940 vt 0.826032 0.171057 vt 0.821118 0.159782 vt 0.865597 0.239587 vt 0.796556 0.219901 vt 0.444271 0.314921 vt 0.625000 0.381994 vt 0.625000 0.897524 vt 0.375000 1.000000 vt 0.377486 0.959678 vt 0.375000 0.960755 vt 0.164245 0.750000 vt 0.125000 0.750000 vt 0.228089 0.500000 vt 0.218850 0.750000 vt 0.169276 0.750000 vt 0.743006 0.500000 vt 0.875000 0.500000 vt 0.375000 0.315802 vt 0.625000 0.784560 vt 0.375000 1.000000 vt 0.238389 0.750000 vt 0.125000 0.750000 vt 0.829103 0.500000 vt 0.659560 0.750000 vn 0.2124 -0.8996 0.3815 vn 0.6071 -0.7947 0.0000 vn -0.5131 -0.8303 0.2176 vn -0.5131 -0.8303 -0.2176 vn 0.2124 -0.8996 -0.3815 vn 0.9822 -0.1876 0.0000 vn 0.4658 -0.2879 0.8367 vn -0.8996 -0.2124 0.3815 vn -0.8996 -0.2124 -0.3815 vn 0.4658 -0.2879 -0.8367 vn 0.8996 0.2124 0.3815 vn -0.4658 0.2879 0.8367 vn -0.9822 0.1876 0.0000 vn -0.4658 0.2879 -0.8367 vn 0.8996 0.2124 -0.3815 vn 0.5131 0.8303 0.2176 vn -0.2124 0.8996 0.3815 vn -0.6071 0.7947 0.0000 vn -0.2124 0.8996 -0.3815 vn 0.5131 0.8303 -0.2176 vn -0.7426 -0.5448 0.3895 vn -0.5959 -0.8001 0.0690 vn -1.0000 0.0000 0.0000 vn 0.0000 0.0000 -1.0000 vn 1.0000 0.0000 0.0000 vn 0.0000 0.0000 1.0000 vn 0.0000 -1.0000 0.0000 vn -0.1550 -0.5049 0.8492 vn 0.3581 -0.6436 0.6764 vn 0.1021 -0.9524 0.2872 vn 0.8474 -0.1519 0.5088 vn 0.0713 0.2576 0.9636 vn -0.9985 0.0518 0.0199 vn -0.7413 -0.3958 -0.5421 vn 0.6353 -0.7239 -0.2689 vn 0.7413 0.3958 0.5421 vn -0.6353 0.7239 0.2689 vn -0.8474 0.1519 -0.5088 vn -0.0713 -0.2576 -0.9636 vn 0.9985 -0.0518 -0.0199 vn 0.5959 0.8001 -0.0690 vn -0.1021 0.9524 -0.2872 vn -0.3581 0.6436 -0.6764 vn 0.1550 0.5049 -0.8492 vn 0.7426 0.5448 -0.3895 vn -0.9303 0.0000 -0.3668 vn 0.1944 0.0000 -0.9809 vn -0.1944 0.0000 0.9809 vn 0.5431 -0.8119 0.2142 vn -0.5432 0.8119 -0.2142 vn 0.9303 0.0000 0.3668 vn -0.5431 -0.8119 -0.2142 vn 0.5431 0.8119 0.2142 vn -0.1945 -0.0000 0.9809 vn -0.5431 0.8119 -0.2142 usemtl 12 s off f 78/1/1 75/2/1 23/3/1 f 39/4/2 15/5/2 79/6/2 f 55/7/3 23/8/3 32/9/3 f 59/10/3 1/11/3 61/12/3 f 64/13/4 32/9/4 34/14/4 f 66/15/4 1/16/4 67/17/4 f 34/14/5 39/4/5 73/18/5 f 15/5/6 39/4/6 50/19/6 f 23/3/7 15/5/7 41/20/7 f 46/21/8 32/9/8 23/8/8 f 47/22/9 34/14/9 32/9/9 f 34/14/10 82/23/10 81/24/10 f 41/20/11 15/5/11 50/19/11 f 23/3/12 41/20/12 46/25/12 f 32/9/13 46/21/13 47/22/13 f 91/26/14 34/14/14 86/27/14 f 39/4/15 96/28/15 95/29/15 f 41/20/16 50/19/16 53/30/16 f 46/25/17 41/20/17 53/31/17 f 47/22/18 46/21/18 53/32/18 f 53/33/19 99/34/19 100/35/19 f 102/36/20 103/37/20 50/19/20 f 90/38/21 92/39/21 19/40/21 f 19/40/22 91/41/22 90/42/22 f 75/2/1 76/43/1 15/5/1 f 1/44/1 77/45/1 78/1/1 f 75/2/1 15/5/1 23/3/1 f 1/44/1 78/1/1 23/3/1 f 71/46/2 69/47/2 39/4/2 f 15/5/2 76/48/2 80/49/2 f 79/6/2 77/50/2 70/51/2 f 77/50/2 1/52/2 70/51/2 f 79/6/2 70/51/2 71/46/2 f 15/5/2 80/49/2 79/6/2 f 71/46/2 39/4/2 79/6/2 f 55/7/3 61/12/3 23/8/3 f 32/9/3 57/53/3 55/7/3 f 59/10/3 57/53/3 32/9/3 f 1/11/3 23/8/3 61/12/3 f 59/10/3 32/9/3 1/11/3 f 64/13/4 63/54/4 32/9/4 f 34/14/4 68/55/4 64/13/4 f 66/15/4 68/55/4 34/14/4 f 1/16/4 32/9/4 67/17/4 f 32/9/4 63/54/4 67/17/4 f 66/15/4 34/14/4 1/16/4 f 72/56/5 70/57/5 1/58/5 f 39/4/5 69/59/5 74/60/5 f 73/18/5 72/56/5 34/14/5 f 72/56/5 1/58/5 34/14/5 f 39/4/5 74/60/5 73/18/5 f 84/61/10 39/4/10 85/62/10 f 39/4/10 34/14/10 81/24/10 f 85/62/10 39/4/10 81/24/10 f 34/14/10 83/63/10 82/23/10 f 91/26/14 83/63/14 34/14/14 f 47/22/14 88/64/14 86/27/14 f 86/27/14 87/65/14 90/66/14 f 87/65/14 89/67/14 92/68/14 f 87/65/14 92/68/14 90/66/14 f 34/14/14 47/22/14 86/27/14 f 90/66/14 91/26/14 86/27/14 f 94/69/15 93/70/15 50/19/15 f 39/4/15 84/61/15 96/28/15 f 95/29/15 94/69/15 39/4/15 f 94/69/15 50/19/15 39/4/15 f 101/71/19 89/67/19 97/72/19 f 89/67/19 87/65/19 97/72/19 f 97/72/19 88/64/19 100/35/19 f 88/64/19 47/22/19 100/35/19 f 100/35/19 101/71/19 97/72/19 f 47/22/19 53/33/19 100/35/19 f 53/33/19 98/73/19 99/34/19 f 103/37/20 98/74/20 53/75/20 f 53/75/20 50/19/20 103/37/20 f 50/19/20 93/70/20 102/36/20 usemtl 15 f 10/76/23 57/77/23 25/78/23 f 25/78/24 59/79/24 43/80/24 f 38/81/25 59/79/25 61/82/25 f 10/83/26 61/82/26 55/84/26 f 43/80/27 10/85/27 25/86/27 f 17/87/23 63/88/23 64/89/23 f 17/87/24 64/89/24 68/90/24 f 67/91/25 36/92/25 66/93/25 f 7/94/26 67/91/26 63/95/26 f 36/92/27 7/96/27 17/97/27 f 14/98/23 72/99/23 73/100/23 f 27/101/24 73/100/24 74/102/24 f 27/101/25 74/102/25 69/103/25 f 21/104/26 71/105/26 70/106/26 f 27/101/27 4/107/27 14/108/27 f 2/109/23 78/110/23 8/111/23 f 8/111/24 78/110/24 77/112/24 f 11/113/25 79/114/25 80/115/25 f 11/113/26 80/115/26 76/116/26 f 20/117/27 2/118/27 8/119/27 f 16/120/28 100/121/28 99/122/28 f 94/123/29 95/124/29 26/125/29 f 16/126/21 101/127/21 100/128/21 f 81/129/22 82/130/22 24/131/22 f 95/132/30 96/133/30 26/125/30 f 24/131/30 85/134/30 81/135/30 f 54/136/31 94/123/31 52/137/31 f 98/138/32 28/139/32 99/122/32 f 40/140/33 45/141/33 16/126/33 f 31/142/34 24/131/34 83/143/34 f 84/144/35 85/134/35 33/145/35 f 35/146/36 103/147/36 102/148/36 f 29/149/37 16/120/37 28/139/37 f 29/150/38 31/142/38 48/151/38 f 31/142/39 33/145/39 24/131/39 f 35/146/40 56/152/40 58/153/40 f 26/125/40 33/145/40 60/154/40 f 37/155/41 28/139/41 35/146/41 f 29/149/42 28/139/42 37/156/42 f 29/150/43 37/157/43 31/142/43 f 37/158/44 33/145/44 31/142/44 f 65/159/45 33/145/45 37/160/45 f 12/161/46 18/162/46 5/163/46 f 22/164/47 49/165/47 18/162/47 f 97/166/48 45/167/48 12/168/48 f 18/169/49 44/170/49 87/171/49 f 12/172/50 40/173/50 42/174/50 f 6/175/51 9/176/51 3/177/51 f 13/178/48 56/179/48 51/180/48 f 6/181/47 60/182/47 62/183/47 f 9/184/52 54/185/52 52/186/52 f 58/187/53 13/188/53 6/189/53 f 10/76/23 55/190/23 57/77/23 f 25/78/24 57/77/24 59/79/24 f 38/81/25 43/80/25 59/79/25 f 10/83/26 38/81/26 61/82/26 f 43/80/27 38/81/27 10/85/27 f 17/87/23 7/191/23 63/88/23 f 68/90/24 66/93/24 17/87/24 f 66/93/24 36/92/24 17/87/24 f 67/91/25 30/192/25 36/92/25 f 7/94/26 30/192/26 67/91/26 f 36/92/27 30/192/27 7/96/27 f 14/98/23 4/193/23 72/99/23 f 27/101/24 14/98/24 73/100/24 f 69/103/25 71/105/25 21/104/25 f 21/104/25 27/101/25 69/103/25 f 70/106/26 72/194/26 4/195/26 f 4/195/26 21/104/26 70/106/26 f 27/101/27 21/104/27 4/107/27 f 2/109/23 75/196/23 78/110/23 f 77/112/24 79/114/24 20/117/24 f 20/117/24 8/111/24 77/112/24 f 11/113/25 20/117/25 79/114/25 f 76/116/26 75/197/26 11/113/26 f 75/197/26 2/198/26 11/113/26 f 20/117/27 11/113/27 2/118/27 f 54/136/31 51/199/31 93/200/31 f 51/199/31 35/146/31 102/148/31 f 93/200/31 51/199/31 102/148/31 f 93/200/31 94/123/31 54/136/31 f 94/123/31 26/125/31 52/137/31 f 98/138/32 103/147/32 28/139/32 f 28/139/32 16/120/32 99/122/32 f 44/201/33 19/40/33 89/202/33 f 19/40/33 92/39/33 89/202/33 f 89/202/33 101/127/33 44/201/33 f 101/127/33 16/126/33 45/141/33 f 45/141/33 44/201/33 101/127/33 f 29/150/33 42/203/33 40/140/33 f 29/150/33 40/140/33 16/126/33 f 91/41/34 19/40/34 31/142/34 f 24/131/34 82/130/34 83/143/34 f 83/143/34 91/41/34 31/142/34 f 85/134/35 24/131/35 33/145/35 f 33/145/35 26/125/35 84/144/35 f 26/125/35 96/133/35 84/144/35 f 35/146/36 28/139/36 103/147/36 f 31/142/38 19/40/38 49/204/38 f 19/40/38 44/201/38 49/204/38 f 48/151/38 42/203/38 29/150/38 f 31/142/38 49/204/38 48/151/38 f 35/146/40 51/199/40 56/152/40 f 60/154/40 52/137/40 26/125/40 f 33/145/40 62/205/40 60/154/40 f 65/159/45 62/205/45 33/145/45 f 37/160/45 35/146/45 65/159/45 f 35/146/45 58/153/45 65/159/45 f 12/161/46 22/164/46 18/162/46 f 22/164/47 48/206/47 49/165/47 f 40/207/48 12/168/48 45/167/48 f 12/168/48 5/208/48 88/209/48 f 5/208/48 86/210/48 88/209/48 f 88/209/54 97/166/54 12/168/54 f 86/211/49 5/212/49 18/169/49 f 18/169/49 49/213/49 44/170/49 f 44/170/49 45/214/49 97/215/49 f 87/171/49 86/211/49 18/169/49 f 44/170/49 97/215/49 87/171/49 f 48/216/55 22/217/55 42/174/55 f 22/217/55 12/172/55 42/174/55 f 6/175/51 13/178/51 9/176/51 f 51/180/48 54/218/48 13/178/48 f 54/218/48 9/176/48 13/178/48 f 62/183/47 65/219/47 6/181/47 f 6/181/47 3/220/47 60/182/47 f 52/186/52 60/221/52 3/222/52 f 3/222/52 9/184/52 52/186/52 f 58/187/53 56/223/53 13/188/53 f 6/189/53 65/224/53 58/187/53 ]] material = 1 for l in objfile:gmatch("([^\n]*)\n?") do if l:match("usemtl") then trace(l) material = tonumber(l:match("usemtl (%d+)")) end -- add verteces to the vertex list if l:sub(1,2) == "v " then x,y,z = l:match("v ([-*%d|%.]+) ([-*%d|%.]+) ([-*%d|%.]+)") coords = {x=tonumber(x),y=tonumber(y),z=tonumber(z)} vertexlist[#vertexlist+1] = coords end -- construct triangles. 4th value is color if l:sub(1,2) == "f " then p1,p2,p3 = l:match("f (%d+)/%d+/%d+ (%d+)/%d+/%d+ (%d+)/%d+/%d+") mesh[#mesh + 1] = { p1=vertexlist[tonumber(p1)], p2=vertexlist[tonumber(p2)], p3=vertexlist[tonumber(p3)], c=material} end end -- TODO remove some redundant commas result = "mesh = {" for i, tr in pairs(mesh) do result = result .. "{" for k,v in pairs(tr) do result = result .. k .. "=" if type(v) == "table" then result = result .. "{x=" .. v.x .. ",y=" .. v.y .. ",z=" .. v.z .. "}," else result = result .. v .. "," end end result = result .. "}," end result = result .. "}" trace(result) -- project a vertex for the screen function project(v) local x = v.x local y = -v.y local z = v.z local x = (x + 1)/2 * 100 + 40 local y = (y + 1)/2 * 100 local z = (z + 1)/2 * 100 -- scaling for screen return x, y, z end screenmesh = mesh function debug_display(x1,y1,z1,x2,y2,z2,x3,y3,z3) print( x1 .. " " .. y1 .. " " .. z1 .. ", " .. x2 .. " " .. y2 .. " " .. z2 .. ", " .. x1 .. " " .. y2 .. " " .. z3 .. ", ", 0, ppos*5, ppos%5+1) end angle = 0.05 -- sorting function for tris function z_order(a,b) return (a.p1.z+a.p2.z+a.p3.z)<(b.p1.z+b.p2.z+b.p3.z) end function TIC() cls() ppos = 0 c = 1 table.sort(screenmesh,z_order) for i, tr in pairs(screenmesh) do x1,y1,z1 = project(tr.p1) x2,y2,z2 = project(tr.p2) x3,y3,z3 = project(tr.p3) tri(x1,y1,x2,y2,x3,y3, tr.c) trib( x1, y1, x2, y2, x3, y3,8) ppos = ppos + 1 end newmesh = {} for i, t in pairs(screenmesh) do newmesh[i] = {} for j, v in pairs(t) do if type(v) == "table" then tx = v.x * m.cos(angle) - v.z * m.sin(angle) ty = v.y tz = v.x * m.sin(angle) + v.z * m.cos(angle) newmesh[i][j] = {} newmesh[i][j].x = tx newmesh[i][j].y = ty newmesh[i][j].z = tz end newmesh[i].c = t.c end end screenmesh = newmesh end