├── .gitignore ├── LICENSE ├── Makefile ├── README.md ├── capture.gif ├── capture_color.gif ├── models ├── box-in-box.mtl ├── box-in-box.obj ├── fox.mtl ├── fox.obj ├── linux-mascot-tux.mtl ├── linux-mascot-tux.obj ├── non-convex.mtl ├── non-convex.obj ├── shiba-inu-ascii.stl ├── shiba-inu-binary.stl ├── shiba-inu.mtl ├── shiba-inu.obj ├── tree-branched.mtl ├── tree-branched.obj ├── tree-open.mtl ├── tree-open.obj ├── tree-pyramidal.mtl ├── tree-pyramidal.obj ├── tree-spreading.mtl └── tree-spreading.obj └── src ├── model.c ├── model.h ├── sets.h ├── surface.c ├── surface.h ├── triangularization.c ├── triangularization.h ├── trigonometry.c ├── trigonometry.h └── viewer.c /.gitignore: -------------------------------------------------------------------------------- 1 | extra/ 2 | viewer 3 | 3d-ascii-viewer 4 | tmp 5 | 6 | # Prerequisites 7 | *.d 8 | 9 | # Object files 10 | *.o 11 | *.ko 12 | src/*.obj 13 | *.elf 14 | 15 | # Linker output 16 | *.ilk 17 | *.map 18 | *.exp 19 | 20 | # Precompiled Headers 21 | *.gch 22 | *.pch 23 | 24 | # Libraries 25 | *.lib 26 | *.a 27 | *.la 28 | *.lo 29 | 30 | # Shared objects (inc. Windows DLLs) 31 | *.dll 32 | *.so 33 | *.so.* 34 | *.dylib 35 | 36 | # Executables 37 | *.exe 38 | *.out 39 | *.app 40 | *.i*86 41 | *.x86_64 42 | *.hex 43 | 44 | # Debug files 45 | *.dSYM/ 46 | *.su 47 | *.idb 48 | *.pdb 49 | 50 | # Kernel Module Compile Results 51 | *.mod* 52 | *.cmd 53 | .tmp_versions/ 54 | modules.order 55 | Module.symvers 56 | Mkfile.old 57 | dkms.conf 58 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 Francisco Javier Andrés Casas Barrientos 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | TARGET_EXEC := 3d-ascii-viewer 2 | TEMPDIR := tmp 3 | 4 | CC := gcc 5 | CFLAGS := -Wall 6 | LDFLAGS := -lm -lncurses 7 | SRC_DIR := src 8 | 9 | SRCS := $(shell find $(SRC_DIR) -name '*.c') 10 | OBJS := $(SRCS:%=$(TEMPDIR)/%.o) 11 | 12 | $(TARGET_EXEC): $(OBJS) 13 | $(CC) $(OBJS) -o $@ $(LDFLAGS) 14 | 15 | $(TEMPDIR)/%.c.o: %.c 16 | mkdir -p $(dir $@) 17 | $(CC) $(CFLAGS) -c $< -o $@ 18 | 19 | .PHONY: clean 20 | clean: 21 | rm -rf $(TARGET_EXEC) $(TEMPDIR) 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 3d-ascii-viewer 2 | 3 | Viewer of 3D models in ASCII, written in C. 4 | 5 | ![Example usage capture.](capture.gif) 6 | 7 | Supported formats: 8 | 9 | * [Wavefront .obj](https://en.wikipedia.org/wiki/Wavefront_.obj_file). 10 | * [STL .stl](https://en.wikipedia.org/wiki/STL_(file_format)). 11 | 12 | ## Compile an run the program 13 | 14 | You need developer's libraries for ncurses (the `libncurses-dev` package on Debian). 15 | 16 | Compile the program using the `make` command: 17 | 18 | ``` 19 | $ make 20 | ``` 21 | 22 | You can try it passing any of the models in the `models` folder as an argument: 23 | 24 | ``` 25 | $ ./3d-ascii-viewer models/fox.obj 26 | ``` 27 | 28 | For additional options pass the `--help` option. 29 | 30 | ``` 31 | $ ./3d-ascii-viewer --help 32 | ``` 33 | 34 | ## Color support 35 | 36 | With the `--color` option, the program looks for the companion MTL files (referenced in the main OBJ file) 37 | for information about the materials used by the model. 38 | 39 | Characters within faces that use a material will be displayed with the **diffuse color** of said material. 40 | Textures are not supported. 41 | 42 | ![Example usage capture.](capture_color.gif) 43 | 44 | To use this option, the terminal must support color attributes and must be capable of redefining colors. 45 | Also, the number of colors is limited by the maximum number of color pairs supported by ncurses. 46 | 47 | ## Models 48 | 49 | * [Fox and ShibaInu models](https://opengameart.org/content/fox-and-shiba) made by PixelMannen for the Public Domain (CC0). 50 | * [Tree models](https://opengameart.org/content/fox-trees-pack) made by Lokesh Mehra (mehrasaur) for the Public Domain (CC0). 51 | * [Tux model](https://blendswap.com/blend/23774) made by Vido89 for the Public Domain (CC0). 52 | 53 | ASCII luminescence idea by: [a1k0n.net](https://www.a1k0n.net/2011/07/20/donut-math.html) 54 | 55 | **Note:** If you want to add a Public Domain (CC0) or MIT licenced model, you can send it as a Pull Request or open an Issue. 56 | Remember to add the proper credits in the list here. 57 | 58 | ## Older version 59 | 60 | There is also an [older version](https://github.com/autopawn/3d-ascii-viewer-haskell), written in Haskell. 61 | -------------------------------------------------------------------------------- /capture.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/autopawn/3d-ascii-viewer/d122eb600e58d79ced65ec20eb49a56fcdcf5693/capture.gif -------------------------------------------------------------------------------- /capture_color.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/autopawn/3d-ascii-viewer/d122eb600e58d79ced65ec20eb49a56fcdcf5693/capture_color.gif -------------------------------------------------------------------------------- /models/box-in-box.mtl: -------------------------------------------------------------------------------- 1 | # Blender MTL File: 'None' 2 | # Material Count: 2 3 | 4 | newmtl material1 5 | Ns 96.078431 6 | Ka 1.000000 1.000000 1.000000 7 | Kd 1.0 0.0 0.0 8 | Ks 0.500000 0.500000 0.500000 9 | Ke 0.000000 0.000000 0.000000 10 | Ni 1.000000 11 | d 1.000000 12 | illum 2 13 | 14 | newmtl material2 15 | Ns 96.078431 16 | Ka 1.000000 1.000000 1.000000 17 | Kd 0.0 0.0 1.0 18 | Ks 0.500000 0.500000 0.500000 19 | Ke 0.000000 0.000000 0.000000 20 | Ni 1.000000 21 | d 1.000000 22 | illum 2 23 | -------------------------------------------------------------------------------- /models/box-in-box.obj: -------------------------------------------------------------------------------- 1 | # Blender v3.0.1 OBJ File: '' 2 | # www.blender.org 3 | mtllib box-in-box.mtl 4 | o Cube 5 | v 1.000000 2.582490 -1.000000 6 | v 1.000000 0.582490 -1.000000 7 | v 1.000000 2.582490 1.000000 8 | v 1.000000 0.582490 1.000000 9 | v -1.000000 2.582490 -1.000000 10 | v -1.000000 0.582490 -1.000000 11 | v -1.000000 2.582490 1.000000 12 | v -1.000000 0.582490 1.000000 13 | vt 0.625000 0.500000 14 | vt 0.875000 0.500000 15 | vt 0.875000 0.750000 16 | vt 0.625000 0.750000 17 | vt 0.375000 0.750000 18 | vt 0.625000 1.000000 19 | vt 0.375000 1.000000 20 | vt 0.375000 0.000000 21 | vt 0.625000 0.000000 22 | vt 0.625000 0.250000 23 | vt 0.375000 0.250000 24 | vt 0.125000 0.500000 25 | vt 0.375000 0.500000 26 | vt 0.125000 0.750000 27 | vn 0.0000 1.0000 0.0000 28 | vn 0.0000 0.0000 1.0000 29 | vn -1.0000 0.0000 0.0000 30 | vn 0.0000 -1.0000 0.0000 31 | vn 1.0000 0.0000 0.0000 32 | vn 0.0000 0.0000 -1.0000 33 | usemtl material1 34 | s off 35 | f 1/1/1 5/2/1 7/3/1 3/4/1 36 | f 4/5/2 3/4/2 7/6/2 8/7/2 37 | f 8/8/3 7/9/3 5/10/3 6/11/3 38 | f 6/12/4 2/13/4 4/5/4 8/14/4 39 | f 2/13/5 1/1/5 3/4/5 4/5/5 40 | f 6/11/6 5/10/6 1/1/6 2/13/6 41 | o Cube.001 42 | v -1.618060 3.196734 -1.667056 43 | v -1.618060 -0.031753 -1.667056 44 | v -1.618060 3.196734 1.667056 45 | v -1.618060 -0.031753 1.667056 46 | v 1.618060 3.196734 -1.667056 47 | v 1.618060 -0.031753 -1.667056 48 | v 1.618060 3.196734 1.667056 49 | v 1.618060 -0.031753 1.667056 50 | vt 0.625000 0.500000 51 | vt 0.875000 0.500000 52 | vt 0.875000 0.750000 53 | vt 0.625000 0.750000 54 | vt 0.375000 0.750000 55 | vt 0.625000 1.000000 56 | vt 0.375000 1.000000 57 | vt 0.375000 0.000000 58 | vt 0.625000 0.000000 59 | vt 0.625000 0.250000 60 | vt 0.375000 0.250000 61 | vt 0.125000 0.500000 62 | vt 0.375000 0.500000 63 | vt 0.125000 0.750000 64 | vn 0.0000 -1.0000 0.0000 65 | vn 0.0000 0.0000 -1.0000 66 | vn -1.0000 0.0000 0.0000 67 | vn 0.0000 1.0000 0.0000 68 | vn 1.0000 0.0000 0.0000 69 | vn 0.0000 0.0000 1.0000 70 | usemtl material2 71 | s off 72 | f 9/15/7 13/16/7 15/17/7 11/18/7 73 | f 12/19/8 11/18/8 15/20/8 16/21/8 74 | f 16/22/9 15/23/9 13/24/9 14/25/9 75 | f 14/26/10 10/27/10 12/19/10 16/28/10 76 | f 10/27/11 9/15/11 11/18/11 12/19/11 77 | f 14/25/12 13/24/12 9/15/12 10/27/12 78 | -------------------------------------------------------------------------------- /models/fox.mtl: -------------------------------------------------------------------------------- 1 | # Blender MTL File: 'None' 2 | # Material Count: 4 3 | 4 | newmtl Fox_BrownBlack_001 5 | Ns 225.000000 6 | Ka 1.000000 1.000000 1.000000 7 | Kd 0.069978 0.027417 0.004242 8 | Ks 0.500000 0.500000 0.500000 9 | Ke 0.000000 0.000000 0.000000 10 | Ni 1.000000 11 | d 1.000000 12 | illum 2 13 | 14 | newmtl Fox_Brown_001 15 | Ns 225.000000 16 | Ka 1.000000 1.000000 1.000000 17 | Kd 0.564712 0.194618 0.017642 18 | Ks 0.500000 0.500000 0.500000 19 | Ke 0.000000 0.000000 0.000000 20 | Ni 1.000000 21 | d 1.000000 22 | illum 2 23 | 24 | newmtl Fox_White_001 25 | Ns 225.000000 26 | Ka 1.000000 1.000000 1.000000 27 | Kd 0.896269 0.854993 0.799103 28 | Ks 0.500000 0.500000 0.500000 29 | Ke 0.000000 0.000000 0.000000 30 | Ni 1.000000 31 | d 1.000000 32 | illum 2 33 | 34 | newmtl Fox_nose_001 35 | Ns 225.000000 36 | Ka 1.000000 1.000000 1.000000 37 | Kd 0.014670 0.014670 0.014670 38 | Ks 0.500000 0.500000 0.500000 39 | Ke 0.000000 0.000000 0.000000 40 | Ni 1.000000 41 | d 1.000000 42 | illum 2 43 | -------------------------------------------------------------------------------- /models/fox.obj: -------------------------------------------------------------------------------- 1 | # Blender v3.0.1 OBJ File: '' 2 | # www.blender.org 3 | mtllib fox.mtl 4 | o Cube_001_Cube.003 5 | v 0.068281 1.211081 -0.792773 6 | v -0.002711 1.228563 -0.880573 7 | v -0.007774 1.477286 -1.403494 8 | v 0.002966 1.258179 0.963047 9 | v 0.235599 1.286398 0.942474 10 | v 0.289787 1.801673 1.485482 11 | v 0.005550 1.784818 1.802263 12 | v 0.236124 1.837114 1.803306 13 | v 0.174736 1.805814 1.972321 14 | v 0.190135 1.985652 2.009221 15 | v 0.110020 2.031136 2.112843 16 | v 0.007055 1.926609 2.291308 17 | v 0.135337 1.811305 2.125912 18 | v 0.060182 1.893005 2.290872 19 | v 0.349816 2.015681 1.760592 20 | v 0.347972 1.958802 1.450320 21 | v 0.077709 1.230569 0.845843 22 | v 0.156987 0.934822 0.718448 23 | v 0.169094 2.407118 1.757284 24 | v 0.332760 2.277450 1.681454 25 | v 0.438442 2.713746 1.739467 26 | v 0.006255 1.740544 2.031332 27 | v 0.007055 1.847535 2.291326 28 | v 0.004566 1.665419 1.482833 29 | v 0.238187 1.475434 -1.296178 30 | v 0.117168 1.457492 -1.273325 31 | v 0.001657 1.102372 0.537975 32 | v -0.001191 1.131166 -0.386940 33 | v 0.233139 1.197133 -0.569454 34 | v 0.151148 0.949030 -1.175917 35 | v 0.126283 0.879217 0.563657 36 | v 0.126732 0.522190 -2.406165 37 | v -0.007350 0.491677 -2.387262 38 | v 0.091866 0.508105 -2.958243 39 | v 0.212498 0.613369 -2.505733 40 | v -0.007206 1.313000 -2.340235 41 | v 0.155772 0.825245 -2.685891 42 | v 0.080101 0.635224 -3.007533 43 | v 0.341936 1.296986 -0.570475 44 | v 0.174094 1.129840 0.388721 45 | v 0.125572 1.181640 -0.574965 46 | v 0.140529 1.508084 -1.407471 47 | v -0.009329 0.692819 -3.029716 48 | v -0.009074 0.481316 -2.946950 49 | v -0.073162 1.211081 -0.792337 50 | v -0.280634 1.801673 1.487239 51 | v -0.229790 1.286398 0.943907 52 | v -0.162587 1.805814 1.973359 53 | v -0.225014 1.837114 1.804726 54 | v -0.177758 1.985652 2.010353 55 | v -0.097006 2.031136 2.113480 56 | v -0.122243 1.811305 2.126705 57 | v -0.046074 1.893005 2.291199 58 | v -0.338967 2.015681 1.762713 59 | v -0.339033 1.958802 1.452436 60 | v -0.152560 0.934822 0.719401 61 | v -0.072498 1.230569 0.846306 62 | v -0.158269 2.407118 1.758293 63 | v -0.427722 2.713746 1.742134 64 | v -0.322399 2.277450 1.683470 65 | v -0.246164 1.475434 -1.294686 66 | v -0.125008 1.457492 -1.272579 67 | v -0.236641 1.197133 -0.568008 68 | v -0.158386 0.949030 -1.174963 69 | v -0.122810 0.879217 0.564425 70 | v -0.141547 0.522190 -2.405339 71 | v -0.110081 0.508105 -2.957621 72 | v -0.227924 0.613369 -2.504377 73 | v -0.098620 0.635224 -3.006982 74 | v -0.172309 0.825245 -2.684880 75 | v -0.171697 1.129840 0.389786 76 | v -0.345443 1.296986 -0.568358 77 | v -0.129110 1.181640 -0.574181 78 | v -0.156098 1.508084 -1.406558 79 | v -0.004632 1.132990 -1.504364 80 | v 0.200662 1.178991 -1.546297 81 | v 0.348929 1.230152 0.376972 82 | v 0.000857 2.203034 0.278326 83 | v 0.340770 2.020722 -0.827729 84 | v -0.001572 2.236625 -0.510379 85 | v 0.387762 1.851058 0.752603 86 | v 0.345248 1.986498 0.277266 87 | v 0.348644 2.086162 0.779447 88 | v 0.316793 1.949714 -1.298224 89 | v 0.363931 1.694586 -1.300893 90 | v 0.237521 1.671639 -1.409034 91 | v 0.393997 1.707422 -0.849117 92 | v 0.322240 0.962330 0.460341 93 | v 0.002397 2.300980 0.778292 94 | v 0.003405 2.459661 1.105573 95 | v 0.271300 2.287265 1.123781 96 | v 0.361686 2.210737 1.400266 97 | v 0.165486 2.480341 1.418549 98 | v 0.347221 1.463481 0.917809 99 | v 0.004360 2.532134 1.415981 100 | v 0.005420 2.449790 1.760340 101 | v 0.090252 2.140534 1.983268 102 | v 0.006206 2.117131 2.015380 103 | v 0.318444 1.116956 -0.624179 104 | v 0.217803 0.729859 -1.958590 105 | v 0.001698 2.277709 0.551420 106 | v -0.002711 2.224962 -0.880573 107 | v -0.003989 2.108801 -1.295432 108 | v -0.007781 1.934030 -1.405707 109 | v 0.396011 1.050529 -0.921016 110 | v 0.241414 1.112011 -0.585107 111 | v 0.309673 0.959790 -1.179388 112 | v 0.235997 0.965473 -1.257080 113 | v 0.292641 0.543343 -1.335545 114 | v 0.311984 0.605945 -1.247489 115 | v 0.167556 0.610286 -1.169759 116 | v 0.236941 0.561072 -1.387664 117 | v 0.160466 0.547620 -1.317982 118 | v 0.264299 0.710346 -1.048497 119 | v 0.360525 0.994469 0.549955 120 | v 0.312505 0.584293 0.532299 121 | v 0.155942 0.994469 0.460120 122 | v 0.205160 0.609048 0.499769 123 | v 0.247231 0.917507 0.779072 124 | v 0.319662 0.855394 0.685314 125 | v -0.005134 1.771302 -1.667421 126 | v 0.186257 1.791872 -1.427370 127 | v 0.261242 1.190196 -2.224325 128 | v 0.290269 0.864382 -2.036873 129 | v -0.005984 0.692981 -1.943286 130 | v 0.189160 1.286478 -2.278365 131 | v -0.210180 1.178991 -1.545032 132 | v -0.346600 1.230152 0.379113 133 | v -0.345862 2.020722 -0.825615 134 | v -0.383120 1.851058 0.754977 135 | v -0.343838 2.086162 0.781579 136 | v -0.343534 1.986498 0.279388 137 | v -0.324782 1.949714 -1.296249 138 | v -0.253098 1.671639 -1.407524 139 | v -0.371935 1.694586 -1.298627 140 | v -0.399218 1.707422 -0.846674 141 | v -0.319399 0.962330 0.462317 142 | v -0.264374 2.287265 1.125431 143 | v -0.353055 2.210737 1.402468 144 | v -0.156748 2.480341 1.419542 145 | v -0.341562 1.463481 0.919930 146 | v -0.078037 2.140534 1.983786 147 | v -0.322282 1.116956 -0.622205 148 | v -0.229861 0.729859 -1.957211 149 | v -0.401676 1.050529 -0.918560 150 | v -0.245012 1.112011 -0.583610 151 | v -0.316929 0.959790 -1.177459 152 | v -0.243734 0.965473 -1.255602 153 | v -0.300860 0.543343 -1.333718 154 | v -0.319660 0.605945 -1.245545 155 | v -0.174756 0.610286 -1.168705 156 | v -0.245482 0.561072 -1.386178 157 | v -0.168580 0.547620 -1.316969 158 | v -0.270751 0.710346 -1.046850 159 | v -0.309221 0.584293 0.534214 160 | v -0.357132 0.994469 0.552165 161 | v -0.202079 0.609048 0.501023 162 | v -0.153105 0.994469 0.461072 163 | v -0.242428 0.917507 0.780579 164 | v -0.315436 0.855394 0.687270 165 | v -0.274934 1.190196 -2.222673 166 | v -0.201947 1.791872 -1.426175 167 | v -0.302806 0.864382 -2.035047 168 | v -0.203187 1.286478 -2.277157 169 | v 0.259563 0.551180 -1.146396 170 | v 0.152462 0.150153 -1.167059 171 | v 0.317237 0.251441 -1.202886 172 | v 0.234760 0.003595 -1.183430 173 | v 0.318636 0.110469 -1.135521 174 | v 0.173618 0.225265 -1.152033 175 | v 0.189159 0.008088 -0.954959 176 | v 0.150578 -0.004187 -1.099514 177 | v 0.316912 -0.003522 -1.098958 178 | v 0.270191 0.009709 -0.955714 179 | v 0.235627 0.222217 -1.116211 180 | v 0.276842 0.261066 0.521427 181 | v 0.196676 0.174978 0.558265 182 | v 0.241628 0.198299 0.715101 183 | v 0.161944 0.218341 0.609650 184 | v 0.295108 0.203808 0.641258 185 | v 0.180817 0.027412 0.807383 186 | v 0.170605 -0.002059 0.590419 187 | v 0.301087 -0.001536 0.590836 188 | v 0.292105 0.019473 0.801544 189 | v 0.305760 0.176507 0.581185 190 | v 0.246683 0.007752 0.866235 191 | v -0.266619 0.551180 -1.144775 192 | v -0.159647 0.150153 -1.166098 193 | v -0.324638 0.251441 -1.200909 194 | v -0.242043 0.003595 -1.181962 195 | v -0.325623 0.110469 -1.133538 196 | v -0.180708 0.225265 -1.150942 197 | v -0.195036 0.008088 -0.953776 198 | v -0.157346 -0.004187 -1.098565 199 | v -0.323674 -0.003522 -1.096985 200 | v -0.276072 0.009709 -0.954032 201 | v -0.242497 0.222217 -1.114738 202 | v -0.273625 0.261066 0.523122 203 | v -0.193235 0.174978 0.559466 204 | v -0.237220 0.198299 0.716576 205 | v -0.158186 0.218341 0.610635 206 | v -0.291154 0.203808 0.643063 207 | v -0.175841 0.027412 0.808481 208 | v -0.166966 -0.002059 0.591458 209 | v -0.287163 0.019473 0.803328 210 | v -0.297443 -0.001536 0.592678 211 | v -0.302174 0.176507 0.583058 212 | v -0.241343 0.007752 0.867737 213 | vn 0.2940 -0.8622 -0.4126 214 | vn 0.2980 -0.8609 -0.4124 215 | vn 0.2967 -0.8613 -0.4125 216 | vn 0.1474 -0.7248 0.6730 217 | vn 0.2205 -0.9703 -0.0996 218 | vn 0.8134 0.1557 0.5605 219 | vn 0.9088 -0.0064 0.4172 220 | vn 0.7940 -0.3949 0.4622 221 | vn 0.9403 -0.3357 0.0559 222 | vn -0.3462 -0.4479 0.8244 223 | vn 0.2822 -0.1933 0.9397 224 | vn 0.3986 -0.9072 0.1347 225 | vn 0.2229 -0.9017 0.3704 226 | vn 0.4061 -0.8564 0.3189 227 | vn 0.0977 -0.9657 -0.2406 228 | vn 0.2485 -0.9681 -0.0309 229 | vn -0.0006 -0.9811 -0.1936 230 | vn -0.0022 -0.9811 -0.1936 231 | vn -0.9844 -0.0942 -0.1485 232 | vn -0.8261 -0.4179 0.3781 233 | vn 0.2233 -0.9747 0.0108 234 | vn 0.7132 -0.7005 -0.0272 235 | vn 0.6599 0.5686 -0.4912 236 | vn 0.9641 0.0323 -0.2636 237 | vn 0.9639 0.0330 -0.2640 238 | vn 0.9638 0.0330 -0.2646 239 | vn 0.6761 -0.7368 -0.0101 240 | vn 0.2931 -0.8625 -0.4125 241 | vn 0.1415 -0.9396 0.3116 242 | vn 0.2182 -0.9651 0.1445 243 | vn 0.2991 -0.9367 -0.1820 244 | vn 0.4759 0.7464 0.4651 245 | vn 0.9588 -0.1335 0.2507 246 | vn 0.5423 -0.6280 0.5581 247 | vn 0.9383 -0.1448 0.3140 248 | vn 0.9333 -0.3023 0.1937 249 | vn 0.8476 -0.4923 0.1980 250 | vn 0.1488 -0.9756 -0.1616 251 | vn 0.1482 -0.9756 -0.1621 252 | vn 0.1488 -0.9755 -0.1620 253 | vn 0.3475 -0.7386 0.5776 254 | vn 0.1885 -0.9223 0.3375 255 | vn 0.1743 -0.8930 -0.4149 256 | vn 0.1033 -0.9926 -0.0633 257 | vn 0.1388 -0.9759 -0.1684 258 | vn -0.8783 -0.3673 0.3062 259 | vn 0.5416 0.6241 -0.5631 260 | vn 0.2583 -0.9659 0.0171 261 | vn 0.9733 0.0010 -0.2296 262 | vn -0.0030 -0.3667 -0.9303 263 | vn -0.0029 -0.3644 -0.9312 264 | vn -0.0073 -0.3626 -0.9319 265 | vn -0.0082 -0.3622 -0.9321 266 | vn -0.3074 -0.8599 -0.4075 267 | vn -0.2998 -0.8625 -0.4078 268 | vn -0.2966 -0.8635 -0.4079 269 | vn -0.1433 -0.7248 0.6739 270 | vn -0.2211 -0.9703 -0.0982 271 | vn -0.8099 0.1558 0.5655 272 | vn -0.9062 -0.0064 0.4228 273 | vn -0.7911 -0.3949 0.4671 274 | vn -0.9400 -0.3357 0.0617 275 | vn 0.3512 -0.4479 0.8222 276 | vn -0.2764 -0.1933 0.9414 277 | vn -0.3978 -0.9072 0.1371 278 | vn -0.2206 -0.9017 0.3718 279 | vn -0.4042 -0.8564 0.3213 280 | vn -0.1001 -0.9666 -0.2358 281 | vn -0.2487 -0.9681 -0.0294 282 | vn 0.0010 -0.9811 -0.1936 283 | vn 0.9835 -0.0942 -0.1545 284 | vn 0.8284 -0.4179 0.3730 285 | vn -0.2233 -0.9747 0.0121 286 | vn -0.7133 -0.7005 -0.0228 287 | vn -0.6629 0.5686 -0.4871 288 | vn -0.9654 0.0330 -0.2587 289 | vn -0.6761 -0.7368 -0.0059 290 | vn -0.3098 -0.8591 -0.4074 291 | vn -0.1396 -0.9396 0.3125 292 | vn -0.2174 -0.9651 0.1458 293 | vn -0.3003 -0.9367 -0.1801 294 | vn -0.4731 0.7464 0.4680 295 | vn -0.9572 -0.1335 0.2566 296 | vn -0.5388 -0.6280 0.5614 297 | vn -0.9364 -0.1448 0.3198 298 | vn -0.9321 -0.3023 0.1994 299 | vn -0.8464 -0.4923 0.2032 300 | vn -0.1498 -0.9756 -0.1607 301 | vn -0.1497 -0.9755 -0.1609 302 | vn -0.1491 -0.9756 -0.1612 303 | vn -0.3439 -0.7386 0.5798 304 | vn -0.1864 -0.9223 0.3386 305 | vn -0.1779 -0.8969 -0.4049 306 | vn -0.1037 -0.9926 -0.0627 307 | vn -0.1398 -0.9759 -0.1676 308 | vn 0.8801 -0.3673 0.3007 309 | vn -0.5451 0.6241 -0.5597 310 | vn -0.2582 -0.9659 0.0187 311 | vn -0.9747 0.0011 -0.2236 312 | vn 0.0015 -0.3626 -0.9319 313 | vn 0.0024 -0.3622 -0.9321 314 | vn 0.0837 -0.2795 0.9565 315 | vn 0.2600 -0.3346 0.9058 316 | vn 0.4933 -0.8674 -0.0648 317 | vn 0.5553 0.8310 0.0337 318 | vn 0.9849 0.1684 -0.0401 319 | vn 0.9478 0.3187 0.0060 320 | vn 0.6318 0.1247 -0.7650 321 | vn 0.9806 0.1805 -0.0764 322 | vn 0.9826 0.1717 -0.0703 323 | vn 0.9824 0.1728 -0.0711 324 | vn 0.6376 -0.3798 -0.6702 325 | vn 0.6371 -0.3800 -0.6706 326 | vn 0.6390 -0.3846 -0.6661 327 | vn 0.1117 -0.3055 -0.9456 328 | vn 0.4881 0.7847 -0.3820 329 | vn 0.9799 0.1478 0.1338 330 | vn 0.8014 0.5899 -0.0987 331 | vn 0.9944 -0.0703 0.0791 332 | vn 0.9934 -0.0323 0.1098 333 | vn 0.2952 0.9294 0.2213 334 | vn 0.5402 0.8191 -0.1929 335 | vn 0.8091 0.2178 0.5459 336 | vn 0.5137 0.4244 -0.7456 337 | vn 0.6232 0.3902 0.6778 338 | vn 0.1471 0.8142 0.5617 339 | vn 0.7606 0.5487 0.3472 340 | vn 0.7956 -0.4441 0.4120 341 | vn 0.9976 -0.0685 0.0100 342 | vn 0.9547 -0.2523 0.1581 343 | vn -0.7385 0.6574 0.1500 344 | vn 0.4680 -0.2695 0.8416 345 | vn 0.9917 -0.1283 -0.0037 346 | vn 0.2889 -0.6414 0.7107 347 | vn 0.1727 0.6067 0.7759 348 | vn 0.5179 0.8248 -0.2271 349 | vn 0.5224 0.8388 -0.1532 350 | vn 0.2474 0.5132 -0.8219 351 | vn 0.9977 0.0104 -0.0667 352 | vn 0.1592 -0.1635 0.9736 353 | vn 0.2722 -0.1765 -0.9459 354 | vn -0.1744 -0.0745 -0.9819 355 | vn 0.7159 0.2193 -0.6629 356 | vn 0.9382 0.0713 -0.3386 357 | vn -0.3569 -0.6861 0.6339 358 | vn -0.6963 0.2191 -0.6835 359 | vn -0.9645 0.0679 -0.2550 360 | vn 0.3598 -0.6962 0.6212 361 | vn 0.8378 -0.4436 0.3182 362 | vn -0.9337 -0.2928 0.2060 363 | vn 0.9272 -0.0929 -0.3628 364 | vn -0.8888 -0.1578 -0.4302 365 | vn 0.6306 -0.2976 0.7168 366 | vn -0.5929 -0.3121 -0.7424 367 | vn 0.9981 -0.0556 0.0271 368 | vn -0.0189 -0.1047 -0.9943 369 | vn 0.5267 0.7015 -0.4801 370 | vn 0.9525 -0.1458 0.2675 371 | vn 0.8820 0.3239 -0.3423 372 | vn 0.9869 -0.0048 -0.1611 373 | vn 0.1756 -0.8968 0.4061 374 | vn 0.8877 -0.4593 0.0325 375 | vn 0.8144 0.3500 -0.4628 376 | vn 0.3112 0.6165 -0.7233 377 | vn -0.0240 -0.1831 0.9828 378 | vn 0.5141 0.8572 -0.0286 379 | vn 0.9857 0.1682 -0.0112 380 | vn 0.6064 0.1391 -0.7829 381 | vn 0.2555 0.4769 -0.8410 382 | vn 0.9803 0.1819 -0.0774 383 | vn 0.5253 0.8463 -0.0884 384 | vn 0.6392 -0.3854 -0.6654 385 | vn 0.5254 0.7808 -0.3380 386 | vn 0.8992 0.3968 -0.1841 387 | vn 0.9954 -0.0868 0.0406 388 | vn -0.0869 -0.4556 -0.8859 389 | vn 0.9981 -0.0461 0.0415 390 | vn 0.9981 0.0599 -0.0169 391 | vn 0.2792 0.8461 -0.4540 392 | vn 0.1325 0.6033 0.7865 393 | vn 0.5662 0.4777 0.6717 394 | vn 0.0319 0.7661 0.6419 395 | vn 0.9254 -0.1937 -0.3259 396 | vn -0.5679 -0.3483 0.7458 397 | vn 0.9904 -0.1372 -0.0170 398 | vn 0.4923 0.7414 -0.4560 399 | vn 0.9658 -0.0253 0.2580 400 | vn 0.8955 -0.2820 0.3444 401 | vn 0.2506 0.9468 0.2020 402 | vn 0.5577 0.8134 -0.1652 403 | vn 0.4291 0.8695 -0.2448 404 | vn 0.9536 -0.1163 -0.2778 405 | vn 0.5322 0.8463 0.0241 406 | vn 0.4459 -0.3088 0.8401 407 | vn 0.7224 -0.0559 -0.6892 408 | vn -0.6607 -0.1836 -0.7279 409 | vn -0.9675 -0.2130 0.1363 410 | vn 0.6505 -0.2968 0.6991 411 | vn -0.6268 -0.4252 -0.6529 412 | vn 0.4841 0.5331 0.6939 413 | vn 0.9779 -0.1218 0.1701 414 | vn 0.8310 0.5331 -0.1587 415 | vn 0.1626 -0.6971 0.6983 416 | vn 0.2778 0.7936 -0.5414 417 | vn 0.9949 0.0993 0.0186 418 | vn 0.9662 0.0424 -0.2543 419 | vn 0.2552 -0.8959 0.3638 420 | vn 0.8041 -0.5692 0.1714 421 | vn -0.0781 -0.2810 0.9565 422 | vn -0.2550 -0.3391 0.9055 423 | vn -0.4937 -0.8674 -0.0618 424 | vn -0.5551 0.8310 0.0371 425 | vn -0.9851 0.1684 -0.0340 426 | vn -0.9478 0.3187 0.0119 427 | vn -0.6564 0.1283 -0.7434 428 | vn -0.9810 0.1806 -0.0704 429 | vn -0.9828 0.1728 -0.0650 430 | vn -0.9830 0.1717 -0.0642 431 | vn -0.6588 -0.3896 -0.6436 432 | vn -0.6605 -0.3948 -0.6386 433 | vn -0.6586 -0.3895 -0.6439 434 | vn -0.1175 -0.3055 -0.9449 435 | vn -0.4905 0.7847 -0.3790 436 | vn -0.9791 0.1478 0.1398 437 | vn -0.8020 0.5899 -0.0938 438 | vn -0.9939 -0.0703 0.0852 439 | vn -0.9927 -0.0323 0.1160 440 | vn -0.2939 0.9294 0.2232 441 | vn -0.5414 0.8191 -0.1896 442 | vn -0.8057 0.2178 0.5509 443 | vn -0.5183 0.4244 -0.7424 444 | vn -0.6190 0.3902 0.6816 445 | vn -0.1436 0.8142 0.5626 446 | vn -0.7584 0.5487 0.3519 447 | vn -0.7931 -0.4441 0.4169 448 | vn -0.9975 -0.0685 0.0162 449 | vn -0.9537 -0.2523 0.1639 450 | vn 0.7394 0.6574 0.1454 451 | vn -0.4719 -0.2749 0.8377 452 | vn -0.9917 -0.1283 0.0024 453 | vn -0.2845 -0.6414 0.7125 454 | vn -0.1679 0.6067 0.7770 455 | vn -0.5193 0.8248 -0.2239 456 | vn -0.5233 0.8388 -0.1500 457 | vn -0.2557 0.5198 -0.8151 458 | vn -0.9981 0.0104 -0.0605 459 | vn -0.1532 -0.1635 0.9746 460 | vn -0.2780 -0.1765 -0.9442 461 | vn 0.1683 -0.0745 -0.9829 462 | vn -0.7200 0.2193 -0.6584 463 | vn -0.9403 0.0713 -0.3328 464 | vn 0.3608 -0.6861 0.6317 465 | vn 0.6921 0.2191 -0.6878 466 | vn 0.9630 0.0679 -0.2610 467 | vn -0.3559 -0.6962 0.6234 468 | vn -0.8358 -0.4436 0.3234 469 | vn 0.9350 -0.2928 0.2003 470 | vn -0.9294 -0.0929 -0.3571 471 | vn 0.8862 -0.1578 -0.4357 472 | vn -0.6261 -0.2976 0.7207 473 | vn 0.5883 -0.3121 -0.7460 474 | vn -0.9979 -0.0556 0.0333 475 | vn 0.0128 -0.1047 -0.9944 476 | vn -0.5198 0.7039 -0.4841 477 | vn -0.9457 -0.1612 0.2822 478 | vn -0.8820 0.3218 -0.3442 479 | vn -0.9879 -0.0048 -0.1551 480 | vn -0.1731 -0.8968 0.4072 481 | vn -0.8875 -0.4593 0.0379 482 | vn -0.8173 0.3500 -0.4578 483 | vn -0.3156 0.6165 -0.7213 484 | vn 0.0300 -0.1831 0.9826 485 | vn -0.5143 0.8572 -0.0254 486 | vn -0.9857 0.1682 -0.0052 487 | vn -0.6239 0.1463 -0.7677 488 | vn -0.2646 0.4817 -0.8354 489 | vn -0.9807 0.1819 -0.0714 490 | vn -0.5259 0.8463 -0.0852 491 | vn -0.6608 -0.3957 -0.6378 492 | vn -0.5275 0.7808 -0.3348 493 | vn -0.9004 0.3968 -0.1786 494 | vn -0.9951 -0.0868 0.0467 495 | vn 0.0814 -0.4556 -0.8864 496 | vn -0.9978 -0.0461 0.0476 497 | vn -0.9981 0.0599 -0.0108 498 | vn -0.2820 0.8461 -0.4523 499 | vn -0.1277 0.6033 0.7873 500 | vn -0.5621 0.4777 0.6752 501 | vn -0.0280 0.7661 0.6421 502 | vn -0.9274 -0.1937 -0.3202 503 | vn 0.5724 -0.3483 0.7423 504 | vn -0.9905 -0.1372 -0.0109 505 | vn -0.4911 0.7375 -0.4635 506 | vn -0.9642 -0.0253 0.2640 507 | vn -0.8933 -0.2820 0.3499 508 | vn -0.2494 0.9468 0.2035 509 | vn -0.5587 0.8134 -0.1618 510 | vn -0.4306 0.8695 -0.2421 511 | vn -0.9553 -0.1163 -0.2719 512 | vn -0.5320 0.8463 0.0273 513 | vn -0.4408 -0.3088 0.8428 514 | vn -0.7267 -0.0559 -0.6847 515 | vn 0.6562 -0.1836 -0.7319 516 | vn 0.9683 -0.2130 0.1304 517 | vn -0.6462 -0.2968 0.7031 518 | vn 0.6228 -0.4252 -0.6567 519 | vn -0.4798 0.5331 0.6968 520 | vn -0.9768 -0.1218 0.1761 521 | vn -0.8320 0.5331 -0.1536 522 | vn -0.1583 -0.6971 0.6993 523 | vn -0.2811 0.7936 -0.5397 524 | vn -0.9952 0.0959 0.0187 525 | vn -0.9677 0.0424 -0.2484 526 | vn -0.2529 -0.8959 0.3653 527 | vn -0.8030 -0.5692 0.1763 528 | vn 0.9089 -0.2377 0.3425 529 | vn -0.9989 0.0330 0.0338 530 | vn 0.8682 0.0746 0.4906 531 | vn 0.7261 -0.2906 -0.6231 532 | vn -0.6222 -0.2670 -0.7359 533 | vn -0.6230 -0.2669 -0.7353 534 | vn -0.6227 -0.2669 -0.7355 535 | vn -0.2208 0.0414 0.9744 536 | vn 0.9783 -0.0115 -0.2067 537 | vn 0.6042 -0.2869 -0.7434 538 | vn -0.9617 0.1196 0.2465 539 | vn 0.0037 -0.9965 0.0836 540 | vn 0.6877 -0.2312 -0.6883 541 | vn 0.9218 0.1746 0.3462 542 | vn 0.4902 0.5747 0.6553 543 | vn -0.3744 0.6083 0.6999 544 | vn 0.2901 0.0002 -0.9570 545 | vn -0.7641 -0.0715 -0.6411 546 | vn 0.7693 -0.0625 0.6358 547 | vn -0.5698 -0.1272 0.8119 548 | vn -0.9775 -0.0383 0.2076 549 | vn 0.9990 -0.0392 0.0227 550 | vn -0.9976 -0.0438 0.0529 551 | vn 0.0037 -0.9950 0.0994 552 | vn -0.8215 0.0175 -0.5700 553 | vn 0.2061 -0.0584 -0.9768 554 | vn 0.7064 0.4512 0.5453 555 | vn -0.6242 0.5314 0.5727 556 | vn 0.9866 0.0975 0.1306 557 | vn 0.7029 0.2200 -0.6764 558 | vn 0.9664 0.0546 -0.2511 559 | vn -0.0372 -0.7560 0.6535 560 | vn -0.6772 0.2315 -0.6985 561 | vn -0.4799 -0.4492 0.7536 562 | vn 0.7770 -0.4613 0.4282 563 | vn -0.6373 0.0254 0.7702 564 | vn 0.7263 0.0102 0.6873 565 | vn -0.6219 -0.2670 -0.7362 566 | vn -0.4927 0.1150 0.8626 567 | vn 0.6345 -0.2681 -0.7249 568 | vn -0.6610 -0.2941 -0.6904 569 | vn 0.0208 -0.9949 0.0987 570 | vn 0.0043 -0.9961 -0.0881 571 | vn 0.9497 0.0825 0.3021 572 | vn -0.9328 0.2032 0.2975 573 | vn -0.0046 0.6022 0.7983 574 | vn 0.2451 -0.1874 -0.9512 575 | vn 0.8508 -0.0764 -0.5198 576 | vn -0.8563 -0.0817 -0.5099 577 | vn 0.8104 -0.0699 0.5817 578 | vn -0.8012 -0.0468 0.5965 579 | vn -0.3039 -0.1214 -0.9450 580 | vn 0.9850 0.0044 0.1726 581 | vn 0.9987 -0.0238 0.0449 582 | vn 0.1820 -0.5252 -0.8313 583 | vn -0.3974 -0.9066 0.1419 584 | vn 0.2163 -0.9760 -0.0249 585 | vn 0.0039 -0.1792 -0.9838 586 | vn 0.6763 0.4770 0.5613 587 | vn -0.4635 0.5431 0.7002 588 | vn -0.9068 -0.2377 0.3481 589 | vn 0.9991 0.0330 0.0277 590 | vn -0.8652 0.0746 0.4959 591 | vn -0.7300 -0.2906 -0.6186 592 | vn 0.6177 -0.2669 -0.7397 593 | vn 0.6182 -0.2669 -0.7393 594 | vn 0.6185 -0.2669 -0.7391 595 | vn 0.2268 0.0414 0.9731 596 | vn -0.9796 -0.0115 -0.2007 597 | vn -0.6088 -0.2869 -0.7396 598 | vn 0.9632 0.1196 0.2406 599 | vn -0.0032 -0.9965 0.0837 600 | vn -0.6919 -0.2312 -0.6840 601 | vn -0.9196 0.1746 0.3518 602 | vn -0.4862 0.5747 0.6583 603 | vn 0.3787 0.6083 0.6975 604 | vn -0.2959 0.0002 -0.9552 605 | vn 0.7601 -0.0715 -0.6458 606 | vn -0.7654 -0.0625 0.6405 607 | vn 0.5748 -0.1272 0.8083 608 | vn 0.9787 -0.0383 0.2016 609 | vn -0.9988 -0.0392 0.0288 610 | vn 0.9979 -0.0438 0.0468 611 | vn -0.0031 -0.9950 0.0994 612 | vn 0.8179 0.0175 -0.5750 613 | vn -0.2121 -0.0583 -0.9755 614 | vn -0.7031 0.4512 0.5496 615 | vn 0.6277 0.5314 0.5688 616 | vn -0.9858 0.0975 0.1367 617 | vn -0.7071 0.2200 -0.6720 618 | vn -0.9679 0.0546 -0.2452 619 | vn 0.0412 -0.7560 0.6532 620 | vn 0.6728 0.2315 -0.7026 621 | vn 0.4846 -0.4492 0.7506 622 | vn -0.7744 -0.4613 0.4330 623 | vn 0.6421 0.0254 0.7662 624 | vn -0.7221 0.0102 0.6918 625 | vn 0.6174 -0.2670 -0.7400 626 | vn 0.4980 0.1150 0.8595 627 | vn -0.6390 -0.2681 -0.7210 628 | vn 0.6567 -0.2941 -0.6944 629 | vn -0.0202 -0.9949 0.0988 630 | vn -0.0048 -0.9961 -0.0881 631 | vn -0.9478 0.0826 0.3080 632 | vn 0.9347 0.2032 0.2918 633 | vn 0.0095 0.6022 0.7983 634 | vn -0.2509 -0.1874 -0.9497 635 | vn -0.8540 -0.0764 -0.5146 636 | vn 0.8532 -0.0817 -0.5152 637 | vn -0.8068 -0.0699 0.5867 638 | vn 0.8049 -0.0468 0.5916 639 | vn 0.2980 -0.1214 -0.9468 640 | vn -0.9839 0.0044 0.1787 641 | vn -0.9984 -0.0238 0.0511 642 | vn -0.1871 -0.5252 -0.8301 643 | vn 0.3982 -0.9066 0.1394 644 | vn -0.2165 -0.9760 -0.0236 645 | vn -0.0099 -0.1792 -0.9838 646 | vn -0.6728 0.4770 0.5654 647 | vn 0.4678 0.5431 0.6973 648 | vn 0.0084 0.0002 1.0000 649 | vn 0.0031 0.0002 1.0000 650 | vn -0.0022 0.0002 1.0000 651 | usemtl Fox_White_001 652 | s 1 653 | f 1//1 2//2 3//3 654 | f 4//4 5//4 6//4 655 | f 7//5 8//5 9//5 656 | f 10//6 11//6 12//6 657 | f 13//7 10//7 14//7 658 | f 8//8 15//8 10//8 659 | f 6//9 16//9 15//9 660 | f 5//10 17//10 18//10 661 | f 19//11 20//11 21//11 662 | f 22//12 9//12 13//12 663 | f 22//13 13//13 23//13 664 | f 24//14 6//14 7//14 665 | f 25//15 26//15 3//15 666 | f 27//16 28//16 29//16 667 | f 28//17 2//17 1//18 668 | f 1//19 26//19 30//19 669 | f 17//20 27//20 31//20 670 | f 32//21 33//21 34//21 671 | f 35//22 32//22 34//22 672 | f 36//23 37//23 38//23 673 | f 37//24 35//25 34//26 674 | f 29//27 39//27 40//27 675 | f 26//28 1//1 3//3 676 | f 4//29 17//29 5//29 677 | f 7//30 6//30 8//30 678 | f 22//31 7//31 9//31 679 | f 14//32 10//32 12//32 680 | f 13//33 9//33 10//33 681 | f 23//34 13//34 14//34 682 | f 9//35 8//35 10//35 683 | f 6//36 5//36 16//36 684 | f 8//37 6//37 15//37 685 | f 29//38 28//39 41//40 686 | f 24//41 4//41 6//41 687 | f 4//42 27//42 17//42 688 | f 42//43 25//43 3//43 689 | f 40//44 27//44 29//44 690 | f 41//40 28//39 1//45 691 | f 18//46 17//46 31//46 692 | f 43//47 36//47 38//47 693 | f 34//48 33//48 44//48 694 | f 38//49 37//49 34//49 695 | f 44//50 43//51 38//52 696 | f 34//53 44//50 38//52 697 | f 45//54 3//55 2//56 698 | f 4//57 46//57 47//57 699 | f 7//58 48//58 49//58 700 | f 50//59 12//59 51//59 701 | f 52//60 53//60 50//60 702 | f 49//61 50//61 54//61 703 | f 46//62 54//62 55//62 704 | f 47//63 56//63 57//63 705 | f 58//64 59//64 60//64 706 | f 22//65 52//65 48//65 707 | f 22//66 23//66 52//66 708 | f 24//67 7//67 46//67 709 | f 61//68 3//68 62//68 710 | f 27//69 63//69 28//69 711 | f 28//17 45//70 2//17 712 | f 45//71 64//71 62//71 713 | f 57//72 65//72 27//72 714 | f 66//73 67//73 33//73 715 | f 68//74 67//74 66//74 716 | f 36//75 69//75 70//75 717 | f 70//76 67//76 68//76 718 | f 63//77 71//77 72//77 719 | f 62//78 3//55 45//54 720 | f 4//79 47//79 57//79 721 | f 7//80 49//80 46//80 722 | f 22//81 48//81 7//81 723 | f 53//82 12//82 50//82 724 | f 52//83 50//83 48//83 725 | f 23//84 53//84 52//84 726 | f 48//85 50//85 49//85 727 | f 46//86 55//86 47//86 728 | f 49//87 54//87 46//87 729 | f 63//88 73//89 28//90 730 | f 24//91 46//91 4//91 731 | f 4//92 57//92 27//92 732 | f 74//93 3//93 61//93 733 | f 71//94 63//94 27//94 734 | f 73//89 45//95 28//90 735 | f 56//96 65//96 57//96 736 | f 43//97 69//97 36//97 737 | f 67//98 44//98 33//98 738 | f 69//99 67//99 70//99 739 | f 44//50 69//100 43//51 740 | f 67//101 69//100 44//50 741 | usemtl Fox_Brown_001 742 | f 42//102 3//102 75//102 743 | f 76//103 42//103 75//103 744 | f 39//104 77//104 40//104 745 | f 78//105 79//105 80//105 746 | f 81//106 82//106 83//106 747 | f 79//107 82//107 81//107 748 | f 84//108 85//108 86//108 749 | f 79//109 87//110 85//111 750 | f 85//112 25//113 42//114 751 | f 40//115 77//115 88//115 752 | f 83//116 89//116 90//116 753 | f 81//117 83//117 91//117 754 | f 92//118 91//118 93//118 755 | f 94//119 81//119 92//119 756 | f 16//120 92//120 20//120 757 | f 93//121 95//121 96//121 758 | f 91//122 90//122 95//122 759 | f 15//123 20//123 10//123 760 | f 92//124 93//124 21//124 761 | f 20//125 19//125 97//125 762 | f 11//126 98//126 12//126 763 | f 10//127 97//127 11//127 764 | f 5//128 94//128 16//128 765 | f 87//129 81//129 77//129 766 | f 20//130 92//130 21//130 767 | f 93//131 19//131 21//131 768 | f 86//132 42//132 76//132 769 | f 87//133 39//133 99//133 770 | f 76//134 75//134 100//134 771 | f 19//135 96//135 97//135 772 | f 82//136 78//136 101//136 773 | f 102//137 79//137 84//137 774 | f 103//138 84//138 104//138 775 | f 85//139 87//139 105//139 776 | f 39//140 29//140 106//140 777 | f 25//141 85//141 107//141 778 | f 26//142 25//142 108//142 779 | f 108//143 107//143 109//143 780 | f 107//144 105//144 110//144 781 | f 106//145 41//145 111//145 782 | f 30//146 108//146 112//146 783 | f 1//147 30//147 113//147 784 | f 99//148 106//148 114//148 785 | f 105//149 99//149 114//149 786 | f 41//150 1//150 113//150 787 | f 88//151 115//151 116//151 788 | f 31//152 117//152 118//152 789 | f 94//153 5//153 119//153 790 | f 27//154 40//154 117//154 791 | f 77//155 94//155 120//155 792 | f 117//156 88//156 118//156 793 | f 121//157 122//157 123//157 794 | f 86//158 76//158 124//158 795 | f 122//159 86//159 124//159 796 | f 123//160 124//160 35//160 797 | f 100//161 125//161 33//161 798 | f 124//162 100//162 32//162 799 | f 126//163 123//163 37//163 800 | f 36//164 126//164 37//164 801 | f 106//165 29//165 41//165 802 | f 80//166 79//166 102//166 803 | f 87//167 79//167 81//167 804 | f 122//168 84//168 86//168 805 | f 104//169 84//169 122//169 806 | f 84//170 79//109 85//111 807 | f 83//171 101//171 89//171 808 | f 86//172 85//112 42//114 809 | f 91//173 83//173 90//173 810 | f 92//174 81//174 91//174 811 | f 94//175 77//175 81//175 812 | f 117//176 40//176 88//176 813 | f 16//177 94//177 92//177 814 | f 15//178 16//178 20//178 815 | f 93//179 91//179 95//179 816 | f 97//180 96//180 98//180 817 | f 10//181 20//181 97//181 818 | f 11//182 97//182 98//182 819 | f 88//183 77//183 115//183 820 | f 119//184 5//184 18//184 821 | f 39//185 87//185 77//185 822 | f 121//186 104//186 122//186 823 | f 105//187 87//187 99//187 824 | f 124//188 76//188 100//188 825 | f 19//189 93//189 96//189 826 | f 83//190 82//190 101//190 827 | f 103//191 102//191 84//191 828 | f 107//192 85//192 105//192 829 | f 78//193 82//193 79//193 830 | f 99//194 39//194 106//194 831 | f 108//195 25//195 107//195 832 | f 30//196 26//196 108//196 833 | f 111//197 41//197 113//197 834 | f 120//198 94//198 119//198 835 | f 31//199 27//199 117//199 836 | f 115//200 77//200 120//200 837 | f 116//201 115//201 120//201 838 | f 126//202 121//202 123//202 839 | f 100//203 75//203 125//203 840 | f 36//204 121//204 126//204 841 | f 123//205 122//205 124//205 842 | f 37//24 123//206 35//25 843 | f 32//207 100//207 33//207 844 | f 35//208 124//208 32//208 845 | f 74//209 75//209 3//209 846 | f 127//210 75//210 74//210 847 | f 72//211 71//211 128//211 848 | f 78//212 80//212 129//212 849 | f 130//213 131//213 132//213 850 | f 129//214 130//214 132//214 851 | f 133//215 134//215 135//215 852 | f 129//216 135//217 136//218 853 | f 135//219 74//220 61//221 854 | f 71//222 137//222 128//222 855 | f 131//223 90//223 89//223 856 | f 130//224 138//224 131//224 857 | f 139//225 140//225 138//225 858 | f 141//226 139//226 130//226 859 | f 55//227 60//227 139//227 860 | f 140//228 96//228 95//228 861 | f 138//229 95//229 90//229 862 | f 54//230 50//230 60//230 863 | f 139//231 59//231 140//231 864 | f 60//232 142//232 58//232 865 | f 51//233 12//233 98//233 866 | f 50//234 51//234 142//234 867 | f 47//235 55//235 141//235 868 | f 136//236 128//236 130//236 869 | f 60//237 59//237 139//237 870 | f 140//238 59//238 58//238 871 | f 134//239 127//239 74//239 872 | f 136//240 143//240 72//240 873 | f 127//241 144//241 75//241 874 | f 58//242 142//242 96//242 875 | f 132//243 101//243 78//243 876 | f 102//244 133//244 129//244 877 | f 103//245 104//245 133//245 878 | f 135//246 145//246 136//246 879 | f 72//247 146//247 63//247 880 | f 61//248 147//248 135//248 881 | f 62//249 148//249 61//249 882 | f 148//250 149//250 147//250 883 | f 147//251 150//251 145//251 884 | f 146//252 151//252 73//252 885 | f 64//253 152//253 148//253 886 | f 45//254 153//254 64//254 887 | f 143//255 154//255 146//255 888 | f 145//256 154//256 143//256 889 | f 73//257 153//257 45//257 890 | f 137//258 155//258 156//258 891 | f 65//259 157//259 158//259 892 | f 141//260 159//260 47//260 893 | f 27//261 158//261 71//261 894 | f 128//262 160//262 141//262 895 | f 158//263 157//263 137//263 896 | f 121//264 161//264 162//264 897 | f 134//265 163//265 127//265 898 | f 162//266 163//266 134//266 899 | f 161//267 68//267 163//267 900 | f 144//268 33//268 125//268 901 | f 163//269 66//269 144//269 902 | f 164//270 70//270 161//270 903 | f 36//271 70//271 164//271 904 | f 146//272 73//272 63//272 905 | f 80//273 102//273 129//273 906 | f 136//274 130//274 129//274 907 | f 162//275 134//275 133//275 908 | f 104//276 162//276 133//276 909 | f 133//277 135//217 129//216 910 | f 131//278 89//278 101//278 911 | f 134//279 74//220 135//219 912 | f 138//280 90//280 131//280 913 | f 139//281 138//281 130//281 914 | f 141//282 130//282 128//282 915 | f 158//283 137//283 71//283 916 | f 55//284 139//284 141//284 917 | f 54//285 60//285 55//285 918 | f 140//286 95//286 138//286 919 | f 142//287 98//287 96//287 920 | f 50//288 142//288 60//288 921 | f 51//289 98//289 142//289 922 | f 137//290 156//290 128//290 923 | f 159//291 56//291 47//291 924 | f 72//292 128//292 136//292 925 | f 121//293 162//293 104//293 926 | f 145//294 143//294 136//294 927 | f 163//295 144//295 127//295 928 | f 58//296 96//296 140//296 929 | f 131//297 101//297 132//297 930 | f 103//298 133//298 102//298 931 | f 147//299 145//299 135//299 932 | f 78//300 129//300 132//300 933 | f 143//301 146//301 72//301 934 | f 148//302 147//302 61//302 935 | f 64//303 148//303 62//303 936 | f 151//304 153//304 73//304 937 | f 160//305 159//305 141//305 938 | f 65//306 158//306 27//306 939 | f 156//307 160//307 128//307 940 | f 155//308 160//308 156//308 941 | f 164//309 161//309 121//309 942 | f 144//310 125//310 75//310 943 | f 36//311 164//311 121//311 944 | f 161//312 163//312 162//312 945 | f 70//313 68//313 161//313 946 | f 66//314 33//314 144//314 947 | f 68//315 66//315 163//315 948 | usemtl Fox_BrownBlack_001 949 | f 110//316 114//316 165//316 950 | f 111//317 113//317 166//317 951 | f 110//318 165//318 167//318 952 | f 168//319 167//319 169//319 953 | f 113//320 112//321 168//322 954 | f 165//323 111//323 170//323 955 | f 109//324 110//324 167//324 956 | f 112//325 109//325 167//325 957 | f 171//326 166//326 172//326 958 | f 171//327 172//327 173//327 959 | f 168//328 169//328 173//328 960 | f 169//329 167//329 174//329 961 | f 167//330 175//330 174//330 962 | f 175//331 170//331 171//331 963 | f 118//332 116//332 176//332 964 | f 31//333 118//333 177//333 965 | f 120//334 119//334 178//334 966 | f 119//335 18//335 179//335 967 | f 18//336 31//336 179//336 968 | f 116//337 120//337 180//337 969 | f 181//338 179//338 182//338 970 | f 182//339 183//339 184//339 971 | f 179//340 177//340 182//340 972 | f 177//341 185//341 183//341 973 | f 180//342 178//342 186//342 974 | f 178//343 179//343 181//343 975 | f 185//344 180//344 184//344 976 | f 112//345 108//345 109//345 977 | f 109//346 107//346 110//346 978 | f 114//347 106//347 111//347 979 | f 113//348 30//348 112//348 980 | f 165//349 114//349 111//349 981 | f 110//350 105//350 114//350 982 | f 170//351 111//351 166//351 983 | f 167//352 165//352 175//352 984 | f 166//353 113//320 168//322 985 | f 175//354 165//354 170//354 986 | f 168//355 112//355 167//355 987 | f 172//356 166//356 168//356 988 | f 174//357 171//357 173//357 989 | f 168//358 173//358 172//358 990 | f 173//359 169//359 174//359 991 | f 171//360 170//360 166//360 992 | f 174//361 175//361 171//361 993 | f 118//362 88//362 116//362 994 | f 176//363 116//363 185//363 995 | f 179//364 31//364 177//364 996 | f 180//365 120//365 178//365 997 | f 178//366 119//366 179//366 998 | f 177//367 118//367 176//367 999 | f 185//368 116//368 180//368 1000 | f 183//369 185//369 184//369 1001 | f 177//370 176//370 185//370 1002 | f 181//371 182//371 186//371 1003 | f 186//372 182//372 184//372 1004 | f 182//373 177//373 183//373 1005 | f 184//374 180//374 186//374 1006 | f 186//375 178//375 181//375 1007 | f 150//376 187//376 154//376 1008 | f 151//377 188//377 153//377 1009 | f 150//378 189//378 187//378 1010 | f 190//379 191//379 189//379 1011 | f 153//380 190//381 152//382 1012 | f 187//383 192//383 151//383 1013 | f 149//384 189//384 150//384 1014 | f 152//385 189//385 149//385 1015 | f 193//386 194//386 188//386 1016 | f 193//387 195//387 194//387 1017 | f 190//388 195//388 191//388 1018 | f 191//389 196//389 189//389 1019 | f 189//390 196//390 197//390 1020 | f 197//391 193//391 192//391 1021 | f 157//392 198//392 155//392 1022 | f 65//393 199//393 157//393 1023 | f 160//394 200//394 159//394 1024 | f 159//395 201//395 56//395 1025 | f 56//396 201//396 65//396 1026 | f 155//397 202//397 160//397 1027 | f 203//398 204//398 201//398 1028 | f 204//399 205//399 206//399 1029 | f 201//400 204//400 199//400 1030 | f 199//401 206//401 207//401 1031 | f 202//402 208//402 200//402 1032 | f 200//403 203//403 201//403 1033 | f 207//404 205//404 202//404 1034 | f 152//405 149//405 148//405 1035 | f 149//406 150//406 147//406 1036 | f 154//407 151//407 146//407 1037 | f 153//408 152//408 64//408 1038 | f 187//409 151//409 154//409 1039 | f 150//410 154//410 145//410 1040 | f 192//411 188//411 151//411 1041 | f 189//412 197//412 187//412 1042 | f 188//413 190//381 153//380 1043 | f 197//414 192//414 187//414 1044 | f 190//415 189//415 152//415 1045 | f 194//416 190//416 188//416 1046 | f 196//417 195//417 193//417 1047 | f 190//418 194//418 195//418 1048 | f 195//419 196//419 191//419 1049 | f 193//420 188//420 192//420 1050 | f 196//421 193//421 197//421 1051 | f 157//422 155//422 137//422 1052 | f 198//423 207//423 155//423 1053 | f 201//424 199//424 65//424 1054 | f 202//425 200//425 160//425 1055 | f 200//426 201//426 159//426 1056 | f 199//427 198//427 157//427 1057 | f 207//428 202//428 155//428 1058 | f 206//429 205//429 207//429 1059 | f 199//430 207//430 198//430 1060 | f 203//431 208//431 204//431 1061 | f 208//432 205//432 204//432 1062 | f 204//433 206//433 199//433 1063 | f 205//434 208//434 202//434 1064 | f 208//435 203//435 200//435 1065 | usemtl Fox_nose_001 1066 | f 14//436 12//437 23//437 1067 | f 53//438 23//437 12//437 1068 | -------------------------------------------------------------------------------- /models/linux-mascot-tux.mtl: -------------------------------------------------------------------------------- 1 | # Blender MTL File: 'linux-mascot-tux.blend' 2 | # Material Count: 3 3 | 4 | newmtl black 5 | Ns 225.000000 6 | Ka 1.000000 1.000000 1.000000 7 | Kd 0.020379 0.020379 0.020379 8 | Ks 0.500000 0.500000 0.500000 9 | Ke 0.000000 0.000000 0.000000 10 | Ni 1.000000 11 | d 1.000000 12 | illum 2 13 | 14 | newmtl orange 15 | Ns 225.000000 16 | Ka 1.000000 1.000000 1.000000 17 | Kd 0.800000 0.205095 0.005634 18 | Ks 0.500000 0.500000 0.500000 19 | Ke 0.000000 0.000000 0.000000 20 | Ni 1.000000 21 | d 1.000000 22 | illum 2 23 | 24 | newmtl white 25 | Ns 225.000000 26 | Ka 1.000000 1.000000 1.000000 27 | Kd 0.841203 0.841203 0.841203 28 | Ks 0.500000 0.500000 0.500000 29 | Ke 0.000000 0.000000 0.000000 30 | Ni 1.000000 31 | d 1.000000 32 | illum 2 33 | -------------------------------------------------------------------------------- /models/non-convex.mtl: -------------------------------------------------------------------------------- 1 | # Blender MTL File: 'None' 2 | # Material Count: 1 3 | 4 | newmtl None 5 | Ns 500 6 | Ka 0.8 0.8 0.8 7 | Kd 0.8 0.8 0.8 8 | Ks 0.8 0.8 0.8 9 | d 1 10 | illum 2 11 | -------------------------------------------------------------------------------- /models/non-convex.obj: -------------------------------------------------------------------------------- 1 | # Blender v3.0.1 OBJ File: '' 2 | # www.blender.org 3 | mtllib non-convex.mtl 4 | o Cylinder 5 | v -0.500000 1.000000 -1.000000 6 | v 0.500000 1.000000 -1.000000 7 | v -0.500000 0.804910 -0.980785 8 | v 0.500000 0.804910 -0.980785 9 | v -0.500000 0.617316 -0.923880 10 | v 0.500000 0.617317 -0.923880 11 | v -0.500000 0.444430 -0.831470 12 | v 0.500000 0.444430 -0.831470 13 | v -0.500000 0.292893 -0.707107 14 | v 0.500000 0.292893 -0.707107 15 | v -0.500000 1.432519 -0.555570 16 | v 0.500000 1.432519 -0.555570 17 | v -0.500000 1.340109 -0.382683 18 | v 0.500000 1.340109 -0.382683 19 | v -0.500000 1.283203 -0.195090 20 | v 0.500000 1.283203 -0.195090 21 | v -0.500000 1.272125 0.000000 22 | v 0.500000 1.263988 0.000000 23 | v -0.500000 0.019215 0.195090 24 | v 0.500000 0.019215 0.195090 25 | v -0.500000 0.076120 0.382683 26 | v 0.500000 0.076120 0.382683 27 | v -0.500000 0.168530 0.555570 28 | v 0.500000 0.168530 0.555570 29 | v -0.500000 0.608311 0.211615 30 | v 0.500000 0.608311 0.211615 31 | v -0.500000 0.759848 0.335978 32 | v 0.500000 0.759848 0.335978 33 | v -0.500000 0.932735 0.428388 34 | v 0.500000 0.932735 0.428388 35 | v -0.500000 1.120328 0.485293 36 | v 0.500000 1.120328 0.485293 37 | v -0.500000 1.315418 0.504508 38 | v 0.500000 1.315418 0.504508 39 | v -0.500000 1.195090 0.980785 40 | v 0.500000 1.195090 0.980785 41 | v -0.500000 1.382683 0.923880 42 | v 0.500000 1.382683 0.923880 43 | v -0.500000 1.555570 -0.116311 44 | v 0.500000 1.555570 -0.116311 45 | v -0.500000 1.707107 0.707107 46 | v 0.500000 1.707107 0.707107 47 | v -0.500000 1.831469 0.555570 48 | v 0.500000 1.831470 0.555570 49 | v -0.500000 1.923879 0.382684 50 | v 0.500000 1.923880 0.382684 51 | v -0.500000 1.980785 0.195090 52 | v 0.500000 1.980785 0.195090 53 | v -0.500000 2.000000 -0.000000 54 | v 0.500000 2.000000 -0.000000 55 | v -0.500000 1.980785 -0.195090 56 | v 0.500000 1.980785 -0.195090 57 | v -0.500000 1.923879 -0.382684 58 | v 0.500000 1.923879 -0.382684 59 | v -0.500000 1.716386 0.302921 60 | v 0.500000 1.716386 0.302921 61 | v -0.500000 1.707107 -0.707107 62 | v 0.500000 1.707107 -0.707107 63 | v -0.500000 1.555570 -0.831470 64 | v 0.500000 1.555570 -0.831470 65 | v -0.500000 1.382683 -0.923880 66 | v 0.500000 1.382683 -0.923880 67 | v -0.500000 1.195090 -0.980785 68 | v 0.500000 1.195090 -0.980785 69 | vt 1.000000 0.500000 70 | vt 1.000000 1.000000 71 | vt 0.968750 1.000000 72 | vt 0.968750 0.500000 73 | vt 0.937500 1.000000 74 | vt 0.937500 0.500000 75 | vt 0.906250 1.000000 76 | vt 0.906250 0.500000 77 | vt 0.875000 1.000000 78 | vt 0.875000 0.500000 79 | vt 0.843750 1.000000 80 | vt 0.843750 0.500000 81 | vt 0.812500 1.000000 82 | vt 0.812500 0.500000 83 | vt 0.781250 1.000000 84 | vt 0.781250 0.500000 85 | vt 0.750000 1.000000 86 | vt 0.750000 0.500000 87 | vt 0.718750 1.000000 88 | vt 0.718750 0.500000 89 | vt 0.687500 1.000000 90 | vt 0.687500 0.500000 91 | vt 0.656250 1.000000 92 | vt 0.656250 0.500000 93 | vt 0.625000 1.000000 94 | vt 0.625000 0.500000 95 | vt 0.593750 1.000000 96 | vt 0.593750 0.500000 97 | vt 0.562500 1.000000 98 | vt 0.562500 0.500000 99 | vt 0.531250 1.000000 100 | vt 0.531250 0.500000 101 | vt 0.500000 1.000000 102 | vt 0.500000 0.500000 103 | vt 0.468750 1.000000 104 | vt 0.468750 0.500000 105 | vt 0.437500 1.000000 106 | vt 0.437500 0.500000 107 | vt 0.406250 1.000000 108 | vt 0.406250 0.500000 109 | vt 0.375000 1.000000 110 | vt 0.375000 0.500000 111 | vt 0.343750 1.000000 112 | vt 0.343750 0.500000 113 | vt 0.312500 1.000000 114 | vt 0.312500 0.500000 115 | vt 0.281250 1.000000 116 | vt 0.281250 0.500000 117 | vt 0.250000 1.000000 118 | vt 0.250000 0.500000 119 | vt 0.218750 1.000000 120 | vt 0.218750 0.500000 121 | vt 0.187500 1.000000 122 | vt 0.187500 0.500000 123 | vt 0.156250 1.000000 124 | vt 0.156250 0.500000 125 | vt 0.125000 1.000000 126 | vt 0.125000 0.500000 127 | vt 0.093750 1.000000 128 | vt 0.093750 0.500000 129 | vt 0.062500 1.000000 130 | vt 0.062500 0.500000 131 | vt 0.296822 0.485388 132 | vt 0.250000 0.490000 133 | vt 0.203178 0.485388 134 | vt 0.158156 0.471731 135 | vt 0.116663 0.449553 136 | vt 0.080294 0.419706 137 | vt 0.050447 0.383337 138 | vt 0.028269 0.341844 139 | vt 0.014612 0.296822 140 | vt 0.010000 0.250000 141 | vt 0.014612 0.203178 142 | vt 0.028269 0.158156 143 | vt 0.050447 0.116663 144 | vt 0.080294 0.080294 145 | vt 0.116663 0.050447 146 | vt 0.158156 0.028269 147 | vt 0.203178 0.014612 148 | vt 0.250000 0.010000 149 | vt 0.296822 0.014612 150 | vt 0.341844 0.028269 151 | vt 0.383337 0.050447 152 | vt 0.419706 0.080294 153 | vt 0.449553 0.116663 154 | vt 0.471731 0.158156 155 | vt 0.485388 0.203178 156 | vt 0.490000 0.250000 157 | vt 0.485388 0.296822 158 | vt 0.471731 0.341844 159 | vt 0.449553 0.383337 160 | vt 0.419706 0.419706 161 | vt 0.383337 0.449553 162 | vt 0.341844 0.471731 163 | vt 0.031250 1.000000 164 | vt 0.031250 0.500000 165 | vt 0.000000 1.000000 166 | vt 0.000000 0.500000 167 | vt 0.750000 0.490000 168 | vt 0.796822 0.485388 169 | vt 0.841844 0.471731 170 | vt 0.883337 0.449553 171 | vt 0.919706 0.419706 172 | vt 0.949553 0.383337 173 | vt 0.971731 0.341844 174 | vt 0.985388 0.296822 175 | vt 0.990000 0.250000 176 | vt 0.985388 0.203178 177 | vt 0.971731 0.158156 178 | vt 0.949553 0.116663 179 | vt 0.919706 0.080294 180 | vt 0.883337 0.050447 181 | vt 0.841844 0.028269 182 | vt 0.796822 0.014612 183 | vt 0.750000 0.010000 184 | vt 0.703178 0.014612 185 | vt 0.658156 0.028269 186 | vt 0.616663 0.050447 187 | vt 0.580294 0.080294 188 | vt 0.550447 0.116663 189 | vt 0.528269 0.158156 190 | vt 0.514612 0.203178 191 | vt 0.510000 0.250000 192 | vt 0.514612 0.296822 193 | vt 0.528269 0.341844 194 | vt 0.550447 0.383337 195 | vt 0.580294 0.419706 196 | vt 0.616663 0.449553 197 | vt 0.658156 0.471731 198 | vt 0.703178 0.485388 199 | vn 0.0000 -0.0980 -0.9952 200 | vn 0.0000 -0.2903 -0.9569 201 | vn 0.0000 -0.4714 -0.8819 202 | vn 0.0000 -0.6344 -0.7730 203 | vn 0.0000 -0.1318 0.9913 204 | vn 0.0000 -0.8819 -0.4714 205 | vn 0.0000 -0.9569 -0.2903 206 | vn -0.0041 -0.9970 -0.0774 207 | vn -0.0006 -0.1543 -0.9880 208 | vn 0.0000 -0.9569 0.2903 209 | vn 0.0000 -0.8819 0.4714 210 | vn -0.0000 0.6161 0.7877 211 | vn 0.0000 -0.6344 0.7730 212 | vn 0.0000 -0.4714 0.8819 213 | vn 0.0000 -0.2903 0.9569 214 | vn 0.0000 -0.0980 0.9952 215 | vn 0.0000 -0.9695 -0.2449 216 | vn -0.0000 0.2903 0.9569 217 | vn -0.0000 0.9865 0.1640 218 | vn 0.0000 -0.9835 0.1810 219 | vn -0.0000 0.7730 0.6344 220 | vn -0.0000 0.8819 0.4714 221 | vn -0.0000 0.9569 0.2903 222 | vn -0.0000 0.9952 0.0980 223 | vn -0.0000 0.9952 -0.0980 224 | vn -0.0000 0.9569 -0.2903 225 | vn 0.0000 -0.9571 -0.2897 226 | vn 0.0000 1.0000 -0.0092 227 | vn -0.0000 0.6344 -0.7730 228 | vn -0.0000 0.4714 -0.8819 229 | vn 1.0000 0.0000 -0.0000 230 | vn -0.0000 0.2903 -0.9569 231 | vn 0.0000 0.0980 -0.9952 232 | vn -1.0000 -0.0000 -0.0000 233 | usemtl None 234 | s off 235 | f 1/1/1 2/2/1 4/3/1 3/4/1 236 | f 3/4/2 4/3/2 6/5/2 5/6/2 237 | f 5/6/3 6/5/3 8/7/3 7/8/3 238 | f 7/8/4 8/7/4 10/9/4 9/10/4 239 | f 9/10/5 10/9/5 12/11/5 11/12/5 240 | f 11/12/6 12/11/6 14/13/6 13/14/6 241 | f 13/14/7 14/13/7 16/15/7 15/16/7 242 | f 15/16/8 16/15/8 18/17/8 17/18/8 243 | f 17/18/9 18/17/9 20/19/9 19/20/9 244 | f 19/20/10 20/19/10 22/21/10 21/22/10 245 | f 21/22/11 22/21/11 24/23/11 23/24/11 246 | f 23/24/12 24/23/12 26/25/12 25/26/12 247 | f 25/26/13 26/25/13 28/27/13 27/28/13 248 | f 27/28/14 28/27/14 30/29/14 29/30/14 249 | f 29/30/15 30/29/15 32/31/15 31/32/15 250 | f 31/32/16 32/31/16 34/33/16 33/34/16 251 | f 33/34/17 34/33/17 36/35/17 35/36/17 252 | f 35/36/18 36/35/18 38/37/18 37/38/18 253 | f 37/38/19 38/37/19 40/39/19 39/40/19 254 | f 39/40/20 40/39/20 42/41/20 41/42/20 255 | f 41/42/21 42/41/21 44/43/21 43/44/21 256 | f 43/44/22 44/43/22 46/45/22 45/46/22 257 | f 45/46/23 46/45/23 48/47/23 47/48/23 258 | f 47/48/24 48/47/24 50/49/24 49/50/24 259 | f 49/50/25 50/49/25 52/51/25 51/52/25 260 | f 51/52/26 52/51/26 54/53/26 53/54/26 261 | f 53/54/27 54/53/27 56/55/27 55/56/27 262 | f 55/56/28 56/55/28 58/57/28 57/58/28 263 | f 57/58/29 58/57/29 60/59/29 59/60/29 264 | f 59/60/30 60/59/30 62/61/30 61/62/30 265 | f 4/63/31 2/64/31 64/65/31 62/66/31 60/67/31 58/68/31 56/69/31 54/70/31 52/71/31 50/72/31 48/73/31 46/74/31 44/75/31 42/76/31 40/77/31 38/78/31 36/79/31 34/80/31 32/81/31 30/82/31 28/83/31 26/84/31 24/85/31 22/86/31 20/87/31 18/88/31 16/89/31 14/90/31 12/91/31 10/92/31 8/93/31 6/94/31 266 | f 61/62/32 62/61/32 64/95/32 63/96/32 267 | f 63/96/33 64/95/33 2/97/33 1/98/33 268 | f 1/99/34 3/100/34 5/101/34 7/102/34 9/103/34 11/104/34 13/105/34 15/106/34 17/107/34 19/108/34 21/109/34 23/110/34 25/111/34 27/112/34 29/113/34 31/114/34 33/115/34 35/116/34 37/117/34 39/118/34 41/119/34 43/120/34 45/121/34 47/122/34 49/123/34 51/124/34 53/125/34 55/126/34 57/127/34 59/128/34 61/129/34 63/130/34 269 | -------------------------------------------------------------------------------- /models/shiba-inu-binary.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/autopawn/3d-ascii-viewer/d122eb600e58d79ced65ec20eb49a56fcdcf5693/models/shiba-inu-binary.stl -------------------------------------------------------------------------------- /models/shiba-inu.mtl: -------------------------------------------------------------------------------- 1 | # Blender MTL File: 'None' 2 | # Material Count: 3 3 | 4 | newmtl Shiba_Brown 5 | Ns 225.000000 6 | Ka 1.000000 1.000000 1.000000 7 | Kd 0.679543 0.263325 0.040479 8 | Ks 0.500000 0.500000 0.500000 9 | Ke 0.000000 0.000000 0.000000 10 | Ni 1.000000 11 | d 1.000000 12 | illum 2 13 | 14 | newmtl Shiba_Nose 15 | Ns 225.000000 16 | Ka 1.000000 1.000000 1.000000 17 | Kd 0.004896 0.004896 0.004896 18 | Ks 0.500000 0.500000 0.500000 19 | Ke 0.000000 0.000000 0.000000 20 | Ni 1.000000 21 | d 1.000000 22 | illum 2 23 | 24 | newmtl Shiba_white 25 | Ns 225.000000 26 | Ka 1.000000 1.000000 1.000000 27 | Kd 0.715694 0.693872 0.644480 28 | Ks 0.500000 0.500000 0.500000 29 | Ke 0.000000 0.000000 0.000000 30 | Ni 1.000000 31 | d 1.000000 32 | illum 2 33 | -------------------------------------------------------------------------------- /models/shiba-inu.obj: -------------------------------------------------------------------------------- 1 | # Blender v3.0.1 OBJ File: '' 2 | # www.blender.org 3 | mtllib shiba-inu.mtl 4 | o Cube_001_Cube.001 5 | v 0.312712 1.430460 0.172619 6 | v 0.258624 1.117427 -0.196158 7 | v 0.161307 1.987979 -0.481371 8 | v 0.196444 1.557294 1.407927 9 | v 0.167794 2.562413 1.115820 10 | v 0.123855 2.167642 0.835994 11 | v 0.165525 1.338289 -1.183889 12 | v 0.108149 1.749811 -1.087702 13 | v 0.060662 1.207337 -1.173612 14 | v 0.164152 1.953858 -0.192723 15 | v 0.166585 0.758505 -0.867075 16 | v 0.261263 1.272117 -1.097737 17 | v 0.341785 0.386025 -1.167379 18 | v 0.190391 0.223167 -1.333148 19 | v 0.332712 0.609739 -1.290853 20 | v 0.178051 0.496200 -1.085607 21 | v 0.264035 0.650935 -1.351880 22 | v 0.176518 0.161571 -1.129806 23 | v 0.201187 0.000000 -0.971033 24 | v 0.269675 2.025049 1.726648 25 | v 0.374852 2.431265 1.480388 26 | v 0.432909 2.761328 1.536789 27 | v 0.275394 0.876507 1.024392 28 | v 0.110432 0.719781 0.698794 29 | v 0.142922 0.365281 0.883697 30 | v 0.109071 0.048132 0.917991 31 | v 0.266643 0.225398 0.918074 32 | v 0.279323 0.069327 1.004253 33 | v 0.136846 0.068890 1.034779 34 | v 0.201659 0.043903 0.859742 35 | v 0.142039 0.000000 0.892406 36 | v 0.249677 0.000000 0.937159 37 | v 0.209109 0.909657 0.273690 38 | v 0.335057 1.673683 -0.607903 39 | v 0.082757 1.918605 -0.937710 40 | v 0.079650 1.134529 -0.468378 41 | v 0.359936 1.974849 1.321358 42 | v 0.323581 1.123800 1.029274 43 | v 0.359608 1.491539 -0.383299 44 | v 0.215538 2.278617 0.992013 45 | v 0.059452 1.841274 -1.009734 46 | v 0.133329 1.981842 0.557776 47 | v 0.327333 1.201648 -0.477592 48 | v 0.280297 0.930376 -1.221547 49 | v 0.351990 0.709384 -0.939987 50 | v 0.170358 0.916004 -1.216315 51 | v 0.190596 0.322595 -1.165600 52 | v 0.181895 0.637433 -1.349220 53 | v 0.294504 0.168202 -1.133257 54 | v 0.295985 0.069075 -1.227033 55 | v 0.271589 0.000000 -1.017624 56 | v 0.265718 0.194885 -1.319261 57 | v 0.259297 0.000000 -0.948597 58 | v 0.227988 0.000000 -1.206048 59 | v 0.263707 2.665215 1.587063 60 | v 0.270852 1.846939 1.535907 61 | v 0.320494 2.276561 1.851961 62 | v 0.031141 2.385038 2.235880 63 | v 0.182218 2.462673 1.906314 64 | v 0.179119 2.182258 1.991715 65 | v 0.247753 0.840367 0.680420 66 | v 0.253187 0.267131 0.724932 67 | v 0.280314 0.428538 0.877881 68 | v 0.112538 0.266829 0.730999 69 | v 0.221129 0.000000 1.165707 70 | v 0.141957 0.000000 1.160737 71 | v 0.024706 2.345220 2.244121 72 | v 0.038413 2.325125 2.188100 73 | v 0.072883 2.015119 -1.077075 74 | v 0.063247 2.100795 -0.955069 75 | v 0.051816 2.186338 -0.841558 76 | v 0.024460 2.158166 -0.682572 77 | v 0.126643 1.064308 -0.557162 78 | v 0.031219 2.299803 -0.893242 79 | v 0.260246 1.533108 -1.124088 80 | v 0.275310 2.618987 1.304255 81 | v 0.090065 0.800052 0.710572 82 | v 0.167427 0.946375 1.056478 83 | v -0.312712 1.430460 0.172619 84 | v -0.258624 1.117427 -0.196158 85 | v -0.161307 1.987979 -0.481371 86 | v 0.000000 2.258313 0.906345 87 | v 0.000000 2.666511 1.170273 88 | v -0.196444 1.557294 1.407927 89 | v -0.167794 2.562413 1.115820 90 | v -0.123855 2.167642 0.835994 91 | v -0.165525 1.338289 -1.183889 92 | v -0.108149 1.749811 -1.087702 93 | v -0.060662 1.207337 -1.173612 94 | v -0.164152 1.953858 -0.192723 95 | v -0.166585 0.758505 -0.867075 96 | v -0.261263 1.272117 -1.097737 97 | v -0.341785 0.386025 -1.167379 98 | v -0.190391 0.223167 -1.333148 99 | v -0.332712 0.609739 -1.290853 100 | v -0.178051 0.496200 -1.085607 101 | v -0.264035 0.650935 -1.351880 102 | v -0.176518 0.161571 -1.129806 103 | v -0.201187 0.000000 -0.971033 104 | v -0.269675 2.025049 1.726648 105 | v -0.374852 2.431265 1.480388 106 | v 0.000000 2.730493 1.524051 107 | v 0.000000 2.516165 1.918361 108 | v 0.000000 2.334302 2.249736 109 | v -0.432909 2.761328 1.536789 110 | v -0.275394 0.876507 1.024392 111 | v -0.110432 0.719781 0.698794 112 | v -0.142922 0.365281 0.883697 113 | v -0.109071 0.048132 0.917991 114 | v -0.266643 0.225398 0.918074 115 | v -0.284867 0.069327 1.004253 116 | v -0.136846 0.068890 1.034779 117 | v -0.201659 0.043903 0.859742 118 | v -0.142039 0.000000 0.892406 119 | v -0.261542 0.000000 0.937159 120 | v 0.000000 1.092736 -0.404034 121 | v -0.209109 0.909657 0.273690 122 | v -0.335057 1.673683 -0.607903 123 | v -0.082757 1.918605 -0.937710 124 | v -0.079650 1.134529 -0.468378 125 | v -0.359936 1.974849 1.321358 126 | v 0.000000 1.531564 1.534343 127 | v -0.323581 1.123800 1.029274 128 | v -0.359608 1.491539 -0.383299 129 | v 0.000000 0.917192 1.094686 130 | v -0.215538 2.278617 0.992013 131 | v 0.000000 0.796806 0.492645 132 | v 0.000000 1.536255 -1.183982 133 | v -0.059452 1.841274 -1.009734 134 | v -0.133329 1.981842 0.557776 135 | v -0.327333 1.201648 -0.477592 136 | v -0.280297 0.930376 -1.221547 137 | v -0.351990 0.709384 -0.939987 138 | v -0.170358 0.916004 -1.216315 139 | v -0.190596 0.322595 -1.165600 140 | v -0.181895 0.637433 -1.349220 141 | v -0.294504 0.168202 -1.133257 142 | v -0.295985 0.069075 -1.227033 143 | v -0.271589 0.000000 -1.017624 144 | v -0.265718 0.194885 -1.319261 145 | v -0.259297 0.000000 -0.948597 146 | v -0.227988 0.000000 -1.206048 147 | v -0.263707 2.665215 1.587063 148 | v 0.000000 1.937820 1.720714 149 | v -0.270852 1.846939 1.535907 150 | v -0.320494 2.276561 1.851961 151 | v 0.000000 2.391077 2.258036 152 | v -0.031141 2.385038 2.235880 153 | v 0.000000 2.101209 1.991491 154 | v -0.182218 2.462673 1.906314 155 | v -0.179119 2.182258 1.991715 156 | v -0.247753 0.840367 0.680420 157 | v -0.253187 0.267131 0.724932 158 | v -0.280314 0.428538 0.877881 159 | v -0.112538 0.266829 0.730999 160 | v -0.221129 0.000000 1.165707 161 | v -0.141957 0.000000 1.160737 162 | v -0.024706 2.345220 2.244121 163 | v -0.038413 2.325125 2.188100 164 | v -0.072883 2.015119 -1.077075 165 | v 0.000000 2.269508 -0.987160 166 | v 0.000000 2.344313 -0.855865 167 | v -0.063247 2.100795 -0.955069 168 | v 0.000000 2.165076 -0.656916 169 | v 0.000000 2.120235 -0.684493 170 | v 0.000000 2.075669 -1.071605 171 | v 0.000000 1.943938 -0.942950 172 | v -0.051816 2.186338 -0.841558 173 | v -0.024460 2.158166 -0.682572 174 | v 0.000000 2.160307 -0.870440 175 | v 0.000000 1.305838 -1.196901 176 | v -0.126643 1.064308 -0.557162 177 | v -0.031219 2.299803 -0.893242 178 | v -0.260246 1.533108 -1.124088 179 | v -0.275310 2.618987 1.304255 180 | v -0.090065 0.800052 0.710572 181 | v -0.167427 0.946375 1.056478 182 | v 0.000000 2.012523 -0.335082 183 | v 0.000000 1.250952 -1.097438 184 | v 0.000000 1.800178 -1.066409 185 | v 0.000000 2.043030 0.539658 186 | vn 0.4189 0.9079 -0.0166 187 | vn 0.9927 -0.0469 -0.1111 188 | vn 0.0701 0.6685 -0.7404 189 | vn 0.9486 0.1472 -0.2802 190 | vn 0.3251 0.8155 -0.4788 191 | vn 0.5507 -0.4516 0.7020 192 | vn 0.9706 -0.2339 0.0562 193 | vn -0.1557 0.0473 -0.9867 194 | vn -0.9813 -0.1466 0.1245 195 | vn 0.9869 0.1339 -0.0899 196 | vn -0.0990 0.4251 -0.8997 197 | vn 0.7789 0.2515 -0.5744 198 | vn -0.9992 -0.0274 -0.0293 199 | vn 0.2702 0.9519 -0.1445 200 | vn 0.9907 -0.0724 0.1148 201 | vn 0.1028 0.8739 0.4750 202 | vn 0.8895 0.2475 0.3841 203 | vn 0.9090 -0.1869 0.3727 204 | vn 0.8422 -0.0565 -0.5362 205 | vn -0.5228 0.8376 -0.1584 206 | vn 0.0972 -0.2874 0.9529 207 | vn 0.9799 -0.0177 -0.1986 208 | vn -0.2092 0.0898 -0.9737 209 | vn 0.2999 0.4234 -0.8549 210 | vn 0.9853 -0.0039 -0.1706 211 | vn 0.3612 0.9319 -0.0325 212 | vn 0.9903 -0.1352 -0.0305 213 | vn 0.9562 0.2912 0.0284 214 | vn 0.6630 0.5505 -0.5073 215 | vn 0.8558 0.4529 -0.2498 216 | vn 0.4171 0.7623 -0.4949 217 | vn 0.3934 0.8627 0.3177 218 | vn 0.9414 -0.1448 0.3046 219 | vn 0.8187 -0.1704 0.5484 220 | vn 0.9900 -0.0103 -0.1407 221 | vn 0.9391 0.0853 -0.3330 222 | vn 0.9226 0.1599 -0.3510 223 | vn 0.7578 0.3638 -0.5416 224 | vn -0.0580 0.8293 -0.5558 225 | vn 0.0097 0.4069 -0.9134 226 | vn 0.0495 0.9925 -0.1120 227 | vn 0.2984 0.9346 -0.1934 228 | vn 0.9311 0.3264 0.1630 229 | vn 0.7398 0.2652 -0.6184 230 | vn 0.6457 -0.0521 -0.7618 231 | vn -0.9932 -0.0995 0.0603 232 | vn -0.0984 0.4253 -0.8997 233 | vn -0.0206 -0.0714 -0.9972 234 | vn -0.9960 0.0772 -0.0446 235 | vn 0.2484 0.9532 -0.1724 236 | vn 0.8020 0.5007 0.3258 237 | vn 0.6738 0.5490 0.4946 238 | vn -0.9869 -0.0063 0.1613 239 | vn 0.1796 -0.3040 0.9356 240 | vn 0.9842 0.1717 -0.0428 241 | vn 0.9410 0.2660 0.2091 242 | vn 0.8383 -0.5430 0.0480 243 | vn 0.5977 -0.4200 0.6829 244 | vn 0.1854 0.6928 -0.6969 245 | vn -0.0351 0.0911 0.9952 246 | vn 0.9856 0.1669 -0.0265 247 | vn 0.6962 -0.2281 0.6807 248 | vn 0.1837 0.7468 -0.6392 249 | vn 0.9991 -0.0341 -0.0249 250 | vn 0.3604 0.8167 -0.4508 251 | vn -0.0630 0.1215 -0.9906 252 | vn 0.7235 0.2568 -0.6408 253 | vn -0.7714 -0.2020 -0.6034 254 | vn 0.2474 0.9625 0.1113 255 | vn 0.8821 0.4688 0.0467 256 | vn 0.8128 0.5386 -0.2218 257 | vn 0.8247 0.5039 -0.2567 258 | vn 0.9824 -0.1718 -0.0740 259 | vn 0.9351 -0.2737 0.2251 260 | vn 0.6379 -0.0749 -0.7664 261 | vn -0.9800 -0.1897 0.0609 262 | vn -0.9994 -0.0215 -0.0261 263 | vn 0.2667 0.7816 0.5639 264 | vn -0.0647 -0.0779 -0.9949 265 | vn -0.0428 -0.0711 -0.9966 266 | vn -0.9061 -0.2768 0.3198 267 | vn -0.0493 0.1971 0.9792 268 | vn 0.9762 -0.1397 -0.1659 269 | vn 0.0619 -0.7941 0.6047 270 | vn 0.5198 -0.8351 -0.1800 271 | vn 0.9943 0.1068 0.0035 272 | vn -0.4189 0.9079 -0.0166 273 | vn -0.9927 -0.0469 -0.1111 274 | vn -0.0701 0.6685 -0.7404 275 | vn -0.9486 0.1472 -0.2802 276 | vn -0.3251 0.8155 -0.4788 277 | vn -0.5507 -0.4516 0.7020 278 | vn -0.9706 -0.2339 0.0562 279 | vn 0.1557 0.0473 -0.9867 280 | vn 0.9813 -0.1466 0.1245 281 | vn -0.9869 0.1339 -0.0899 282 | vn 0.0990 0.4251 -0.8997 283 | vn -0.7789 0.2515 -0.5744 284 | vn 0.9992 -0.0274 -0.0293 285 | vn -0.2702 0.9519 -0.1445 286 | vn -0.9907 -0.0724 0.1148 287 | vn -0.1028 0.8739 0.4750 288 | vn -0.8895 0.2475 0.3841 289 | vn -0.9090 -0.1869 0.3727 290 | vn -0.8422 -0.0565 -0.5362 291 | vn 0.5228 0.8376 -0.1584 292 | vn -0.0972 -0.2874 0.9529 293 | vn -0.9799 -0.0177 -0.1986 294 | vn 0.2092 0.0898 -0.9737 295 | vn -0.2999 0.4234 -0.8549 296 | vn -0.9853 -0.0039 -0.1706 297 | vn -0.3612 0.9319 -0.0325 298 | vn -0.9903 -0.1352 -0.0305 299 | vn -0.9562 0.2912 0.0284 300 | vn -0.6630 0.5505 -0.5073 301 | vn -0.8558 0.4529 -0.2498 302 | vn -0.4171 0.7623 -0.4949 303 | vn -0.2854 0.8954 0.3418 304 | vn -0.9414 -0.1448 0.3046 305 | vn -0.8187 -0.1704 0.5484 306 | vn -0.9900 -0.0103 -0.1407 307 | vn -0.9391 0.0853 -0.3330 308 | vn -0.9226 0.1599 -0.3510 309 | vn -0.7578 0.3638 -0.5416 310 | vn 0.0580 0.8293 -0.5558 311 | vn -0.0097 0.4069 -0.9134 312 | vn -0.0495 0.9925 -0.1120 313 | vn -0.2984 0.9346 -0.1934 314 | vn -0.9311 0.3456 0.1165 315 | vn -0.7398 0.2652 -0.6184 316 | vn -0.6457 -0.0521 -0.7618 317 | vn 0.9932 -0.0995 0.0603 318 | vn 0.0984 0.4253 -0.8997 319 | vn 0.0206 -0.0714 -0.9972 320 | vn 0.9960 0.0772 -0.0446 321 | vn -0.2484 0.9532 -0.1724 322 | vn -0.8020 0.5007 0.3258 323 | vn -0.8806 0.3796 0.2835 324 | vn 0.9869 -0.0063 0.1613 325 | vn -0.1796 -0.3040 0.9356 326 | vn -0.9842 0.1717 -0.0428 327 | vn -0.9410 0.2660 0.2091 328 | vn -0.8383 -0.5430 0.0480 329 | vn -0.5977 -0.4200 0.6829 330 | vn -0.1854 0.6928 -0.6969 331 | vn 0.0351 0.0911 0.9952 332 | vn -0.9856 0.1669 -0.0265 333 | vn -0.6962 -0.2281 0.6807 334 | vn -0.1837 0.7468 -0.6392 335 | vn -0.9991 -0.0341 -0.0249 336 | vn -0.3604 0.8167 -0.4508 337 | vn 0.0630 0.1215 -0.9906 338 | vn -0.7235 0.2568 -0.6408 339 | vn 0.7714 -0.2020 -0.6034 340 | vn -0.2474 0.9625 0.1113 341 | vn -0.8821 0.4688 0.0467 342 | vn -0.8128 0.5386 -0.2218 343 | vn -0.8247 0.5039 -0.2567 344 | vn -0.9824 -0.1718 -0.0740 345 | vn -0.9351 -0.2737 0.2251 346 | vn -0.6379 -0.0749 -0.7664 347 | vn 0.9800 -0.1897 0.0609 348 | vn 0.9994 -0.0215 -0.0261 349 | vn -0.2667 0.7816 0.5639 350 | vn 0.0647 -0.0779 -0.9949 351 | vn 0.0428 -0.0711 -0.9966 352 | vn 0.9061 -0.2768 0.3198 353 | vn 0.0493 0.1971 0.9792 354 | vn -0.9762 -0.1397 -0.1659 355 | vn -0.0619 -0.7941 0.6047 356 | vn -0.5198 -0.8351 -0.1800 357 | vn -0.9943 0.1068 0.0035 358 | vn 0.9860 -0.0591 -0.1557 359 | vn 0.9680 -0.1683 0.1860 360 | vn 0.0642 0.5418 -0.8380 361 | vn 0.2854 0.8954 0.3418 362 | vn 0.9311 0.3456 0.1165 363 | vn 0.8806 0.3796 0.2835 364 | vn -0.9860 -0.0591 -0.1557 365 | vn -0.9680 -0.1683 0.1860 366 | vn -0.0642 0.5418 -0.8380 367 | vn -0.3934 0.8627 0.3177 368 | vn -0.9311 0.3264 0.1630 369 | vn -0.6738 0.5490 0.4946 370 | vn 0.2473 -0.9432 -0.2219 371 | vn -0.6332 -0.7714 -0.0626 372 | vn 0.3150 -0.9253 -0.2111 373 | vn -0.7775 -0.5507 -0.3039 374 | vn 0.2225 0.1856 -0.9571 375 | vn 0.9926 -0.0841 -0.0873 376 | vn 0.5255 -0.4429 0.7264 377 | vn 0.2322 -0.9692 -0.0815 378 | vn 0.2166 -0.7067 0.6736 379 | vn 0.8881 -0.1129 -0.4455 380 | vn 0.0164 0.2156 0.9763 381 | vn 0.1686 -0.0348 -0.9851 382 | vn 0.9983 0.0088 -0.0574 383 | vn 0.6795 -0.7166 -0.1572 384 | vn -0.2423 0.7398 0.6277 385 | vn -0.0184 0.6994 0.7145 386 | vn 0.6680 -0.5524 0.4986 387 | vn 0.7651 -0.4043 0.5012 388 | vn 0.3912 -0.2215 0.8933 389 | vn -0.9818 0.0089 0.1896 390 | vn 0.8716 -0.4781 0.1089 391 | vn 0.2521 0.4354 0.8642 392 | vn 0.1816 0.4866 0.8545 393 | vn 0.0000 -1.0000 -0.0000 394 | vn 0.2866 -0.9258 -0.2466 395 | vn 0.3602 -0.8666 -0.3453 396 | vn 0.3066 -0.9331 -0.1881 397 | vn 0.5236 -0.4533 0.7214 398 | vn 0.8545 -0.1762 0.4886 399 | vn 0.1141 -0.4142 0.9030 400 | vn -0.4021 -0.8978 0.1795 401 | vn 0.1093 -0.1645 -0.9803 402 | vn -0.8487 -0.5279 -0.0317 403 | vn 0.1813 -0.9339 -0.3082 404 | vn 0.0912 -0.7029 0.7054 405 | vn 0.1334 -0.6309 0.7643 406 | vn 0.1788 -0.4011 0.8984 407 | vn -0.9607 -0.2407 -0.1385 408 | vn 0.2821 -0.5222 -0.8049 409 | vn 0.9932 -0.0721 0.0919 410 | vn -0.9609 -0.2544 -0.1096 411 | vn 0.2567 -0.8275 0.4993 412 | vn 0.7344 0.3818 0.5611 413 | vn 0.7453 -0.1568 0.6481 414 | vn 0.3401 -0.7533 0.5630 415 | vn -0.9699 0.1260 0.2083 416 | vn 0.5632 -0.5185 -0.6434 417 | vn -0.8251 -0.5650 -0.0003 418 | vn 0.2448 -0.7704 -0.5887 419 | vn 0.0871 0.9036 0.4194 420 | vn 0.5427 0.7298 -0.4158 421 | vn -0.0631 -0.4954 0.8664 422 | vn 0.6450 -0.5565 0.5237 423 | vn 0.2759 -0.5594 0.7817 424 | vn 0.2352 -0.9129 0.3336 425 | vn 0.1720 -0.6698 0.7223 426 | vn 0.0210 -0.5755 0.8175 427 | vn 0.9631 -0.1773 0.2026 428 | vn -0.0584 0.1669 0.9842 429 | vn 0.9844 -0.0136 0.1753 430 | vn -0.0273 -0.4982 -0.8666 431 | vn 0.8839 -0.3391 0.3221 432 | vn 0.2970 -0.6583 0.6917 433 | vn 0.2169 0.3078 -0.9264 434 | vn 0.7925 -0.5842 -0.1748 435 | vn 0.0674 0.0559 -0.9962 436 | vn 0.9868 0.1333 -0.0921 437 | vn 0.9658 -0.0941 -0.2415 438 | vn -0.9857 0.1182 0.1199 439 | vn -0.0302 0.8764 0.4806 440 | vn 0.9437 -0.0978 -0.3159 441 | vn -0.0360 -0.5105 -0.8591 442 | vn -0.4544 -0.5747 -0.6806 443 | vn -0.5276 0.0878 -0.8450 444 | vn -0.9492 0.2584 0.1798 445 | vn -0.0903 -0.0188 -0.9957 446 | vn 0.9214 0.1552 -0.3563 447 | vn 0.3917 0.5389 -0.7457 448 | vn 0.7573 -0.2859 -0.5871 449 | vn -0.2473 -0.9432 -0.2219 450 | vn 0.6332 -0.7714 -0.0626 451 | vn -0.3150 -0.9253 -0.2111 452 | vn 0.7775 -0.5507 -0.3039 453 | vn -0.2225 0.1856 -0.9571 454 | vn -0.9926 -0.0841 -0.0873 455 | vn -0.5255 -0.4429 0.7264 456 | vn -0.2322 -0.9692 -0.0815 457 | vn -0.2166 -0.7067 0.6736 458 | vn -0.8881 -0.1129 -0.4455 459 | vn -0.0164 0.2156 0.9763 460 | vn -0.1686 -0.0348 -0.9851 461 | vn -0.9983 0.0088 -0.0574 462 | vn -0.6795 -0.7166 -0.1572 463 | vn 0.2423 0.7398 0.6277 464 | vn 0.0184 0.6994 0.7145 465 | vn -0.6680 -0.5524 0.4986 466 | vn -0.7651 -0.4043 0.5012 467 | vn -0.3912 -0.2215 0.8933 468 | vn 0.9818 0.0089 0.1896 469 | vn -0.8808 -0.4471 0.1558 470 | vn -0.2521 0.4354 0.8642 471 | vn -0.1745 0.4915 0.8532 472 | vn -0.2866 -0.9258 -0.2466 473 | vn -0.3602 -0.8666 -0.3453 474 | vn -0.3066 -0.9331 -0.1881 475 | vn -0.5236 -0.4533 0.7214 476 | vn -0.8545 -0.1762 0.4886 477 | vn -0.1141 -0.4142 0.9030 478 | vn 0.4021 -0.8978 0.1795 479 | vn -0.1093 -0.1645 -0.9803 480 | vn 0.8487 -0.5279 -0.0317 481 | vn -0.1813 -0.9339 -0.3082 482 | vn -0.0912 -0.7029 0.7054 483 | vn -0.1334 -0.6309 0.7643 484 | vn -0.1788 -0.4011 0.8984 485 | vn 0.9607 -0.2407 -0.1385 486 | vn -0.2821 -0.5222 -0.8049 487 | vn -0.9932 -0.0721 0.0919 488 | vn 0.9609 -0.2544 -0.1096 489 | vn -0.2567 -0.8275 0.4993 490 | vn -0.7344 0.3818 0.5611 491 | vn -0.7453 -0.1568 0.6481 492 | vn -0.3401 -0.7533 0.5630 493 | vn 0.9699 0.1260 0.2083 494 | vn -0.4988 -0.5295 -0.6861 495 | vn 0.8251 -0.5650 -0.0003 496 | vn -0.2275 -0.7610 -0.6075 497 | vn -0.0842 0.9031 0.4210 498 | vn -0.5427 0.7298 -0.4158 499 | vn 0.0631 -0.4954 0.8664 500 | vn -0.6450 -0.5565 0.5237 501 | vn -0.2759 -0.5594 0.7817 502 | vn -0.2352 -0.9129 0.3336 503 | vn -0.1720 -0.6698 0.7223 504 | vn -0.0210 -0.5755 0.8175 505 | vn -0.9631 -0.1773 0.2026 506 | vn 0.0584 0.1669 0.9842 507 | vn -0.9844 -0.0136 0.1753 508 | vn 0.0273 -0.4982 -0.8666 509 | vn -0.8839 -0.3391 0.3221 510 | vn -0.2970 -0.6583 0.6917 511 | vn -0.2169 0.3078 -0.9264 512 | vn -0.7925 -0.5842 -0.1748 513 | vn -0.0674 0.0559 -0.9962 514 | vn -0.9868 0.1333 -0.0921 515 | vn -0.9658 -0.0941 -0.2415 516 | vn 0.9857 0.1182 0.1199 517 | vn 0.0302 0.8764 0.4806 518 | vn -0.9573 -0.0458 -0.2854 519 | vn 0.0360 -0.5105 -0.8591 520 | vn 0.4544 -0.5747 -0.6806 521 | vn 0.5276 0.0878 -0.8450 522 | vn 0.9492 0.2584 0.1798 523 | vn 0.0903 -0.0188 -0.9957 524 | vn -0.9214 0.1552 -0.3563 525 | vn -0.3917 0.5389 -0.7457 526 | vn -0.7573 -0.2859 -0.5871 527 | vn 0.9928 -0.0821 -0.0869 528 | vn -0.9967 -0.0290 -0.0757 529 | vn 0.5600 -0.1198 0.8198 530 | vn 0.9578 -0.0989 0.2698 531 | vn 0.4450 -0.8028 0.3968 532 | vn 0.1424 0.1785 0.9736 533 | vn -0.5600 -0.1198 0.8198 534 | vn -0.9578 -0.0989 0.2698 535 | vn -0.4450 -0.8028 0.3968 536 | vn -0.1424 0.1785 0.9736 537 | usemtl Shiba_Brown 538 | s off 539 | f 181//1 42//1 10//1 540 | f 43//2 12//2 34//2 541 | f 35//3 8//3 41//3 542 | f 37//4 42//4 40//4 543 | f 6//5 181//5 82//5 544 | f 38//6 56//6 4//6 545 | f 39//7 1//7 2//7 546 | f 9//8 7//8 44//8 547 | f 11//9 9//9 16//9 548 | f 43//10 45//10 12//10 549 | f 48//11 46//11 17//11 550 | f 12//12 15//12 44//12 551 | f 16//13 46//13 48//13 552 | f 102//14 55//14 76//14 553 | f 21//15 57//15 37//15 554 | f 103//16 55//16 102//16 555 | f 55//17 59//17 21//17 556 | f 59//18 58//18 68//18 557 | f 22//19 21//19 76//19 558 | f 22//20 76//20 55//20 559 | f 78//21 25//21 23//21 560 | f 38//22 63//22 61//22 561 | f 24//23 77//23 61//23 562 | f 5//24 40//24 82//24 563 | f 63//25 62//25 61//25 564 | f 178//26 181//26 10//26 565 | f 61//27 2//27 1//27 566 | f 10//28 42//28 1//28 567 | f 75//29 8//29 35//29 568 | f 37//30 1//30 42//30 569 | f 6//31 42//31 181//31 570 | f 103//32 147//32 58//32 571 | f 37//33 56//33 38//33 572 | f 23//34 63//34 38//34 573 | f 34//35 12//35 75//35 574 | f 21//36 37//36 40//36 575 | f 40//37 76//37 21//37 576 | f 5//38 76//38 40//38 577 | f 6//39 40//39 42//39 578 | f 8//40 128//40 180//40 579 | f 167//41 178//41 3//41 580 | f 167//42 3//42 35//42 581 | f 39//43 34//43 10//43 582 | f 12//44 44//44 7//44 583 | f 15//45 52//45 17//45 584 | f 16//46 14//46 47//46 585 | f 17//47 46//47 44//47 586 | f 48//48 17//48 52//48 587 | f 18//49 47//49 14//49 588 | f 102//50 76//50 83//50 589 | f 21//51 59//51 57//51 590 | f 162//52 164//52 72//52 591 | f 78//53 24//53 25//53 592 | f 25//54 63//54 23//54 593 | f 69//55 74//55 70//55 594 | f 74//56 72//56 71//56 595 | f 72//57 165//57 71//57 596 | f 72//58 164//58 165//58 597 | f 180//59 41//59 8//59 598 | f 167//60 35//60 70//60 599 | f 74//61 71//61 70//61 600 | f 70//62 170//62 167//62 601 | f 6//63 82//63 40//63 602 | f 37//64 38//64 1//64 603 | f 5//65 83//65 76//65 604 | f 9//66 44//66 46//66 605 | f 17//67 44//67 15//67 606 | f 9//68 46//68 16//68 607 | f 3//69 178//69 10//69 608 | f 10//70 34//70 3//70 609 | f 3//71 34//71 35//71 610 | f 75//72 35//72 34//72 611 | f 61//73 1//73 38//73 612 | f 56//74 37//74 57//74 613 | f 12//75 7//75 75//75 614 | f 9//76 11//76 73//76 615 | f 16//77 48//77 14//77 616 | f 55//78 103//78 59//78 617 | f 62//79 24//79 61//79 618 | f 24//80 62//80 64//80 619 | f 78//81 77//81 24//81 620 | f 25//82 27//82 63//82 621 | f 35//83 41//83 69//83 622 | f 71//84 170//84 70//84 623 | f 165//85 170//85 71//85 624 | f 35//86 69//86 70//86 625 | f 181//87 90//87 130//87 626 | f 118//88 92//88 131//88 627 | f 119//89 129//89 88//89 628 | f 121//90 126//90 130//90 629 | f 86//91 82//91 181//91 630 | f 123//92 84//92 145//92 631 | f 80//93 79//93 124//93 632 | f 89//94 132//94 87//94 633 | f 91//95 96//95 89//95 634 | f 131//96 92//96 133//96 635 | f 136//97 97//97 134//97 636 | f 92//98 132//98 95//98 637 | f 96//99 136//99 134//99 638 | f 102//100 175//100 143//100 639 | f 101//101 121//101 146//101 640 | f 103//102 102//102 143//102 641 | f 143//103 101//103 150//103 642 | f 150//104 159//104 148//104 643 | f 105//105 175//105 101//105 644 | f 105//106 143//106 175//106 645 | f 177//107 106//107 108//107 646 | f 123//108 152//108 154//108 647 | f 107//109 152//109 176//109 648 | f 82//110 126//110 85//110 649 | f 154//111 152//111 153//111 650 | f 178//112 90//112 181//112 651 | f 152//113 79//113 80//113 652 | f 90//114 79//114 130//114 653 | f 174//115 119//115 88//115 654 | f 121//116 130//116 79//116 655 | f 86//117 181//117 130//117 656 | f 103//118 150//118 148//118 657 | f 121//119 123//119 145//119 658 | f 106//120 123//120 154//120 659 | f 118//121 174//121 92//121 660 | f 101//122 126//122 121//122 661 | f 126//123 101//123 175//123 662 | f 85//124 126//124 175//124 663 | f 86//125 130//125 126//125 664 | f 88//126 180//126 128//126 665 | f 167//127 81//127 178//127 666 | f 167//128 119//128 81//128 667 | f 124//129 79//129 90//129 668 | f 92//130 87//130 132//130 669 | f 95//131 97//131 140//131 670 | f 96//132 135//132 94//132 671 | f 97//133 132//133 134//133 672 | f 136//134 140//134 97//134 673 | f 98//135 94//135 135//135 674 | f 102//136 83//136 175//136 675 | f 101//137 146//137 150//137 676 | f 162//138 173//138 169//138 677 | f 177//139 108//139 107//139 678 | f 108//140 106//140 154//140 679 | f 160//141 163//141 173//141 680 | f 173//142 168//142 169//142 681 | f 169//143 168//143 165//143 682 | f 169//144 165//144 164//144 683 | f 180//145 88//145 129//145 684 | f 167//146 163//146 119//146 685 | f 173//147 163//147 168//147 686 | f 163//148 167//148 170//148 687 | f 86//149 126//149 82//149 688 | f 121//150 79//150 123//150 689 | f 85//151 175//151 83//151 690 | f 89//152 134//152 132//152 691 | f 97//153 95//153 132//153 692 | f 89//154 96//154 134//154 693 | f 81//155 90//155 178//155 694 | f 90//156 81//156 118//156 695 | f 81//157 119//157 118//157 696 | f 174//158 118//158 119//158 697 | f 152//159 123//159 79//159 698 | f 145//160 146//160 121//160 699 | f 92//161 174//161 87//161 700 | f 89//162 172//162 91//162 701 | f 96//163 94//163 136//163 702 | f 143//164 150//164 103//164 703 | f 153//165 152//165 107//165 704 | f 107//166 155//166 153//166 705 | f 177//167 107//167 176//167 706 | f 108//168 154//168 110//168 707 | f 119//169 160//169 129//169 708 | f 168//170 163//170 170//170 709 | f 165//171 168//171 170//171 710 | f 119//172 163//172 160//172 711 | f 39//173 43//173 34//173 712 | f 43//174 39//174 2//174 713 | f 83//175 5//175 82//175 714 | f 59//176 103//176 58//176 715 | f 1//177 39//177 10//177 716 | f 74//178 162//178 72//178 717 | f 124//179 118//179 131//179 718 | f 131//180 80//180 124//180 719 | f 83//181 82//181 85//181 720 | f 147//182 103//182 148//182 721 | f 118//183 124//183 90//183 722 | f 164//184 162//184 169//184 723 | usemtl Shiba_white 724 | f 2//185 36//185 43//185 725 | f 9//186 36//186 179//186 726 | f 36//187 116//187 179//187 727 | f 171//188 9//188 179//188 728 | f 7//189 128//189 75//189 729 | f 62//190 63//190 27//190 730 | f 122//191 78//191 4//191 731 | f 61//192 77//192 127//192 732 | f 73//193 43//193 36//193 733 | f 52//194 15//194 50//194 734 | f 47//195 18//195 49//195 735 | f 14//196 48//196 52//196 736 | f 15//197 45//197 13//197 737 | f 54//198 50//198 51//198 738 | f 19//199 53//199 49//199 739 | f 19//200 49//200 18//200 740 | f 104//201 149//201 68//201 741 | f 57//202 60//202 20//202 742 | f 55//203 21//203 22//203 743 | f 64//204 25//204 24//204 744 | f 65//205 32//205 28//205 745 | f 27//206 25//206 29//206 746 | f 29//207 28//207 27//207 747 | f 66//208 32//208 65//208 748 | f 116//209 36//209 2//209 749 | f 116//210 2//210 33//210 750 | f 61//211 127//211 33//211 751 | f 122//212 4//212 56//212 752 | f 4//213 23//213 38//213 753 | f 144//214 122//214 20//214 754 | f 125//215 127//215 77//215 755 | f 7//216 9//216 171//216 756 | f 36//217 9//217 73//217 757 | f 127//218 116//218 33//218 758 | f 11//219 45//219 73//219 759 | f 16//220 45//220 11//220 760 | f 13//221 16//221 47//221 761 | f 14//222 54//222 18//222 762 | f 50//223 54//223 52//223 763 | f 49//224 51//224 50//224 764 | f 19//225 18//225 54//225 765 | f 19//208 51//208 53//208 766 | f 144//226 20//226 149//226 767 | f 59//227 68//227 57//227 768 | f 68//228 60//228 57//228 769 | f 20//229 60//229 149//229 770 | f 29//230 25//230 26//230 771 | f 32//231 30//231 62//231 772 | f 26//232 31//232 66//232 773 | f 32//233 31//233 30//233 774 | f 29//234 65//234 28//234 775 | f 162//235 74//235 161//235 776 | f 4//236 78//236 23//236 777 | f 20//237 122//237 56//237 778 | f 122//238 125//238 78//238 779 | f 125//239 77//239 78//239 780 | f 45//240 43//240 73//240 781 | f 45//241 16//241 13//241 782 | f 13//242 49//242 50//242 783 | f 49//243 13//243 47//243 784 | f 49//244 53//244 51//244 785 | f 14//245 52//245 54//245 786 | f 19//208 54//208 51//208 787 | f 20//246 56//246 57//246 788 | f 60//247 68//247 149//247 789 | f 75//248 128//248 8//248 790 | f 61//249 33//249 2//249 791 | f 7//250 171//250 128//250 792 | f 15//251 12//251 45//251 793 | f 13//252 50//252 15//252 794 | f 64//253 26//253 25//253 795 | f 29//254 66//254 65//254 796 | f 28//255 32//255 27//255 797 | f 30//256 64//256 62//256 798 | f 64//257 30//257 26//257 799 | f 66//208 31//208 32//208 800 | f 30//258 31//258 26//258 801 | f 26//259 66//259 29//259 802 | f 69//260 180//260 166//260 803 | f 166//261 161//261 74//261 804 | f 69//262 166//262 74//262 805 | f 41//263 180//263 69//263 806 | f 80//264 131//264 120//264 807 | f 89//265 179//265 120//265 808 | f 120//266 179//266 116//266 809 | f 171//267 179//267 89//267 810 | f 87//268 174//268 128//268 811 | f 110//269 154//269 153//269 812 | f 122//270 84//270 177//270 813 | f 152//271 127//271 176//271 814 | f 172//272 120//272 131//272 815 | f 140//273 138//273 95//273 816 | f 135//274 137//274 98//274 817 | f 94//275 140//275 136//275 818 | f 95//276 93//276 133//276 819 | f 142//277 139//277 138//277 820 | f 99//278 137//278 141//278 821 | f 99//279 98//279 137//279 822 | f 104//280 159//280 149//280 823 | f 146//281 100//281 151//281 824 | f 143//282 105//282 101//282 825 | f 155//283 107//283 108//283 826 | f 156//284 111//284 115//284 827 | f 110//285 112//285 108//285 828 | f 112//286 110//286 111//286 829 | f 157//208 156//208 115//208 830 | f 116//287 80//287 120//287 831 | f 116//288 117//288 80//288 832 | f 152//289 117//289 127//289 833 | f 122//290 145//290 84//290 834 | f 84//291 123//291 106//291 835 | f 144//292 100//292 122//292 836 | f 125//293 176//293 127//293 837 | f 87//294 171//294 89//294 838 | f 120//295 172//295 89//295 839 | f 127//296 117//296 116//296 840 | f 91//297 172//297 133//297 841 | f 96//298 91//298 133//298 842 | f 93//299 135//299 96//299 843 | f 94//300 98//300 142//300 844 | f 138//301 140//301 142//301 845 | f 137//302 138//302 139//302 846 | f 99//303 142//303 98//303 847 | f 99//208 141//208 139//208 848 | f 144//304 149//304 100//304 849 | f 150//305 146//305 159//305 850 | f 159//306 146//306 151//306 851 | f 100//307 149//307 151//307 852 | f 112//308 109//308 108//308 853 | f 115//309 153//309 113//309 854 | f 109//310 157//310 114//310 855 | f 115//311 113//311 114//311 856 | f 112//312 111//312 156//312 857 | f 162//313 161//313 173//313 858 | f 84//314 106//314 177//314 859 | f 100//315 145//315 122//315 860 | f 122//316 177//316 125//316 861 | f 125//317 177//317 176//317 862 | f 133//318 172//318 131//318 863 | f 133//319 93//319 96//319 864 | f 93//320 138//320 137//320 865 | f 137//321 135//321 93//321 866 | f 137//322 139//322 141//322 867 | f 94//323 142//323 140//323 868 | f 99//208 139//208 142//208 869 | f 100//324 146//324 145//324 870 | f 151//325 149//325 159//325 871 | f 174//326 88//326 128//326 872 | f 152//327 80//327 117//327 873 | f 87//328 128//328 171//328 874 | f 95//329 133//329 92//329 875 | f 93//330 95//330 138//330 876 | f 155//331 108//331 109//331 877 | f 112//332 156//332 157//332 878 | f 111//333 110//333 115//333 879 | f 113//334 153//334 155//334 880 | f 155//335 109//335 113//335 881 | f 157//208 115//208 114//208 882 | f 113//336 109//336 114//336 883 | f 109//337 112//337 157//337 884 | f 160//338 166//338 180//338 885 | f 166//339 173//339 161//339 886 | f 160//340 173//340 166//340 887 | f 129//341 160//341 180//341 888 | f 32//342 62//342 27//342 889 | f 115//343 110//343 153//343 890 | usemtl Shiba_Nose 891 | f 58//344 147//344 104//344 892 | f 58//345 67//345 68//345 893 | f 67//346 104//346 68//346 894 | f 104//347 67//347 58//347 895 | f 148//348 104//348 147//348 896 | f 148//349 159//349 158//349 897 | f 158//350 159//350 104//350 898 | f 104//351 148//351 158//351 899 | -------------------------------------------------------------------------------- /models/tree-branched.mtl: -------------------------------------------------------------------------------- 1 | # Blender MTL File: 'tree-branched.blend' 2 | # Material Count: 2 3 | 4 | newmtl tree_bark_dark 5 | Ns 96.078431 6 | Ka 1.000000 1.000000 1.000000 7 | Kd 0.370000 0.190000 0.220000 8 | Ks 0.500000 0.500000 0.500000 9 | Ke 0.000000 0.000000 0.000000 10 | Ni 1.000000 11 | d 1.000000 12 | illum 2 13 | 14 | newmtl tree_green 15 | Ns 96.078431 16 | Ka 1.000000 1.000000 1.000000 17 | Kd 0.500000 0.750000 0.360000 18 | Ks 0.500000 0.500000 0.500000 19 | Ke 0.000000 0.000000 0.000000 20 | Ni 1.000000 21 | d 1.000000 22 | illum 2 23 | -------------------------------------------------------------------------------- /models/tree-branched.obj: -------------------------------------------------------------------------------- 1 | # Blender v2.78 (sub 0) OBJ File: 'tree-branched.blend' 2 | # www.blender.org 3 | mtllib tree-branched.mtl 4 | o leaves_Icosphere 5 | v -1.633790 6.763953 -0.079387 6 | v -2.601661 6.796504 1.626355 7 | v -3.951441 7.592101 0.159946 8 | v -3.186923 7.666048 -1.639618 9 | v -2.336944 6.655345 1.048174 10 | v -0.685027 6.732742 0.517309 11 | v -0.643353 6.303411 -2.093288 12 | v -0.221022 6.461748 -0.131047 13 | v -3.723734 6.555060 -0.469676 14 | v -2.103804 6.834456 -0.310176 15 | v -2.220878 6.356532 -2.515208 16 | v 0.346370 6.992164 0.045296 17 | v 0.028604 6.840341 0.569811 18 | v 0.451118 6.860166 -0.973464 19 | v -1.942520 6.811554 1.741272 20 | v -4.436567 6.672408 -0.339579 21 | v -4.403463 7.118581 -0.706933 22 | v -3.508281 7.797007 -0.964567 23 | v -0.327551 6.499344 -2.260703 24 | v -1.927579 7.669400 -2.175556 25 | v -1.381639 8.562979 0.250663 26 | v -0.661188 7.886822 -0.890355 27 | v -1.880287 8.621628 -0.587058 28 | v -2.827174 8.336353 -0.352276 29 | v -2.971693 7.962098 0.907241 30 | v -2.462203 8.319615 -0.864117 31 | v -1.753360 7.838510 -1.736351 32 | v -1.004141 7.898831 -1.414199 33 | v -2.887791 7.754026 -1.822116 34 | v -2.320921 8.527624 0.440455 35 | v -1.826185 8.124144 1.216739 36 | v -1.147334 8.046912 0.657907 37 | v -0.327397 7.698750 -0.114842 38 | v -0.144041 7.591953 -1.070875 39 | v -0.413498 6.907037 -2.214008 40 | v -0.779704 7.463449 -1.647038 41 | v -2.466096 7.026592 -2.524303 42 | v -4.181041 7.610111 -0.477008 43 | v -2.272524 7.772956 1.553577 44 | v -1.974890 7.221621 1.787234 45 | v 0.108466 7.503135 -0.001975 46 | v -1.578475 6.982986 -2.455411 47 | v -2.192911 6.509791 -2.702651 48 | v -3.380181 6.568248 -1.822028 49 | v -3.955770 6.718479 -1.060070 50 | v -3.324888 6.858212 1.368731 51 | v -3.783367 6.485063 0.436334 52 | v -0.697169 7.365793 1.049635 53 | v 0.027427 7.045833 0.684423 54 | v 0.344218 6.485610 -0.530036 55 | v -1.468919 6.278408 -2.064402 56 | v -3.455404 6.321269 -1.370317 57 | v -2.923060 6.489105 1.162887 58 | v -1.869650 6.539657 1.396014 59 | v 2.153863 5.185368 -1.048245 60 | v 2.564226 5.144411 0.642853 61 | v 1.122754 5.145876 -0.676881 62 | v 2.740741 5.288013 0.918144 63 | v 2.905853 5.649148 -0.205098 64 | v 1.528455 5.627016 1.818413 65 | v 2.792412 5.789839 1.034597 66 | v 2.028225 6.226994 1.125091 67 | v 1.267423 5.186320 1.683706 68 | v 0.548231 6.485835 1.058441 69 | v -0.406251 5.775849 0.192576 70 | v 2.321208 5.445755 -1.210622 71 | v 1.229569 6.324728 -1.045667 72 | v 1.586534 6.783003 0.455603 73 | v 0.655841 6.747088 0.374349 74 | v 0.264994 6.436765 -0.093674 75 | v 1.153703 6.689333 -0.148053 76 | v 1.920219 6.371371 -0.578897 77 | v 0.430781 6.311388 -0.775384 78 | v 1.036735 6.694963 0.877276 79 | v 2.303859 6.343324 -0.266981 80 | v 2.269157 5.867309 -1.165596 81 | v 0.748958 5.797732 -1.287452 82 | v -0.260568 6.145741 0.321316 83 | v 1.272636 6.289078 1.516047 84 | v 2.599643 6.269976 0.484142 85 | v 1.360746 5.803344 -1.363352 86 | v 1.059803 5.227397 -1.387237 87 | v 0.306878 5.192292 -0.664829 88 | v -0.287244 5.458347 0.234444 89 | v 0.412105 5.474084 1.408658 90 | v 1.825178 5.336617 1.661784 91 | v 1.652567 5.056822 -0.712986 92 | v 0.008719 5.387385 0.462569 93 | v 1.346380 5.445477 0.422703 94 | v 0.699464 5.183684 1.289199 95 | v 1.960088 5.262851 0.117136 96 | v 2.146825 5.120807 0.544751 97 | v 1.846516 5.196858 1.091052 98 | v -1.526480 4.212972 2.453162 99 | v 0.045727 4.331308 1.756749 100 | v -1.419803 4.167058 -0.016003 101 | v -0.994031 4.486911 1.202343 102 | v -0.812600 4.224280 2.635655 103 | v -0.458196 4.488737 2.596811 104 | v -1.277500 4.472063 2.730237 105 | v -1.368741 4.248383 -0.235970 106 | v -1.204280 4.511146 -0.267966 107 | v -1.274876 4.930027 0.223673 108 | v 0.171902 4.523180 0.715245 109 | v -0.032489 4.822172 1.506176 110 | v -1.447622 5.180377 1.837651 111 | v -1.076567 5.298171 1.279663 112 | v -2.035897 4.806504 0.834393 113 | v -0.294068 5.113756 1.646779 114 | v -0.168456 5.043755 1.156123 115 | v -0.431243 4.964469 2.103803 116 | v -0.525079 5.001127 0.520510 117 | v -1.763407 5.114312 1.201514 118 | v 0.188605 4.507999 1.921261 119 | v -1.547330 4.660705 -0.055870 120 | v -2.224343 4.766549 1.535584 121 | v -2.275075 4.268476 1.722968 122 | v -1.117440 4.728326 2.586249 123 | v 0.125581 4.354988 0.749982 124 | v -0.596774 4.391866 0.049634 125 | v -2.236104 4.276282 0.758499 126 | v -0.060215 4.282787 1.213310 127 | v -0.554631 4.240303 0.172818 128 | v -2.206602 4.182485 1.386813 129 | v -0.668813 4.236694 1.928043 130 | v -1.928237 4.081586 1.718395 131 | vn 0.1015 -0.8900 0.4446 132 | vn -0.0874 -0.7915 0.6049 133 | vn 0.2879 0.5628 -0.7749 134 | vn 0.4461 0.8525 -0.2725 135 | vn 0.1670 0.8233 -0.5425 136 | vn 0.6845 0.5853 -0.4347 137 | vn -0.1496 0.8093 -0.5680 138 | vn -0.0267 0.8660 -0.4994 139 | vn -0.3964 0.8568 -0.3298 140 | vn -0.4655 0.8008 -0.3769 141 | vn -0.3386 0.9011 -0.2709 142 | vn -0.4001 0.8612 -0.3135 143 | vn -0.4354 0.8583 -0.2717 144 | vn -0.4774 0.8557 0.1995 145 | vn -0.5728 0.8014 0.1724 146 | vn -0.2974 0.9539 -0.0403 147 | vn -0.0209 0.9964 0.0822 148 | vn 0.0537 0.8996 0.4334 149 | vn -0.2644 0.7764 0.5721 150 | vn 0.5198 0.6621 0.5399 151 | vn 0.4640 0.8591 -0.2161 152 | vn 0.6584 0.6272 0.4160 153 | vn 0.6164 0.7838 -0.0752 154 | vn 0.7775 0.6147 -0.1326 155 | vn 0.8021 0.2321 -0.5503 156 | vn 0.4141 0.9099 -0.0222 157 | vn 0.4947 0.8690 -0.0022 158 | vn 0.7120 0.5156 -0.4767 159 | vn 0.3345 0.7716 -0.5411 160 | vn 0.2898 0.8152 -0.5015 161 | vn 0.3561 0.8160 -0.4554 162 | vn 0.0899 0.3670 -0.9259 163 | vn -0.0439 0.9380 -0.3438 164 | vn 0.0907 0.4152 -0.9052 165 | vn -0.2276 0.6048 -0.7632 166 | vn -0.5606 0.3835 -0.7339 167 | vn -0.5859 0.5455 -0.5993 168 | vn -0.7579 -0.3802 -0.5301 169 | vn -0.9185 0.2897 0.2691 170 | vn -0.8968 0.2930 0.3315 171 | vn -0.4731 0.8592 0.1948 172 | vn -0.5294 0.4658 0.7090 173 | vn -0.3238 0.1223 0.9382 174 | vn -0.2550 0.8182 0.5153 175 | vn -0.3398 0.2055 0.9178 176 | vn -0.1677 -0.1229 0.9781 177 | vn 0.2474 0.4882 0.8369 178 | vn 0.5332 0.6841 0.4978 179 | vn 0.5621 0.5641 0.6049 180 | vn 0.5490 0.6642 0.5073 181 | vn 0.4054 0.9139 0.0184 182 | vn 0.8590 -0.2457 0.4493 183 | vn 0.8259 0.4194 0.3769 184 | vn 0.1794 0.7576 -0.6276 185 | vn 0.4324 0.5202 -0.7365 186 | vn 0.2101 0.1549 -0.9653 187 | vn 0.2268 0.2032 -0.9525 188 | vn -0.0073 -0.6427 -0.7661 189 | vn 0.0982 -0.8947 -0.4358 190 | vn 0.2711 -0.7646 -0.5847 191 | vn -0.5965 -0.0387 -0.8017 192 | vn -0.6214 0.6591 -0.4237 193 | vn -0.6635 0.2348 -0.7104 194 | vn -0.7528 0.2347 -0.6150 195 | vn -0.6121 0.0130 -0.7907 196 | vn -0.4755 -0.6449 -0.5983 197 | vn -0.4301 -0.7600 -0.4872 198 | vn -0.7096 -0.5617 -0.4253 199 | vn -0.7067 -0.4971 -0.5034 200 | vn -0.8357 0.1546 0.5270 201 | vn -0.6416 0.4614 0.6127 202 | vn -0.7449 -0.4065 0.5290 203 | vn -0.4263 -0.7479 0.5089 204 | vn -0.2945 -0.6896 0.6616 205 | vn 0.4121 0.4374 0.7993 206 | vn 0.5039 -0.0568 0.8619 207 | vn 0.4674 0.0511 0.8826 208 | vn 0.4105 -0.6723 0.6161 209 | vn 0.4160 -0.4411 0.7952 210 | vn 0.8224 -0.4285 0.3742 211 | vn 0.9046 0.4247 0.0380 212 | vn 0.9830 -0.1395 0.1191 213 | vn 0.7623 -0.5733 -0.3004 214 | vn 0.2979 -0.8802 0.3694 215 | vn 0.0856 -0.9944 0.0618 216 | vn 0.4476 -0.8758 -0.1807 217 | vn 0.0378 -0.9699 0.2404 218 | vn -0.2455 -0.9461 0.2110 219 | vn -0.2291 -0.9487 0.2178 220 | vn 0.2096 -0.9578 0.1965 221 | vn 0.1354 -0.9485 0.2865 222 | vn -0.1201 -0.9690 0.2157 223 | vn -0.1773 -0.9803 -0.0874 224 | vn 0.1808 -0.9751 -0.1281 225 | vn 0.0659 -0.9952 -0.0725 226 | vn 0.2569 -0.9629 -0.0829 227 | vn 0.3191 -0.8766 0.3601 228 | vn -0.2033 -0.9715 0.1222 229 | vn -0.1931 -0.9468 0.2575 230 | vn -0.3036 -0.9483 0.0925 231 | vn -0.0776 -0.9866 -0.1434 232 | vn -0.1176 -0.9788 -0.1676 233 | vn 0.0563 -0.9884 -0.1413 234 | vn 0.1501 -0.9886 -0.0148 235 | vn 0.2884 0.9180 -0.2722 236 | vn 0.2169 0.9290 -0.2997 237 | vn 0.1795 0.9166 -0.3572 238 | vn -0.1448 0.9124 -0.3828 239 | vn -0.2790 0.9301 -0.2389 240 | vn -0.0265 0.9905 -0.1347 241 | vn -0.2753 0.8910 -0.3609 242 | vn -0.5417 0.8345 -0.1009 243 | vn -0.5438 0.8090 0.2234 244 | vn -0.2772 0.9113 0.3044 245 | vn -0.0504 0.9888 0.1407 246 | vn -0.1375 0.8122 0.5669 247 | vn 0.2940 0.8522 0.4329 248 | vn 0.2597 0.8202 0.5098 249 | vn 0.4021 0.8170 0.4133 250 | vn 0.4519 0.8874 -0.0913 251 | vn 0.7450 0.6253 -0.2323 252 | vn 0.8391 0.1592 -0.5201 253 | vn 0.7242 0.5974 -0.3444 254 | vn 0.4147 0.7974 -0.4384 255 | vn -0.1234 0.1054 -0.9867 256 | vn -0.1114 0.4965 -0.8609 257 | vn -0.2671 0.5923 -0.7601 258 | vn -0.6928 0.4648 -0.5514 259 | vn -0.4320 0.3464 0.8327 260 | vn -0.3323 -0.0902 0.9389 261 | vn -0.3641 0.2668 0.8923 262 | vn 0.4785 0.7379 0.4760 263 | vn 0.0805 0.7792 -0.6216 264 | vn 0.4439 0.5451 -0.7113 265 | vn 0.2023 0.1287 -0.9708 266 | vn 0.1444 -0.0345 -0.9889 267 | vn 0.2126 -0.6118 -0.7619 268 | vn -0.6663 -0.2396 -0.7061 269 | vn -0.7314 0.6166 -0.2913 270 | vn -0.8316 0.0373 -0.5541 271 | vn -0.8288 0.0366 -0.5584 272 | vn -0.6183 -0.3261 -0.7151 273 | vn -0.8098 0.1190 0.5745 274 | vn -0.7083 0.3141 0.6322 275 | vn -0.8313 -0.2459 0.4984 276 | vn -0.4060 -0.8780 0.2535 277 | vn -0.6026 -0.7294 0.3238 278 | vn -0.4219 -0.6691 0.6118 279 | vn 0.4286 0.5071 0.7478 280 | vn 0.1336 -0.3612 0.9229 281 | vn 0.3945 0.5349 0.7472 282 | vn 0.5191 0.0710 0.8518 283 | vn 0.2551 -0.8923 0.3724 284 | vn 0.6046 -0.2386 0.7600 285 | vn 0.9119 0.4086 0.0371 286 | vn 0.9865 -0.1258 0.1046 287 | vn 0.7260 -0.6786 -0.1115 288 | vn 0.6522 -0.7373 -0.1761 289 | vn 0.7147 -0.6380 -0.2865 290 | vn 0.3185 -0.9409 0.1155 291 | vn 0.0525 -0.9562 -0.2881 292 | vn -0.1392 -0.9478 0.2868 293 | vn -0.1398 -0.9478 0.2867 294 | vn -0.1714 -0.9804 -0.0973 295 | vn -0.0581 -0.9924 -0.1087 296 | vn 0.0495 -0.9662 0.2532 297 | vn -0.0538 -0.9862 0.1564 298 | vn -0.2950 -0.9516 0.0867 299 | vn 0.0339 -0.9634 -0.2658 300 | vn 0.1373 -0.9719 -0.1911 301 | vn -0.2165 -0.9759 0.0289 302 | vn 0.1381 -0.9203 -0.3660 303 | vn -0.3512 -0.9236 -0.1534 304 | vn -0.1966 -0.9579 -0.2092 305 | vn 0.1200 -0.9878 0.0996 306 | vn -0.3655 -0.9280 -0.0717 307 | vn 0.0209 -0.9886 0.1491 308 | vn 0.1649 -0.9139 0.3710 309 | vn 0.0531 0.8650 0.4989 310 | vn 0.1272 0.9500 0.2851 311 | vn 0.0681 0.9422 0.3282 312 | vn 0.7649 0.6355 0.1052 313 | vn 0.2602 0.9630 -0.0708 314 | vn 0.2394 0.9505 -0.1980 315 | vn 0.0439 0.9408 -0.3362 316 | vn -0.2175 0.9336 -0.2846 317 | vn -0.4308 0.8230 -0.3703 318 | vn -0.2616 0.9647 0.0297 319 | vn -0.5135 0.8416 0.1675 320 | vn -0.6570 0.7418 -0.1343 321 | vn 0.2405 0.6919 0.6808 322 | vn 0.5873 0.5662 0.5784 323 | vn 0.6165 0.6749 0.4055 324 | vn 0.7611 0.6435 0.0816 325 | vn 0.8423 0.5389 0.0140 326 | vn 0.5930 0.7098 -0.3803 327 | vn -0.0751 0.7537 -0.6529 328 | vn -0.4315 0.8221 -0.3714 329 | vn 0.3814 -0.3432 -0.8584 330 | vn -0.4588 0.1812 -0.8699 331 | vn -0.9015 0.3720 -0.2211 332 | vn -0.8497 -0.5258 -0.0386 333 | vn -0.9955 0.0865 -0.0395 334 | vn -0.5164 0.6414 0.5674 335 | vn -0.5456 0.5889 0.5963 336 | vn -0.1828 -0.6308 0.7541 337 | vn 0.8749 0.4720 -0.1087 338 | vn 0.9303 -0.1916 0.3128 339 | vn 0.8204 -0.5611 -0.1098 340 | vn 0.5312 -0.8433 0.0816 341 | vn 0.5257 0.4806 -0.7019 342 | vn 0.2543 0.5725 -0.7795 343 | vn 0.4282 0.7173 -0.5497 344 | vn 0.6507 -0.3213 -0.6880 345 | vn 0.6362 -0.3723 -0.6758 346 | vn 0.3799 -0.5175 -0.7667 347 | vn -0.7536 -0.0398 -0.6561 348 | vn -0.7883 0.3682 -0.4929 349 | vn -0.4838 -0.7784 -0.4001 350 | vn -0.2528 -0.9586 -0.1312 351 | vn -0.7059 0.3113 0.6362 352 | vn -0.6989 -0.0875 0.7099 353 | vn -0.4691 -0.8738 0.1280 354 | vn -0.4342 -0.8152 0.3832 355 | vn 0.1377 0.4184 0.8978 356 | vn 0.1617 -0.0722 0.9842 357 | vn 0.5502 -0.6628 0.5079 358 | vn 0.4998 -0.7712 0.3942 359 | vn 0.1451 -0.9876 0.0599 360 | vn -0.2049 -0.9500 -0.2357 361 | vn -0.2052 -0.9512 -0.2305 362 | vn -0.0248 -0.9745 0.2229 363 | vn 0.0287 -0.9692 0.2444 364 | vn 0.1477 -0.9383 -0.3126 365 | vn 0.2630 -0.9518 0.1580 366 | vn 0.1336 -0.9910 0.0098 367 | vn 0.0193 -0.9997 -0.0136 368 | vn -0.1373 -0.9538 -0.2673 369 | vn 0.1630 -0.8975 -0.4099 370 | vn 0.3783 -0.9248 -0.0415 371 | usemtl tree_green 372 | s off 373 | f 13//1 6//1 8//1 374 | f 2//2 54//2 15//2 375 | f 36//3 27//3 28//3 376 | f 22//4 28//4 23//4 377 | f 23//5 28//5 27//5 378 | f 22//6 36//6 28//6 379 | f 27//7 26//7 23//7 380 | f 27//8 29//8 26//8 381 | f 29//9 18//9 26//9 382 | f 29//10 4//10 18//10 383 | f 26//11 24//11 23//11 384 | f 18//12 24//12 26//12 385 | f 18//13 38//13 24//13 386 | f 38//14 25//14 24//14 387 | f 25//15 30//15 24//15 388 | f 24//16 30//16 23//16 389 | f 30//17 21//17 23//17 390 | f 30//18 31//18 21//18 391 | f 25//19 31//19 30//19 392 | f 31//20 32//20 21//20 393 | f 21//21 22//21 23//21 394 | f 32//22 33//22 21//22 395 | f 21//23 33//23 22//23 396 | f 14//24 34//24 41//24 397 | f 19//25 35//25 14//25 398 | f 41//26 34//26 33//26 399 | f 34//27 22//27 33//27 400 | f 14//28 35//28 34//28 401 | f 35//29 36//29 34//29 402 | f 34//30 36//30 22//30 403 | f 20//31 27//31 36//31 404 | f 43//32 37//32 42//32 405 | f 20//33 29//33 27//33 406 | f 42//34 37//34 20//34 407 | f 37//35 29//35 20//35 408 | f 37//36 4//36 29//36 409 | f 17//37 38//37 18//37 410 | f 45//38 16//38 17//38 411 | f 17//39 16//39 38//39 412 | f 16//40 3//40 38//40 413 | f 38//41 3//41 25//41 414 | f 46//42 39//42 25//42 415 | f 2//43 40//43 46//43 416 | f 39//44 31//44 25//44 417 | f 46//45 40//45 39//45 418 | f 2//46 15//46 40//46 419 | f 40//47 31//47 39//47 420 | f 48//48 41//48 31//48 421 | f 31//49 41//49 32//49 422 | f 48//50 49//50 41//50 423 | f 41//51 33//51 32//51 424 | f 13//52 12//52 49//52 425 | f 49//53 12//53 41//53 426 | f 35//54 42//54 36//54 427 | f 36//55 42//55 20//55 428 | f 35//56 19//56 42//56 429 | f 19//57 43//57 42//57 430 | f 7//58 51//58 19//58 431 | f 19//59 51//59 43//59 432 | f 51//60 11//60 43//60 433 | f 43//61 44//61 37//61 434 | f 4//62 17//62 18//62 435 | f 37//63 44//63 4//63 436 | f 44//64 45//64 4//64 437 | f 4//65 45//65 17//65 438 | f 43//66 11//66 44//66 439 | f 11//67 52//67 44//67 440 | f 44//68 52//68 45//68 441 | f 52//69 16//69 45//69 442 | f 16//70 46//70 3//70 443 | f 3//71 46//71 25//71 444 | f 16//72 47//72 46//72 445 | f 47//73 53//73 46//73 446 | f 46//74 53//74 2//74 447 | f 40//75 48//75 31//75 448 | f 40//76 15//76 48//76 449 | f 15//77 49//77 48//77 450 | f 15//78 54//78 49//78 451 | f 54//79 13//79 49//79 452 | f 13//80 50//80 12//80 453 | f 12//81 14//81 41//81 454 | f 12//82 50//82 14//82 455 | f 50//83 19//83 14//83 456 | f 13//84 8//84 50//84 457 | f 8//85 7//85 50//85 458 | f 50//86 7//86 19//86 459 | f 1//87 51//87 7//87 460 | f 1//88 10//88 51//88 461 | f 10//89 11//89 51//89 462 | f 10//90 52//90 11//90 463 | f 10//91 9//91 52//91 464 | f 52//92 9//92 16//92 465 | f 9//93 47//93 16//93 466 | f 10//94 53//94 9//94 467 | f 9//95 53//95 47//95 468 | f 10//96 5//96 53//96 469 | f 5//97 2//97 53//97 470 | f 8//98 1//98 7//98 471 | f 6//99 1//99 8//99 472 | f 5//100 54//100 2//100 473 | f 10//101 1//101 5//101 474 | f 5//102 1//102 54//102 475 | f 1//103 6//103 54//103 476 | f 54//104 6//104 13//104 477 | f 75//105 72//105 68//105 478 | f 68//106 72//106 71//106 479 | f 72//107 67//107 71//107 480 | f 67//108 73//108 71//108 481 | f 71//109 73//109 70//109 482 | f 71//110 69//110 68//110 483 | f 70//111 69//111 71//111 484 | f 70//112 78//112 69//112 485 | f 69//113 78//113 64//113 486 | f 64//114 74//114 69//114 487 | f 69//115 74//115 68//115 488 | f 64//116 79//116 74//116 489 | f 74//117 79//117 62//117 490 | f 74//118 62//118 68//118 491 | f 62//119 80//119 68//119 492 | f 68//120 80//120 75//120 493 | f 59//121 75//121 80//121 494 | f 66//122 76//122 59//122 495 | f 59//123 76//123 75//123 496 | f 76//124 72//124 75//124 497 | f 82//125 77//125 81//125 498 | f 81//126 77//126 67//126 499 | f 77//127 73//127 67//127 500 | f 65//128 78//128 70//128 501 | f 85//129 79//129 64//129 502 | f 63//130 60//130 85//130 503 | f 85//131 60//131 79//131 504 | f 61//132 80//132 62//132 505 | f 76//133 81//133 72//133 506 | f 72//134 81//134 67//134 507 | f 76//135 66//135 81//135 508 | f 66//136 82//136 81//136 509 | f 66//137 55//137 82//137 510 | f 82//138 83//138 77//138 511 | f 73//139 65//139 70//139 512 | f 77//140 83//140 73//140 513 | f 83//141 84//141 73//141 514 | f 73//142 84//142 65//142 515 | f 65//143 85//143 78//143 516 | f 78//144 85//144 64//144 517 | f 65//145 84//145 85//145 518 | f 84//146 88//146 85//146 519 | f 88//147 90//147 85//147 520 | f 85//148 90//148 63//148 521 | f 60//149 62//149 79//149 522 | f 63//150 86//150 60//150 523 | f 60//151 61//151 62//151 524 | f 60//152 86//152 61//152 525 | f 63//153 58//153 86//153 526 | f 86//154 58//154 61//154 527 | f 61//155 59//155 80//155 528 | f 58//156 59//156 61//156 529 | f 58//157 56//157 59//157 530 | f 56//158 55//158 59//158 531 | f 59//159 55//159 66//159 532 | f 91//160 87//160 55//160 533 | f 87//161 82//161 55//161 534 | f 91//162 89//162 87//162 535 | f 89//163 57//163 87//163 536 | f 87//164 57//164 82//164 537 | f 57//165 83//165 82//165 538 | f 89//166 88//166 57//166 539 | f 57//167 88//167 83//167 540 | f 88//168 84//168 83//168 541 | f 89//169 90//169 88//169 542 | f 89//170 63//170 90//170 543 | f 56//171 91//171 55//171 544 | f 56//172 92//172 91//172 545 | f 92//173 89//173 91//173 546 | f 89//174 93//174 63//174 547 | f 93//175 58//175 63//175 548 | f 89//176 92//176 93//176 549 | f 92//177 56//177 93//177 550 | f 93//178 56//178 58//178 551 | f 118//179 111//179 106//179 552 | f 106//180 111//180 107//180 553 | f 111//181 109//181 107//181 554 | f 109//182 105//182 110//182 555 | f 109//183 110//183 107//183 556 | f 110//184 112//184 107//184 557 | f 112//185 103//185 107//185 558 | f 103//186 113//186 107//186 559 | f 108//187 113//187 103//187 560 | f 113//188 106//188 107//188 561 | f 113//189 116//189 106//189 562 | f 108//190 116//190 113//190 563 | f 99//191 111//191 118//191 564 | f 99//192 114//192 111//192 565 | f 114//193 109//193 111//193 566 | f 114//194 105//194 109//194 567 | f 104//195 110//195 105//195 568 | f 104//196 112//196 110//196 569 | f 102//197 115//197 103//197 570 | f 115//198 108//198 103//198 571 | f 120//199 101//199 102//199 572 | f 102//200 101//200 115//200 573 | f 121//201 116//201 108//201 574 | f 124//202 117//202 121//202 575 | f 121//203 117//203 116//203 576 | f 100//204 118//204 116//204 577 | f 116//205 118//205 106//205 578 | f 94//206 98//206 100//206 579 | f 114//207 119//207 105//207 580 | f 105//208 119//208 104//208 581 | f 95//209 122//209 114//209 582 | f 114//210 122//210 119//210 583 | f 104//211 120//211 112//211 584 | f 112//212 120//212 103//212 585 | f 120//213 102//213 103//213 586 | f 104//214 119//214 120//214 587 | f 119//215 123//215 120//215 588 | f 123//216 101//216 120//216 589 | f 101//217 121//217 115//217 590 | f 115//218 121//218 108//218 591 | f 101//219 96//219 121//219 592 | f 96//220 124//220 121//220 593 | f 117//221 100//221 116//221 594 | f 117//222 94//222 100//222 595 | f 124//223 126//223 117//223 596 | f 126//224 94//224 117//224 597 | f 100//225 99//225 118//225 598 | f 100//226 98//226 99//226 599 | f 98//227 114//227 99//227 600 | f 98//228 95//228 114//228 601 | f 125//229 122//229 95//229 602 | f 97//230 122//230 125//230 603 | f 97//231 119//231 122//231 604 | f 97//232 123//232 119//232 605 | f 97//233 96//233 123//233 606 | f 123//234 96//234 101//234 607 | f 96//235 97//235 124//235 608 | f 98//236 125//236 95//236 609 | f 98//237 94//237 125//237 610 | f 94//238 97//238 125//238 611 | f 97//239 126//239 124//239 612 | f 97//240 94//240 126//240 613 | o trunk_Cube 614 | v 0.340516 -0.098548 0.305424 615 | v -0.089946 2.610363 -0.561469 616 | v -0.441249 -0.082762 -0.005549 617 | v 0.436509 -0.016296 0.122729 618 | v -0.294294 2.155507 -0.064743 619 | v 0.217478 3.712309 -0.057667 620 | v 0.142451 3.438062 0.076541 621 | v -0.438329 4.076463 -0.452600 622 | v 0.116801 3.766774 -0.283963 623 | v -0.507642 4.138746 -0.313611 624 | v 1.333483 5.537045 0.436464 625 | v 0.121609 4.225135 0.114061 626 | v 1.211409 4.966010 0.336620 627 | v 0.914331 5.032831 0.212728 628 | v -1.754187 6.838524 -0.529435 629 | v -1.633914 5.465353 -0.446858 630 | v -1.453903 5.903440 -0.210427 631 | v -1.668283 5.737219 -0.178573 632 | v 1.491705 5.450353 0.273556 633 | v -1.940932 6.751010 -0.570716 634 | v -1.977958 6.763623 -0.337211 635 | v -0.837624 3.762901 0.990048 636 | v -0.167270 2.957019 0.099976 637 | v -0.288972 3.297517 0.021141 638 | v -0.974271 3.937155 0.762091 639 | v -0.513479 3.757764 0.613567 640 | v -0.196834 3.600416 0.059938 641 | v -0.998032 3.632163 0.844129 642 | v -1.198488 4.600934 0.964108 643 | v -0.213948 -0.051353 -0.418258 644 | v 0.134605 -0.091952 -0.387297 645 | v -0.000596 4.366974 -0.156325 646 | v -0.921450 4.183528 0.923785 647 | v -1.277076 4.572093 1.120934 648 | v 0.097182 0.055800 0.458801 649 | v -1.916408 6.132310 -0.560473 650 | v -1.788867 6.873898 -0.312859 651 | v 1.309177 4.975336 0.112276 652 | v 1.093014 4.939596 -0.078048 653 | v -0.001671 2.696138 0.017880 654 | v -0.255494 0.800430 -0.327404 655 | v 0.235678 2.864437 -0.064471 656 | v 0.369958 -0.059265 -0.253049 657 | v -0.583324 4.745394 -0.507435 658 | v 1.339555 5.522276 0.106375 659 | v -0.267176 -0.063115 0.397082 660 | v 0.234016 2.463877 -0.356688 661 | v -0.480533 4.321565 -0.092632 662 | v 0.098379 4.274445 -0.268854 663 | v -1.517479 6.016269 -0.519572 664 | v 1.225771 5.640324 0.244648 665 | v -1.095796 4.629941 1.110191 666 | v 0.186528 3.837639 0.124819 667 | v -0.131511 4.379718 -0.011798 668 | vn 0.0784 -0.6378 0.7662 669 | vn 0.5309 -0.0105 -0.8474 670 | vn -0.0477 -0.9965 0.0692 671 | vn -0.9168 0.0706 0.3929 672 | vn 0.1007 0.1104 -0.9888 673 | vn 0.8637 0.0924 0.4954 674 | vn -0.8723 -0.0326 0.4878 675 | vn -0.9182 0.0499 -0.3930 676 | vn 0.9937 0.0633 -0.0924 677 | vn 0.5779 -0.6237 0.5264 678 | vn 0.9991 0.0217 -0.0355 679 | vn 0.9879 0.0200 0.1538 680 | vn 0.5626 0.0964 -0.8211 681 | vn 0.3653 0.1550 -0.9179 682 | vn 0.1254 0.0828 -0.9886 683 | vn -0.3535 -0.3006 -0.8858 684 | vn -0.3126 0.0773 0.9467 685 | vn -0.9579 -0.1521 0.2434 686 | vn -0.7285 0.3423 0.5934 687 | vn 0.5685 0.8140 0.1190 688 | vn -0.1949 0.6666 -0.7195 689 | vn -0.7239 0.6671 0.1759 690 | vn -0.6902 -0.5506 0.4695 691 | vn 0.7209 0.6855 0.1019 692 | vn 0.6175 0.6019 0.5063 693 | vn 0.0281 0.1531 0.9878 694 | vn -0.3770 0.9026 -0.2078 695 | vn 0.3652 -0.0605 0.9290 696 | vn -0.6454 -0.0543 0.7619 697 | vn 0.3420 0.9370 -0.0707 698 | vn -0.7744 -0.1074 -0.6235 699 | vn -0.0038 -0.7427 0.6696 700 | vn -0.3026 0.9528 0.0236 701 | vn 0.0935 -0.1093 0.9896 702 | vn 0.6622 0.4939 -0.5636 703 | vn -0.0512 0.5556 -0.8299 704 | vn 0.7362 0.2460 0.6305 705 | vn -0.8719 -0.1530 -0.4651 706 | vn -0.9058 -0.2170 0.3640 707 | vn 0.0984 -0.0126 -0.9951 708 | vn 0.1957 0.0446 -0.9797 709 | vn 0.9449 0.3179 -0.0783 710 | vn 0.8314 -0.4363 0.3442 711 | vn 0.6607 0.0010 -0.7506 712 | vn -0.5698 0.3316 -0.7519 713 | vn -0.3981 -0.0748 0.9143 714 | vn -0.5388 0.1654 0.8261 715 | vn 0.4964 -0.0089 -0.8681 716 | vn -0.3470 -0.0890 -0.9336 717 | vn -0.0186 -0.9998 -0.0040 718 | vn -0.1031 -0.9859 -0.1318 719 | vn 0.1709 -0.9834 -0.0602 720 | vn -0.8762 0.0087 -0.4819 721 | vn 0.7594 -0.6435 -0.0960 722 | vn 0.9827 0.0456 -0.1793 723 | vn -0.0577 0.1111 0.9921 724 | vn 0.9178 0.1040 -0.3833 725 | vn 0.4116 -0.1539 0.8983 726 | vn -0.5251 -0.0617 -0.8488 727 | vn -0.0584 -0.0941 -0.9938 728 | vn -0.4377 0.0180 0.8989 729 | vn -0.1666 -0.0005 0.9860 730 | vn 0.2642 -0.0508 -0.9631 731 | vn -0.4264 0.4058 0.8084 732 | vn -0.0263 0.3117 -0.9498 733 | vn 0.6383 -0.4178 -0.6465 734 | vn -0.1964 -0.0057 0.9805 735 | vn -0.3341 0.2158 0.9175 736 | vn -0.6222 0.5416 0.5653 737 | vn 0.3948 0.8749 0.2805 738 | vn -0.7553 -0.6498 -0.0855 739 | vn -0.6778 -0.5235 0.5163 740 | vn 0.6599 0.4795 -0.5784 741 | vn 0.5842 0.7885 -0.1924 742 | vn -0.4879 0.8640 -0.1240 743 | vn 0.6667 -0.0739 0.7416 744 | vn 0.6883 0.4265 0.5868 745 | vn -0.1003 -0.1084 0.9890 746 | vn 0.1330 -0.2197 0.9665 747 | vn 0.4320 0.9018 -0.0092 748 | vn -0.5765 0.2740 -0.7698 749 | vn -0.7698 -0.3918 -0.5039 750 | vn 0.1373 -0.6806 0.7197 751 | vn 0.6263 -0.7793 -0.0218 752 | vn -0.2634 0.3119 0.9129 753 | vn -0.2061 -0.1139 0.9719 754 | vn 0.5940 0.7938 -0.1303 755 | vn 0.3261 -0.0068 -0.9453 756 | vn -0.9972 -0.0753 -0.0027 757 | vn 0.4923 0.4014 -0.7724 758 | vn 0.9229 0.2323 0.3069 759 | vn -0.4406 -0.3715 0.8172 760 | vn -0.8297 -0.0838 -0.5519 761 | vn 0.5831 0.1209 0.8034 762 | vn -0.9090 -0.3453 0.2334 763 | vn -0.9871 -0.0417 -0.1543 764 | vn 0.9550 0.2762 0.1078 765 | vn 0.6190 -0.2618 0.7405 766 | vn 0.7183 -0.0854 -0.6905 767 | vn -0.2134 0.1531 0.9649 768 | vn 0.2142 0.1687 0.9621 769 | usemtl tree_bark_dark 770 | s off 771 | f 172//241 127//241 161//241 772 | f 128//242 173//242 157//242 773 | f 127//243 172//243 129//243 774 | f 129//244 172//244 131//244 775 | f 156//245 167//245 157//245 776 | f 130//246 168//246 127//246 777 | f 150//247 136//247 131//247 778 | f 131//248 167//248 129//248 779 | f 168//249 130//249 173//249 780 | f 139//250 179//250 132//250 781 | f 132//251 168//251 173//251 782 | f 132//252 179//252 168//252 783 | f 135//253 173//253 128//253 784 | f 134//254 135//254 128//254 785 | f 176//255 170//255 162//255 786 | f 142//256 162//256 134//256 787 | f 153//257 138//257 174//257 788 | f 136//258 150//258 174//258 789 | f 177//259 140//259 137//259 790 | f 137//260 145//260 177//260 791 | f 175//261 158//261 140//261 792 | f 140//262 171//262 175//262 793 | f 174//263 144//263 142//263 794 | f 176//264 143//264 158//264 795 | f 143//265 180//265 158//265 796 | f 180//266 143//266 144//266 797 | f 141//267 146//267 163//267 798 | f 168//268 149//268 166//268 799 | f 131//269 149//269 150//269 800 | f 151//270 152//270 153//270 801 | f 150//271 154//271 151//271 802 | f 149//272 148//272 154//272 803 | f 155//273 160//273 178//273 804 | f 148//274 178//274 160//274 805 | f 159//275 155//275 178//275 806 | f 159//276 152//276 151//276 807 | f 148//277 152//277 159//277 808 | f 160//278 155//278 151//278 809 | f 162//279 144//279 147//279 810 | f 146//280 176//280 162//280 811 | f 141//281 176//281 146//281 812 | f 163//282 143//282 176//282 813 | f 145//283 139//283 164//283 814 | f 145//284 164//284 165//284 815 | f 171//285 140//285 177//285 816 | f 140//286 139//286 137//286 817 | f 131//287 172//287 166//287 818 | f 157//288 173//288 169//288 819 | f 157//289 167//289 128//289 820 | f 127//290 129//290 157//290 821 | f 157//291 129//291 156//291 822 | f 127//292 157//292 169//292 823 | f 129//293 167//293 156//293 824 | f 164//294 139//294 132//294 135//294 825 | f 173//295 130//295 169//295 826 | f 163//296 147//296 144//296 143//296 827 | f 132//297 173//297 135//297 828 | f 168//298 179//298 133//298 829 | f 128//299 167//299 134//299 830 | f 162//300 170//300 134//300 831 | f 153//301 174//301 150//301 832 | f 138//302 153//302 179//302 833 | f 165//303 135//303 134//303 834 | f 165//304 134//304 175//304 835 | f 175//305 171//305 165//305 836 | f 165//306 164//306 135//306 837 | f 138//307 179//307 139//307 838 | f 139//308 140//308 138//308 839 | f 140//309 158//309 138//309 840 | f 158//310 180//310 138//310 841 | f 142//311 134//311 136//311 842 | f 136//312 174//312 142//312 843 | f 176//313 158//313 170//313 844 | f 171//314 177//314 145//314 845 | f 163//315 146//315 147//315 846 | f 148//316 168//316 133//316 847 | f 133//317 152//317 148//317 848 | f 153//318 133//318 179//318 849 | f 166//319 149//319 131//319 850 | f 152//320 133//320 153//320 851 | f 150//321 151//321 153//321 852 | f 150//322 149//322 154//322 853 | f 149//323 168//323 148//323 854 | f 130//324 127//324 169//324 855 | f 174//325 138//325 180//325 856 | f 180//326 144//326 174//326 857 | f 175//327 170//327 158//327 858 | f 170//328 175//328 134//328 859 | f 134//329 167//329 131//329 136//329 860 | f 151//330 155//330 159//330 861 | f 159//331 178//331 148//331 862 | f 148//332 160//332 154//332 863 | f 151//333 154//333 160//333 864 | f 127//334 168//334 161//334 865 | f 162//335 142//335 144//335 866 | f 162//336 147//336 146//336 867 | f 163//337 176//337 141//337 868 | f 145//338 137//338 139//338 869 | f 171//339 145//339 165//339 870 | f 166//340 172//340 161//340 871 | f 166//341 161//341 168//341 872 | -------------------------------------------------------------------------------- /models/tree-open.mtl: -------------------------------------------------------------------------------- 1 | # Blender MTL File: 'tree-open.blend' 2 | # Material Count: 2 3 | 4 | newmtl tree_bark_dark 5 | Ns 96.078431 6 | Ka 1.000000 1.000000 1.000000 7 | Kd 0.380000 0.230000 0.240000 8 | Ks 0.500000 0.500000 0.500000 9 | Ke 0.000000 0.000000 0.000000 10 | Ni 1.000000 11 | d 1.000000 12 | illum 2 13 | 14 | newmtl tree_green 15 | Ns 96.078431 16 | Ka 1.000000 1.000000 1.000000 17 | Kd 0.500000 0.750000 0.360000 18 | Ks 0.500000 0.500000 0.500000 19 | Ke 0.000000 0.000000 0.000000 20 | Ni 1.000000 21 | d 1.000000 22 | illum 2 23 | -------------------------------------------------------------------------------- /models/tree-pyramidal.mtl: -------------------------------------------------------------------------------- 1 | # Blender MTL File: 'tree-pyramidal.blend' 2 | # Material Count: 2 3 | 4 | newmtl tree_bark_dark 5 | Ns 96.078431 6 | Ka 1.000000 1.000000 1.000000 7 | Kd 0.320000 0.157000 0.184000 8 | Ks 0.500000 0.500000 0.500000 9 | Ke 0.000000 0.000000 0.000000 10 | Ni 1.000000 11 | d 1.000000 12 | illum 2 13 | 14 | newmtl tree_green 15 | Ns 96.078431 16 | Ka 1.000000 1.000000 1.000000 17 | Kd 0.500000 0.750000 0.360000 18 | Ks 0.500000 0.500000 0.500000 19 | Ke 0.000000 0.000000 0.000000 20 | Ni 1.000000 21 | d 1.000000 22 | illum 2 23 | -------------------------------------------------------------------------------- /models/tree-pyramidal.obj: -------------------------------------------------------------------------------- 1 | # Blender v2.78 (sub 0) OBJ File: 'tree-pyramidal.blend' 2 | # www.blender.org 3 | mtllib tree-pyramidal.mtl 4 | o leaves_Sphere 5 | v 1.676622 4.411403 0.003577 6 | v 2.633625 1.974595 1.616174 7 | v 1.979010 3.905703 0.146467 8 | v 1.774551 4.847308 0.787303 9 | v 1.511292 4.634730 0.679388 10 | v 1.842026 3.974975 1.162423 11 | v 0.803791 6.857496 0.237202 12 | v 0.474936 5.854860 1.195090 13 | v 1.039494 4.811867 1.563232 14 | v 1.179892 4.025852 1.706377 15 | v 1.133808 3.844142 1.684322 16 | v 1.460782 2.027481 2.694978 17 | v 2.040556 1.954923 1.960119 18 | v -0.130107 4.395486 1.679671 19 | v 0.244229 6.684976 0.782145 20 | v 0.074984 2.076870 2.893267 21 | v -0.095593 5.878001 1.328005 22 | v -0.411539 4.610749 1.921229 23 | v -0.080605 3.870463 2.061183 24 | v -0.747358 3.714624 1.797044 25 | v 0.002153 2.910614 2.202585 26 | v -1.322365 2.106933 2.620677 27 | v -0.657298 4.462968 1.507661 28 | v -1.199410 2.011816 2.103060 29 | v -2.196826 2.087348 1.952137 30 | v -0.790736 5.968542 0.882508 31 | v -1.390133 5.099632 0.818091 32 | v -1.157985 4.878158 0.706955 33 | v -1.160715 6.737535 0.649124 34 | v -2.118251 2.817873 0.755812 35 | v -2.880529 3.009066 -0.291578 36 | v -1.181028 6.857593 -0.030343 37 | v -1.445048 6.251153 0.103335 38 | v -1.507700 4.776822 0.182618 39 | v -2.049202 3.956687 0.128546 40 | v -0.779900 6.997540 -0.796637 41 | v -1.223579 6.064855 -0.736664 42 | v -0.698588 6.097543 -1.386722 43 | v -1.375746 3.940722 -1.811017 44 | v -0.363399 6.758262 -0.993921 45 | v -1.040678 4.862715 -1.751953 46 | v -0.372386 3.978144 -2.131188 47 | v -1.374174 2.881558 -2.630545 48 | v -0.236071 1.890975 -3.237411 49 | v 0.045720 4.847840 -2.145716 50 | v -0.711528 4.015123 -2.199144 51 | v 0.930222 2.946718 -2.811446 52 | v 0.676673 4.614679 -1.549174 53 | v 1.953745 1.974534 -2.426598 54 | v 1.845638 4.039686 -1.144795 55 | v 1.112062 5.804192 -1.242298 56 | v 1.043978 5.692770 -1.049219 57 | v 2.148738 1.993002 -1.437964 58 | v 1.799968 4.583851 -0.698672 59 | v 1.877558 3.893864 -0.512963 60 | v 2.958235 1.981020 -0.400249 61 | v 0.254910 6.702961 -1.135821 62 | v -0.916821 6.770484 -0.242937 63 | v 0.850239 6.944809 0.551739 64 | v 2.097602 2.697969 0.942362 65 | v 1.576914 2.710708 1.800242 66 | v 0.268993 3.070576 2.552536 67 | v -0.862468 3.870776 1.902249 68 | v -0.964840 4.803607 1.531248 69 | v -1.602498 4.104139 0.960574 70 | v -1.689635 3.843084 0.715024 71 | v -2.545012 2.908175 -0.153830 72 | v -1.926650 3.785995 0.154198 73 | v -2.667033 1.998390 -0.580238 74 | v -1.483117 4.597223 -0.586854 75 | v -1.015795 2.518229 -2.364724 76 | v 0.609775 2.587833 -2.410794 77 | v 0.503718 1.906179 -3.126865 78 | v 0.525418 3.999839 -2.243808 79 | v 0.017940 2.222680 -1.011305 80 | v 0.912926 3.749909 -1.979756 81 | v 1.777658 4.744861 -1.136568 82 | v 1.472211 4.599372 -0.942337 83 | v 1.002750 6.994615 -0.244303 84 | v 0.444238 7.751752 -0.091518 85 | v 1.307364 6.128342 0.108712 86 | v 1.987869 4.676939 -0.164095 87 | v 2.683613 3.028661 0.146142 88 | v 2.413980 2.908004 1.504804 89 | v 0.111205 2.304201 -0.084056 90 | v 1.054219 6.105654 0.809021 91 | v 1.020062 5.952235 0.690020 92 | v 1.801891 3.739353 1.111670 93 | v 0.388801 7.690077 0.151705 94 | v 0.263203 5.986091 1.436729 95 | v 1.887032 2.920251 2.143339 96 | v 0.148737 3.859126 1.863226 97 | v 0.719180 4.678689 1.387991 98 | v -0.106598 7.934909 0.219401 99 | v 0.142201 4.717950 1.956096 100 | v -0.874894 2.943974 2.551212 101 | v -0.561761 6.592135 0.775135 102 | v -0.827313 6.068458 1.062786 103 | v -1.426330 2.944052 1.798103 104 | v -1.362306 6.239955 0.632393 105 | v -1.972270 3.012052 1.732859 106 | v -1.001452 6.639684 0.487051 107 | v -1.813808 5.021248 0.243462 108 | v -0.514415 7.794700 0.060929 109 | v -3.279941 2.071262 -0.360396 110 | v -1.320654 6.088514 0.100413 111 | v -1.629587 4.801476 -1.061718 112 | v -3.205750 2.028319 -1.035131 113 | v 0.059250 8.926373 -0.235884 114 | v -0.304190 7.854005 -0.391965 115 | v -1.774873 4.011112 -1.230402 116 | v -1.864489 3.901910 -0.820942 117 | v -2.669402 3.136692 -1.126136 118 | v -2.417833 2.801258 -0.883039 119 | v -1.336383 1.909999 -2.955517 120 | v -1.030993 5.883158 -0.973549 121 | v -1.067219 3.711852 -1.896709 122 | v -0.402720 5.897243 -1.390041 123 | v -0.799778 4.703813 -1.580408 124 | v -0.395359 3.175658 -2.833884 125 | v 0.007447 7.804153 -0.681817 126 | v 0.340072 6.010985 -1.626628 127 | v 0.130571 4.698232 -1.775519 128 | v 0.202815 5.882297 -1.455623 129 | v 0.305836 7.805464 -0.654208 130 | v 1.198196 3.912805 -1.890763 131 | v 1.481242 2.987979 -2.551765 132 | v 1.990258 2.860672 -1.420057 133 | v 2.735096 2.033599 -1.491844 134 | v 0.442369 7.728207 -0.404710 135 | v 1.756251 3.837051 -0.994162 136 | v 0.725782 6.651148 -0.758937 137 | v 1.306757 5.931921 -0.097451 138 | v 2.410902 3.007540 -1.417445 139 | v 2.272699 2.733932 -0.339455 140 | v 0.423533 6.839828 0.843268 141 | v -0.589034 6.712855 0.965122 142 | v -0.093318 6.848259 -1.356188 143 | v 0.504115 6.792362 -1.320549 144 | v 0.789429 6.730419 -1.064034 145 | vn 0.5420 -0.8389 0.0505 146 | vn 0.8781 -0.3477 0.3287 147 | vn 0.0345 -0.9994 0.0024 148 | vn 0.7055 -0.6532 0.2751 149 | vn 0.4824 -0.7897 0.3790 150 | vn 0.8318 0.5544 -0.0284 151 | vn 0.7188 0.6170 0.3203 152 | vn 0.5190 -0.8544 0.0271 153 | vn 0.9699 -0.1963 0.1442 154 | vn 0.8988 0.3300 0.2885 155 | vn 0.7399 0.6411 0.2038 156 | vn 0.8574 -0.4207 0.2963 157 | vn 0.4672 -0.7851 0.4067 158 | vn 0.3571 -0.9053 0.2302 159 | vn 0.4312 0.6328 0.6431 160 | vn 0.6083 -0.2459 0.7547 161 | vn 0.5665 0.6875 0.4543 162 | vn 0.3450 0.6007 0.7212 163 | vn 0.5386 0.6345 0.5544 164 | vn 0.5276 0.5221 0.6701 165 | vn 0.0204 -0.8613 0.5076 166 | vn 0.2158 0.4987 0.8395 167 | vn 0.3418 -0.9358 0.0865 168 | vn 0.1945 -0.9403 0.2792 169 | vn 0.0396 0.5090 0.8598 170 | vn -0.0129 -0.9946 0.1027 171 | vn -0.2165 -0.8719 0.4393 172 | vn -0.3906 0.5675 0.7248 173 | vn 0.0787 0.5909 0.8029 174 | vn -0.1645 0.7037 0.6912 175 | vn -0.1365 0.6249 0.7687 176 | vn -0.3941 0.4684 0.7908 177 | vn -0.4250 0.4881 0.7623 178 | vn -0.4166 0.6701 0.6143 179 | vn -0.5082 0.5925 0.6250 180 | vn -0.5934 0.5372 0.5994 181 | vn -0.6395 -0.6941 0.3305 182 | vn -0.3724 0.5861 0.7196 183 | vn -0.5064 0.5715 0.6457 184 | vn -0.6859 0.4296 0.5874 185 | vn -0.7276 -0.6678 0.1567 186 | vn -0.5191 -0.7879 0.3313 187 | vn -0.4542 0.7477 0.4843 188 | vn -0.7394 0.5513 0.3866 189 | vn -0.9168 -0.0646 0.3940 190 | vn -0.4465 -0.8933 0.0509 191 | vn -0.7231 -0.5603 0.4040 192 | vn -0.7071 0.4472 0.5477 193 | vn -0.7577 0.4174 0.5017 194 | vn -0.4838 -0.7409 0.4659 195 | vn -0.7355 0.5473 0.3994 196 | vn -0.4943 -0.7347 0.4647 197 | vn -0.6750 0.7063 0.2134 198 | vn -0.3061 -0.9507 0.0492 199 | vn -0.7131 0.6896 0.1261 200 | vn -0.7976 -0.5909 -0.1211 201 | vn -0.6828 0.7288 0.0514 202 | vn -0.5953 -0.7865 0.1646 203 | vn -0.7927 -0.6050 -0.0748 204 | vn -0.7687 0.5743 -0.2816 205 | vn -0.7304 0.6718 -0.1231 206 | vn -0.6610 0.7172 -0.2205 207 | vn -0.0994 -0.9937 0.0523 208 | vn -0.8200 0.4793 -0.3128 209 | vn -0.4941 0.7163 -0.4927 210 | vn -0.5385 -0.7743 -0.3323 211 | vn -0.7778 -0.0051 -0.6284 212 | vn -0.4558 -0.3008 -0.8377 213 | vn 0.1040 -0.9854 0.1350 214 | vn -0.4745 0.5367 -0.6977 215 | vn -0.4547 0.6783 -0.5772 216 | vn -0.3345 0.6262 -0.7042 217 | vn -0.1579 0.7296 -0.6654 218 | vn -0.2946 0.4723 -0.8307 219 | vn 0.0019 -0.5821 -0.8131 220 | vn -0.2172 -0.6882 -0.6923 221 | vn -0.0017 -0.9890 0.1476 222 | vn -0.0614 -0.7683 -0.6372 223 | vn 0.1252 0.6516 -0.7482 224 | vn 0.2052 0.7061 -0.6777 225 | vn 0.0740 0.5581 -0.8265 226 | vn 0.0890 0.7148 -0.6936 227 | vn 0.0148 -0.9259 -0.3776 228 | vn 0.4691 0.4397 -0.7659 229 | vn 0.3731 0.6529 -0.6592 230 | vn 0.2624 0.6968 -0.6675 231 | vn 0.2948 -0.8168 -0.4958 232 | vn 0.4861 0.5446 -0.6834 233 | vn 0.2974 0.6692 -0.6810 234 | vn 0.3150 0.7067 -0.6336 235 | vn 0.0398 -0.8715 -0.4889 236 | vn -0.0806 -0.9883 0.1293 237 | vn 0.5137 0.6527 -0.5569 238 | vn 0.5454 -0.7357 -0.4016 239 | vn 0.6344 0.5076 -0.5830 240 | vn 0.6421 -0.6192 -0.4520 241 | vn -0.5385 -0.4780 0.6939 242 | vn 0.6919 0.6758 -0.2542 243 | vn 0.7303 0.6739 -0.1118 244 | vn 0.7328 0.6702 -0.1175 245 | vn 0.8543 -0.5199 0.0012 246 | vn 0.8800 0.3427 -0.3291 247 | vn 0.7251 0.5934 -0.3493 248 | vn 0.8551 -0.4941 -0.1572 249 | vn 0.8650 0.4776 -0.1536 250 | vn 0.6208 -0.7797 -0.0824 251 | vn 0.7989 0.5994 -0.0498 252 | vn 0.6584 -0.7453 -0.1048 253 | vn -0.1615 -0.9867 -0.0162 254 | vn -0.0004 -0.9999 -0.0112 255 | vn 0.7788 -0.6273 -0.0005 256 | vn -0.5939 -0.6821 -0.4266 257 | vn -0.5745 -0.6976 -0.4281 258 | vn -0.4531 -0.8669 -0.2079 259 | vn -0.3010 -0.8238 0.4803 260 | vn -0.2814 -0.9184 0.2780 261 | vn 0.4909 -0.7460 0.4499 262 | vn 0.7051 -0.7032 0.0911 263 | vn -0.0661 -0.9521 0.2985 264 | vn 0.8080 0.5578 0.1897 265 | vn 0.7937 0.5803 -0.1824 266 | vn 0.2106 0.6163 0.7589 267 | vn 0.8758 0.4694 0.1123 268 | vn 0.7837 0.5590 0.2709 269 | vn 0.8652 0.4945 0.0829 270 | vn 0.4904 -0.8694 -0.0598 271 | vn 0.6887 0.7181 0.1004 272 | vn 0.8073 0.5033 0.3081 273 | vn 0.6254 0.4811 0.6144 274 | vn 0.2197 -0.9273 0.3031 275 | vn 0.5217 0.6586 0.5423 276 | vn 0.2414 -0.9458 0.2174 277 | vn 0.5768 0.7432 0.3390 278 | vn 0.5999 -0.2648 0.7550 279 | vn 0.5499 0.6518 0.5222 280 | vn 0.4252 0.6249 0.6548 281 | vn 0.6853 -0.1891 0.7032 282 | vn 0.5574 -0.5828 0.5914 283 | vn 0.1604 -0.9619 0.2215 284 | vn 0.5159 0.6412 0.5681 285 | vn 0.3145 0.4628 0.8288 286 | vn 0.1697 0.5261 0.8333 287 | vn 0.1739 -0.1620 0.9713 288 | vn 0.2974 0.3569 0.8855 289 | vn 0.3886 0.5909 0.7070 290 | vn 0.2509 0.7534 0.6078 291 | vn -0.1717 0.5781 0.7977 292 | vn 0.0174 -0.9143 0.4047 293 | vn 0.0907 -0.8397 0.5355 294 | vn -0.0242 -0.9966 0.0793 295 | vn -0.0238 -0.9889 -0.1465 296 | vn 0.3262 -0.7588 0.5638 297 | vn 0.1312 0.6392 0.7578 298 | vn -0.0728 0.6501 0.7564 299 | vn 0.1027 -0.9320 0.3477 300 | vn -0.1959 0.6675 0.7184 301 | vn -0.0540 -0.9843 0.1681 302 | vn -0.1424 0.4485 0.8823 303 | vn 0.0884 -0.6903 0.7181 304 | vn -0.2582 -0.8509 0.4575 305 | vn -0.5954 -0.5763 0.5598 306 | vn -0.0620 -0.9970 0.0453 307 | vn 0.1397 -0.9661 0.2172 308 | vn -0.1552 -0.6281 0.7625 309 | vn -0.0657 0.5058 0.8601 310 | vn -0.1858 0.6768 0.7123 311 | vn -0.6596 0.7516 0.0015 312 | vn -0.0982 -0.9827 0.1572 313 | vn 0.1199 -0.9909 -0.0606 314 | vn -0.6785 -0.7333 0.0440 315 | vn -0.3851 0.5866 0.7124 316 | vn -0.3898 0.6045 0.6947 317 | vn -0.6610 0.6590 0.3590 318 | vn -0.7330 -0.3200 0.6003 319 | vn -0.4520 0.4336 0.7796 320 | vn -0.4598 0.6296 0.6263 321 | vn -0.1459 -0.9659 0.2138 322 | vn -0.7955 0.5030 0.3380 323 | vn -0.7446 -0.4622 0.4817 324 | vn -0.7140 0.6174 0.3301 325 | vn -0.0823 -0.9956 0.0455 326 | vn -0.0973 -0.9936 0.0582 327 | vn -0.7091 0.6297 0.3172 328 | vn -0.8142 0.5671 0.1245 329 | vn -0.5342 -0.8103 0.2409 330 | vn -0.8197 0.5514 -0.1549 331 | vn -0.9003 0.3902 -0.1928 332 | vn -0.7995 -0.6006 -0.0117 333 | vn -0.9782 0.0733 -0.1945 334 | vn -0.8675 0.3460 -0.3574 335 | vn -0.4846 0.6829 -0.5466 336 | vn 0.7397 0.6621 0.1206 337 | vn -0.7676 0.5673 -0.2982 338 | vn -0.3181 -0.9444 0.0830 339 | vn -0.6633 -0.6963 -0.2743 340 | vn -0.7627 0.5591 -0.3251 341 | vn -0.7258 -0.6848 -0.0648 342 | vn 0.0954 -0.9924 0.0777 343 | vn -0.8151 0.5617 -0.1420 344 | vn -0.6337 0.6091 -0.4769 345 | vn -0.5032 0.6692 -0.5467 346 | vn -0.5691 -0.7177 -0.4014 347 | vn -0.6330 0.6069 -0.4807 348 | vn -0.3058 -0.8966 -0.3204 349 | vn -0.0589 -0.9983 0.0041 350 | vn -0.7036 0.4352 -0.5617 351 | vn -0.6213 0.6665 -0.4119 352 | vn 0.5275 0.7034 -0.4765 353 | vn -0.6029 -0.7282 -0.3261 354 | vn -0.6197 -0.7104 -0.3337 355 | vn -0.4643 0.5582 -0.6876 356 | vn -0.5023 0.5814 -0.6400 357 | vn -0.4554 0.5448 -0.7041 358 | vn -0.0090 -0.9994 0.0321 359 | vn -0.4252 -0.6170 -0.6622 360 | vn -0.1947 -0.8407 -0.5053 361 | vn -0.6190 0.3145 -0.7196 362 | vn 0.0548 -0.7365 -0.6742 363 | vn 0.0076 -0.5856 -0.8106 364 | vn -0.1381 0.5570 -0.8190 365 | vn -0.1416 0.5610 -0.8156 366 | vn -0.0511 0.7887 -0.6126 367 | vn -0.1101 -0.1463 -0.9831 368 | vn -0.0754 0.5613 -0.8242 369 | vn -0.0806 -0.9304 -0.3575 370 | vn -0.1523 0.6496 -0.7448 371 | vn -0.0234 0.5476 -0.8364 372 | vn -0.0251 -0.9253 -0.3783 373 | vn 0.1018 0.5663 -0.8179 374 | vn 0.0842 0.3646 -0.9273 375 | vn -0.1082 -0.6959 -0.7099 376 | vn 0.4723 0.4361 -0.7660 377 | vn 0.3163 -0.7212 -0.6164 378 | vn 0.4230 0.6309 -0.6505 379 | vn 0.4213 -0.2637 -0.8678 380 | vn 0.0626 -0.8210 -0.5675 381 | vn 0.0421 -0.9991 0.0104 382 | vn 0.5048 0.5710 -0.6474 383 | vn 0.3666 -0.8918 -0.2652 384 | vn 0.5435 0.5891 -0.5980 385 | vn 0.8220 0.4841 -0.2999 386 | vn 0.3208 -0.9143 -0.2471 387 | vn 0.6016 0.5886 -0.5400 388 | vn 0.0695 -0.9976 0.0049 389 | vn -0.0877 -0.9915 0.0960 390 | vn 0.2370 -0.9079 -0.3459 391 | vn 0.8674 0.3299 -0.3725 392 | vn 0.7762 0.5126 -0.3672 393 | vn 0.3245 -0.9259 -0.1934 394 | vn 0.0634 -0.9961 -0.0609 395 | vn 0.8535 -0.4734 -0.2176 396 | vn 0.1159 -0.9691 -0.2176 397 | vn 0.8193 0.5698 -0.0638 398 | vn 0.9152 -0.3802 -0.1340 399 | vn 0.9509 0.3081 -0.0288 400 | vn 0.7763 0.6138 -0.1437 401 | vn 0.8231 0.5136 -0.2422 402 | vn 0.7045 -0.7039 0.0906 403 | vn 0.0813 -0.9687 -0.2347 404 | vn 0.0926 -0.9395 -0.3298 405 | vn -0.0521 -0.8696 -0.4911 406 | vn -0.1629 -0.9222 -0.3506 407 | vn -0.5945 -0.5556 -0.5813 408 | vn -0.6060 -0.7862 -0.1208 409 | vn 0.0914 -0.8345 0.5434 410 | vn 0.1662 -0.5225 0.8363 411 | vn 0.4442 -0.8780 0.1781 412 | usemtl tree_green 413 | s off 414 | f 60//1 135//1 83//1 415 | f 81//2 87//2 133//2 416 | f 13//3 56//3 2//3 417 | f 1//4 82//4 4//4 418 | f 4//5 5//5 1//5 419 | f 5//6 3//6 50//6 420 | f 89//7 59//7 80//7 421 | f 60//8 83//8 84//8 422 | f 6//9 88//9 3//9 423 | f 109//10 89//10 80//10 424 | f 83//11 88//11 84//11 425 | f 87//12 81//12 86//12 426 | f 4//13 9//13 5//13 427 | f 91//14 61//14 60//14 428 | f 15//15 86//15 7//15 429 | f 11//16 88//16 10//16 430 | f 91//17 84//17 11//17 431 | f 59//18 89//18 136//18 432 | f 61//19 12//19 2//19 433 | f 9//20 87//20 8//20 434 | f 91//21 21//21 61//21 435 | f 17//22 95//22 8//22 436 | f 93//23 9//23 14//23 437 | f 10//24 19//24 92//24 438 | f 136//25 94//25 137//25 439 | f 13//26 16//26 24//26 440 | f 90//27 98//27 26//27 441 | f 26//28 17//28 90//28 442 | f 93//29 14//29 19//29 443 | f 92//30 20//30 96//30 444 | f 16//31 21//31 22//31 445 | f 17//32 64//32 18//32 446 | f 64//33 17//33 26//33 447 | f 20//34 101//34 96//34 448 | f 63//35 23//35 28//35 449 | f 28//36 65//36 63//36 450 | f 63//37 65//37 20//37 451 | f 94//38 29//38 137//38 452 | f 22//39 99//39 25//39 453 | f 26//40 27//40 64//40 454 | f 64//41 27//41 23//41 455 | f 26//42 98//42 100//42 456 | f 101//43 20//43 66//43 457 | f 34//44 65//44 28//44 458 | f 66//45 65//45 68//45 459 | f 26//46 100//46 33//46 460 | f 33//47 106//47 26//47 461 | f 27//48 26//48 106//48 462 | f 27//49 106//49 103//49 463 | f 27//50 34//50 28//50 464 | f 67//51 105//51 30//51 465 | f 27//52 103//52 34//52 466 | f 66//53 68//53 31//53 467 | f 31//54 67//54 30//54 468 | f 102//55 33//55 100//55 469 | f 35//56 112//56 68//56 470 | f 33//57 102//57 58//57 471 | f 34//58 103//58 70//58 472 | f 37//59 106//59 33//59 473 | f 32//60 104//60 110//60 474 | f 108//61 105//61 67//61 475 | f 67//62 114//62 108//62 476 | f 69//63 105//63 108//63 477 | f 106//64 116//64 107//64 478 | f 112//65 117//65 113//65 479 | f 43//66 71//66 113//66 480 | f 116//67 37//67 38//67 481 | f 39//68 46//68 117//68 482 | f 75//69 69//69 44//69 483 | f 41//70 116//70 118//70 484 | f 43//71 117//71 42//71 485 | f 42//72 120//72 43//72 486 | f 71//73 44//73 115//73 487 | f 41//74 118//74 45//74 488 | f 120//75 72//75 71//75 489 | f 124//76 38//76 122//76 490 | f 73//77 75//77 44//77 491 | f 42//78 74//78 76//78 492 | f 47//79 120//79 42//79 493 | f 42//80 76//80 47//80 494 | f 121//81 125//81 139//81 495 | f 72//82 73//82 44//82 496 | f 48//83 123//83 45//83 497 | f 45//84 124//84 52//84 498 | f 48//85 74//85 123//85 499 | f 76//86 127//86 47//86 500 | f 72//87 47//87 127//87 501 | f 122//88 57//88 51//88 502 | f 49//89 73//89 72//89 503 | f 49//90 72//90 128//90 504 | f 51//91 52//91 124//91 505 | f 75//92 73//92 53//92 506 | f 126//93 48//93 50//93 507 | f 126//94 131//94 76//94 508 | f 139//95 125//95 140//95 509 | f 131//96 126//96 50//96 510 | f 78//97 48//97 54//97 511 | f 131//98 55//98 134//98 512 | f 128//99 135//99 56//99 513 | f 56//100 129//100 128//100 514 | f 52//101 51//101 81//101 515 | f 81//102 133//102 52//102 516 | f 77//103 52//103 133//103 517 | f 55//104 131//104 50//104 518 | f 82//105 77//105 133//105 519 | f 54//106 82//106 1//106 520 | f 80//107 79//107 130//107 521 | f 134//108 83//108 135//108 522 | f 13//109 85//109 53//109 523 | f 53//110 56//110 13//110 524 | f 132//111 140//111 79//111 525 | f 36//112 40//112 58//112 526 | f 58//113 32//113 36//113 527 | f 102//114 32//114 58//114 528 | f 97//115 137//115 29//115 529 | f 29//116 102//116 97//116 530 | f 136//117 15//117 59//117 531 | f 7//118 79//118 59//118 532 | f 1//119 5//119 50//119 533 | f 80//120 59//120 79//120 534 | f 81//121 132//121 7//121 535 | f 11//122 92//122 62//122 91//122 536 | f 4//123 82//123 133//123 537 | f 133//124 87//124 4//124 538 | f 5//125 6//125 3//125 539 | f 3//126 88//126 55//126 540 | f 83//127 55//127 88//127 541 | f 7//128 86//128 81//128 542 | f 4//129 87//129 9//129 543 | f 5//130 9//130 93//130 544 | f 5//131 93//131 6//131 545 | f 91//132 60//132 84//132 546 | f 2//133 60//133 61//133 547 | f 88//134 6//134 10//134 548 | f 11//135 84//135 88//135 549 | f 15//136 90//136 86//136 550 | f 90//137 8//137 87//137 551 | f 87//138 86//138 90//138 552 | f 13//139 2//139 12//139 553 | f 10//140 6//140 93//140 554 | f 8//141 95//141 9//141 555 | f 93//142 19//142 10//142 556 | f 10//143 92//143 11//143 557 | f 109//144 94//144 89//144 558 | f 136//145 89//145 94//145 559 | f 61//146 21//146 12//146 560 | f 14//147 23//147 63//147 19//147 561 | f 62//148 21//148 91//148 562 | f 90//149 17//149 8//149 563 | f 13//150 12//150 16//150 564 | f 13//151 24//151 85//151 565 | f 14//152 9//152 95//152 566 | f 16//153 12//153 21//153 567 | f 92//154 96//154 62//154 568 | f 62//155 96//155 21//155 569 | f 98//156 90//156 15//156 570 | f 16//157 22//157 24//157 571 | f 18//158 95//158 17//158 572 | f 18//159 14//159 95//159 573 | f 23//160 14//160 18//160 574 | f 18//161 64//161 23//161 575 | f 101//162 99//162 21//162 96//162 576 | f 20//163 92//163 19//163 577 | f 19//164 63//164 20//164 578 | f 15//165 97//165 98//165 579 | f 22//166 21//166 99//166 580 | f 113//167 31//167 68//167 112//167 581 | f 22//168 25//168 24//168 582 | f 85//169 24//169 69//169 583 | f 23//170 27//170 28//170 584 | f 100//171 98//171 97//171 585 | f 97//172 102//172 100//172 586 | f 25//173 99//173 30//173 587 | f 66//174 20//174 65//174 588 | f 109//175 104//175 94//175 589 | f 29//176 94//176 104//176 590 | f 101//177 30//177 99//177 591 | f 34//178 35//178 65//178 592 | f 65//179 35//179 68//179 593 | f 30//180 105//180 25//180 594 | f 24//181 25//181 105//181 595 | f 69//182 24//182 105//182 596 | f 66//183 31//183 101//183 597 | f 104//184 32//184 29//184 598 | f 31//185 30//185 101//185 599 | f 35//186 34//186 70//186 600 | f 106//187 107//187 103//187 601 | f 70//188 103//188 107//188 602 | f 35//189 111//189 112//189 603 | f 104//190 109//190 110//190 604 | f 114//191 71//191 115//191 108//191 605 | f 60//192 2//192 56//192 135//192 606 | f 36//193 32//193 110//193 607 | f 114//194 67//194 31//194 608 | f 31//195 113//195 114//195 609 | f 58//196 37//196 33//196 610 | f 37//197 116//197 106//197 611 | f 75//198 85//198 69//198 612 | f 35//199 70//199 111//199 613 | f 58//200 40//200 37//200 614 | f 117//201 43//201 113//201 615 | f 71//202 114//202 113//202 616 | f 38//203 37//203 40//203 617 | f 119//204 70//204 107//204 41//204 618 | f 69//205 108//205 115//205 619 | f 116//206 41//206 107//206 620 | f 119//207 39//207 111//207 70//207 621 | f 134//208 127//208 76//208 131//208 622 | f 112//209 111//209 39//209 623 | f 39//210 117//210 112//210 624 | f 119//211 46//211 39//211 625 | f 36//212 110//212 121//212 626 | f 121//213 138//213 36//213 627 | f 44//214 69//214 115//214 628 | f 118//215 116//215 38//215 629 | f 119//216 41//216 45//216 630 | f 110//217 109//217 121//217 631 | f 42//218 117//218 46//218 632 | f 43//219 120//219 71//219 633 | f 40//220 57//220 38//220 634 | f 57//221 122//221 38//221 635 | f 71//222 72//222 44//222 636 | f 124//223 118//223 38//223 637 | f 45//224 118//224 124//224 638 | f 123//225 119//225 45//225 639 | f 46//226 119//226 123//226 640 | f 123//227 74//227 46//227 641 | f 42//228 46//228 74//228 642 | f 121//229 139//229 138//229 643 | f 121//230 109//230 125//230 644 | f 47//231 72//231 120//231 645 | f 52//232 77//232 45//232 646 | f 48//233 45//233 77//233 647 | f 48//234 126//234 74//234 648 | f 76//235 74//235 126//235 649 | f 124//236 122//236 51//236 650 | f 53//237 73//237 49//237 651 | f 48//238 78//238 50//238 652 | f 127//239 128//239 72//239 653 | f 51//240 57//240 132//240 654 | f 140//241 125//241 130//241 655 | f 128//242 127//242 134//242 656 | f 128//243 129//243 49//243 657 | f 49//244 129//244 53//244 658 | f 53//245 85//245 75//245 659 | f 54//246 48//246 77//246 660 | f 125//247 109//247 130//247 661 | f 79//248 140//248 130//248 662 | f 134//249 135//249 128//249 663 | f 53//250 129//250 56//250 664 | f 54//251 77//251 82//251 665 | f 54//252 1//252 78//252 666 | f 50//253 78//253 1//253 667 | f 55//254 50//254 3//254 668 | f 130//255 109//255 80//255 669 | f 83//256 134//256 55//256 670 | f 81//257 51//257 132//257 671 | f 7//258 132//258 79//258 672 | f 140//259 132//259 57//259 673 | f 57//260 139//260 140//260 674 | f 138//261 139//261 57//261 675 | f 40//262 138//262 57//262 676 | f 36//263 138//263 40//263 677 | f 102//264 29//264 32//264 678 | f 97//265 15//265 137//265 679 | f 15//266 136//266 137//266 680 | f 59//267 15//267 7//267 681 | o trunk_Cube 682 | v 0.065239 0.011577 0.370610 683 | v -0.221539 -0.010605 0.316351 684 | v 0.070569 0.858406 -0.297504 685 | v 0.007337 -0.052761 0.281262 686 | v -0.114839 0.707263 -0.293511 687 | v 0.150647 0.010289 -0.336706 688 | v 0.366750 0.010699 0.081002 689 | v -0.263014 1.573242 -0.019474 690 | v 0.198901 2.239453 0.024822 691 | v -0.102421 -0.027706 -0.353087 692 | v 0.263877 -0.018269 -0.269950 693 | v 0.339685 -0.030309 -0.133546 694 | v 0.269277 -0.018696 0.268582 695 | v -0.367467 0.010903 -0.080628 696 | v -0.342151 -0.028796 0.143257 697 | v -0.086367 2.428622 0.138785 698 | v 0.117176 2.099969 0.143698 699 | v 0.025707 5.522987 -0.216920 700 | v -0.150868 5.447255 -0.089182 701 | v 0.115374 5.503716 0.019335 702 | v 0.010557 5.511070 0.060276 703 | v 0.121645 5.560866 -0.102743 704 | v -0.109499 3.311795 -0.284867 705 | v -0.202026 1.763187 0.111283 706 | v -0.251294 0.735130 -0.204693 707 | v -0.076368 5.547567 -0.076136 708 | v -0.100347 5.438909 -0.219616 709 | v -0.277145 -0.017972 -0.256091 710 | v 0.216222 1.440201 -0.153189 711 | v -0.115852 5.458795 0.016657 712 | vn -0.0533 -0.7937 0.6060 713 | vn -0.1470 -0.9678 0.2041 714 | vn -0.0775 -0.9962 -0.0396 715 | vn 0.0520 -0.9918 -0.1164 716 | vn 0.1312 -0.9900 0.0516 717 | vn 0.9868 0.0810 -0.1400 718 | vn 0.0568 0.0515 -0.9971 719 | vn 0.4715 -0.8753 0.1078 720 | vn -0.4758 -0.8737 -0.1011 721 | vn -0.6912 0.0905 0.7170 722 | vn 0.5125 0.0861 -0.8544 723 | vn -0.7986 0.5668 0.2024 724 | vn -0.7389 0.5909 -0.3240 725 | vn -0.4724 0.7286 0.4960 726 | vn -0.0276 0.9611 0.2748 727 | vn 0.0162 0.0250 0.9996 728 | vn 0.3657 0.0342 0.9301 729 | vn 0.9977 0.0256 0.0633 730 | vn -0.9225 0.0314 0.3847 731 | vn -0.9499 0.0331 0.3107 732 | vn 0.0009 0.0307 -0.9995 733 | vn 0.7624 0.0185 -0.6468 734 | vn 0.1349 -0.8435 0.5200 735 | vn -0.8782 0.0771 0.4721 736 | vn -0.5450 0.0039 -0.8385 737 | vn -0.0243 0.0034 -0.9997 738 | vn -0.0567 -0.9979 -0.0296 739 | vn 0.0150 -0.9990 -0.0421 740 | vn -0.9905 0.0614 0.1229 741 | vn -0.5053 0.0687 -0.8602 742 | vn -0.9111 0.0768 -0.4050 743 | vn -0.8832 0.0620 -0.4649 744 | vn -0.0858 0.0791 -0.9932 745 | vn -0.9645 0.0270 -0.2626 746 | vn 0.8746 0.0670 -0.4802 747 | vn 0.7789 0.0744 0.6227 748 | vn 0.8778 0.0907 0.4704 749 | vn 0.9751 0.0681 -0.2110 750 | vn 0.1566 -0.7838 -0.6009 751 | vn 0.4557 0.0849 0.8861 752 | vn -0.1914 0.0818 0.9781 753 | vn 0.1432 0.1034 0.9843 754 | vn -0.4806 0.7359 -0.4770 755 | vn 0.2266 0.8776 0.4225 756 | vn -0.0970 0.9662 -0.2390 757 | vn -0.4062 0.0329 0.9132 758 | vn -0.3388 0.0346 0.9402 759 | vn 0.8118 0.0218 0.5836 760 | vn 0.9997 0.0230 -0.0061 761 | vn -0.7727 0.0228 -0.6344 762 | vn 0.6531 0.0243 -0.7569 763 | vn 0.1867 0.0188 -0.9822 764 | usemtl tree_bark_dark 765 | s off 766 | f 141//268 142//268 144//268 767 | f 144//269 142//269 155//269 768 | f 155//270 168//270 150//270 769 | f 150//271 151//271 152//271 770 | f 152//272 153//272 144//272 771 | f 147//273 152//273 169//273 772 | f 143//274 146//274 150//274 773 | f 147//275 153//275 152//275 774 | f 154//276 168//276 155//276 775 | f 156//277 164//277 142//277 776 | f 151//278 146//278 143//278 169//278 777 | f 159//279 170//279 166//279 778 | f 159//280 166//280 167//280 779 | f 161//281 166//281 170//281 780 | f 166//282 161//282 162//282 781 | f 157//283 161//283 156//283 782 | f 160//284 161//284 157//284 783 | f 149//285 162//285 160//285 784 | f 148//286 164//286 170//286 785 | f 170//287 159//287 148//287 786 | f 163//288 167//288 158//288 787 | f 158//289 162//289 143//289 788 | f 141//290 144//290 153//290 789 | f 164//291 148//291 155//291 142//291 790 | f 145//292 165//292 163//292 791 | f 143//293 145//293 163//293 792 | f 144//294 155//294 150//294 793 | f 144//295 150//295 152//295 794 | f 154//296 155//296 148//296 795 | f 165//297 145//297 150//297 168//297 796 | f 148//298 165//298 154//298 797 | f 154//299 165//299 168//299 798 | f 143//300 150//300 145//300 799 | f 165//301 148//301 159//301 167//301 800 | f 169//302 152//302 151//302 801 | f 147//303 149//303 157//303 802 | f 157//304 153//304 147//304 803 | f 149//305 147//305 169//305 804 | f 150//306 146//306 151//306 805 | f 157//307 141//307 153//307 806 | f 156//308 142//308 141//308 807 | f 156//309 141//309 157//309 808 | f 158//310 167//310 166//310 809 | f 160//311 162//311 161//311 810 | f 166//312 162//312 158//312 811 | f 170//313 164//313 156//313 812 | f 156//314 161//314 170//314 813 | f 160//315 157//315 149//315 814 | f 149//316 169//316 162//316 815 | f 165//317 167//317 163//317 816 | f 143//318 162//318 169//318 817 | f 143//319 163//319 158//319 818 | -------------------------------------------------------------------------------- /models/tree-spreading.mtl: -------------------------------------------------------------------------------- 1 | # Blender MTL File: 'tree-spreading.blend' 2 | # Material Count: 2 3 | 4 | newmtl tree_bark_light 5 | Ns 96.078431 6 | Ka 1.000000 1.000000 1.000000 7 | Kd 0.576000 0.286000 0.369000 8 | Ks 0.500000 0.500000 0.500000 9 | Ke 0.000000 0.000000 0.000000 10 | Ni 1.000000 11 | d 1.000000 12 | illum 2 13 | 14 | newmtl tree_green 15 | Ns 96.078431 16 | Ka 1.000000 1.000000 1.000000 17 | Kd 0.500000 0.750000 0.360000 18 | Ks 0.500000 0.500000 0.500000 19 | Ke 0.000000 0.000000 0.000000 20 | Ni 1.000000 21 | d 1.000000 22 | illum 2 23 | -------------------------------------------------------------------------------- /models/tree-spreading.obj: -------------------------------------------------------------------------------- 1 | # Blender v2.78 (sub 0) OBJ File: 'tree-spreading.blend' 2 | # www.blender.org 3 | mtllib tree-spreading.mtl 4 | o leaves_Icosphere.002 5 | v 3.524082 4.344069 2.824097 6 | v -2.076047 4.757895 4.772608 7 | v -4.708872 4.559082 0.285584 8 | v -2.036963 4.861600 -3.828379 9 | v -0.012327 7.696680 4.594481 10 | v 1.179283 7.478718 -5.109258 11 | v 5.053600 7.825820 -0.045252 12 | v -0.858759 9.570326 -0.033247 13 | v -0.901974 4.514370 0.866524 14 | v 0.162651 4.280246 1.416698 15 | v 1.363619 4.675287 3.286239 16 | v -0.057289 3.946288 -0.610213 17 | v 1.213403 4.698646 -2.751325 18 | v -3.076897 4.634423 0.286792 19 | v -4.906467 4.482756 2.277664 20 | v -2.230797 4.501980 -0.761681 21 | v -5.547067 4.532180 -1.297029 22 | v -4.564609 4.502694 -3.396714 23 | v 6.140679 6.785109 0.912591 24 | v 6.233930 5.624941 1.088369 25 | v 5.165716 5.089962 1.377136 26 | v 3.863224 5.007676 -1.633113 27 | v 6.112030 6.649929 -1.261239 28 | v 1.432022 6.961434 5.981205 29 | v 1.188184 6.118759 6.255482 30 | v 4.080451 5.523019 4.722375 31 | v 2.821763 5.520923 5.603830 32 | v -6.480104 5.607391 2.718204 33 | v -6.369065 4.817067 1.981139 34 | v -2.889806 5.792501 5.176508 35 | v -3.670216 6.325022 4.826388 36 | v -3.875270 7.223147 4.090273 37 | v -4.814829 5.565266 -4.617160 38 | v -6.609130 5.078727 -0.557905 39 | v -7.196713 5.892761 -1.542084 40 | v -6.770829 6.643882 -1.982801 41 | v 1.915374 5.734861 -5.005704 42 | v -3.527611 5.242663 -4.813139 43 | v -1.103496 5.438562 -5.516579 44 | v 0.155396 5.775491 -5.499940 45 | v 5.071098 7.541515 2.405573 46 | v 3.624359 7.981301 3.725289 47 | v -1.971302 7.454688 4.674795 48 | v -6.442255 7.205159 -0.939567 49 | v -5.605188 6.387950 -3.661366 50 | v -0.167418 7.322609 -5.155519 51 | v 3.616691 7.316155 -2.855498 52 | v 5.146627 7.375920 -1.692684 53 | v 1.616307 9.069668 2.395331 54 | v 1.757104 8.090915 4.404226 55 | v 2.631963 8.971233 0.266300 56 | v 0.315589 9.459072 -0.515293 57 | v -2.254622 9.266731 0.782686 58 | v -2.401325 8.280668 3.763057 59 | v -3.604980 9.043697 -0.727393 60 | v -5.339449 8.334833 -0.831587 61 | v 0.937139 8.126371 -4.548919 62 | v -1.505097 8.952520 -2.779354 63 | v -0.691077 8.389786 -3.927975 64 | v -3.977243 7.962835 3.244635 65 | v 3.296896 8.744422 1.855486 66 | v 4.991482 6.591214 -2.765563 67 | v 2.905424 5.750379 -4.320687 68 | v -3.471336 5.728299 -5.231905 69 | v -7.391065 5.735272 0.895798 70 | v 4.861967 6.518317 3.840987 71 | v -0.529623 4.931126 -4.555105 72 | v -6.120741 5.808320 -3.529491 73 | v -5.438972 4.855199 -3.698232 74 | v -5.127649 5.573566 3.879840 75 | v -4.133603 4.778037 4.186527 76 | v -0.307782 4.644096 5.590913 77 | v 2.237550 4.881622 5.280183 78 | v 5.652553 5.779217 -1.803831 79 | v 5.638478 4.946060 -0.109888 80 | v 4.944910 5.124194 -1.358461 81 | v -0.826503 4.370638 -2.352620 82 | v -3.763963 4.692071 -1.415906 83 | v -1.964606 4.788553 1.495945 84 | v 1.459739 4.448078 -0.019321 85 | v 3.032870 4.308675 1.883459 86 | v 0.080974 4.541817 2.438312 87 | vn 0.3140 -0.9407 -0.1286 88 | vn -0.0728 -0.9951 0.0670 89 | vn -0.2560 -0.9422 0.2161 90 | vn -0.3733 -0.5771 0.7263 91 | vn -0.2112 -0.9757 -0.0583 92 | vn 0.0543 -0.9008 -0.4308 93 | vn 0.5960 -0.7487 0.2903 94 | vn -0.2305 -0.9699 -0.0782 95 | vn -0.6995 0.6976 -0.1550 96 | vn -0.0483 0.6431 -0.7642 97 | vn 0.2826 0.9229 -0.2614 98 | vn 0.3935 0.8922 -0.2214 99 | vn 0.2597 0.8847 -0.3871 100 | vn 0.4470 0.8410 -0.3049 101 | vn 0.5342 0.6584 -0.5302 102 | vn 0.0361 0.9505 -0.3085 103 | vn 0.0021 0.9755 -0.2200 104 | vn -0.1395 0.9726 -0.1860 105 | vn 0.1631 0.9267 -0.3385 106 | vn -0.3309 0.8651 -0.3771 107 | vn -0.1450 0.7152 -0.6837 108 | vn -0.3310 0.7334 -0.5938 109 | vn -0.3794 0.7785 -0.5000 110 | vn -0.4993 0.7350 -0.4588 111 | vn -0.1956 0.9802 0.0301 112 | vn -0.3807 0.9011 0.2074 113 | vn -0.3817 0.9002 0.2097 114 | vn -0.2798 0.9155 0.2891 115 | vn -0.0236 0.9495 0.3130 116 | vn -0.0893 0.9536 0.2876 117 | vn -0.0268 0.8979 0.4394 118 | vn -0.3487 0.6842 0.6405 119 | vn -0.2964 0.6341 0.7142 120 | vn -0.0615 0.7251 0.6859 121 | vn -0.0783 0.6959 0.7138 122 | vn 0.1251 0.9892 0.0764 123 | vn 0.1910 0.9805 0.0458 124 | vn 0.2062 0.9771 0.0532 125 | vn 0.4221 0.9053 -0.0474 126 | vn 0.2037 0.8857 0.4172 127 | vn 0.2783 0.9054 0.3208 128 | vn 0.4870 0.8352 0.2556 129 | vn 0.5388 0.8373 0.0933 130 | vn 0.6395 0.7501 -0.1687 131 | vn 0.8018 -0.0522 -0.5952 132 | vn 0.3400 -0.8683 -0.3611 133 | vn 0.6512 0.5646 -0.5071 134 | vn 0.4104 0.7068 -0.5763 135 | vn 0.6452 -0.3047 -0.7007 136 | vn 0.3420 0.5545 -0.7586 137 | vn 0.6506 0.3399 -0.6791 138 | vn 0.2491 -0.9071 -0.3394 139 | vn 0.5570 0.1870 -0.8092 140 | vn 0.0081 0.2189 -0.9757 141 | vn -0.0429 0.2086 -0.9771 142 | vn -0.1683 -0.6325 -0.7561 143 | vn -0.0884 0.2297 -0.9692 144 | vn -0.2992 0.6533 -0.6955 145 | vn -0.3049 0.6565 -0.6900 146 | vn -0.2667 -0.6115 -0.7450 147 | vn -0.4105 0.4952 -0.7657 148 | vn -0.8682 0.4961 0.0065 149 | vn -0.7440 -0.6603 -0.1020 150 | vn -0.8593 0.5103 -0.0355 151 | vn -0.7128 0.6791 0.1754 152 | vn -0.6529 0.7029 0.2823 153 | vn -0.6593 -0.7517 -0.0151 154 | vn -0.8069 -0.4595 0.3711 155 | vn -0.6748 0.6317 0.3816 156 | vn -0.3045 0.5612 0.7696 157 | vn -0.2660 0.2262 0.9370 158 | vn -0.2319 0.4635 0.8552 159 | vn -0.2856 0.3703 0.8839 160 | vn -0.0822 0.8425 0.5324 161 | vn -0.1221 0.8186 0.5612 162 | vn 0.5321 0.3066 0.7892 163 | vn 0.4494 0.6798 0.5795 164 | vn 0.3378 0.3547 0.8718 165 | vn 0.5527 0.2655 0.7899 166 | vn 0.6382 0.5799 0.5064 167 | vn 0.4882 -0.8312 0.2660 168 | vn 0.8411 -0.2246 0.4921 169 | vn 0.9036 0.1343 0.4068 170 | vn 0.8308 0.3888 0.3982 171 | vn 0.6500 0.7554 0.0830 172 | vn 0.2711 0.0574 -0.9608 173 | vn 0.1493 -0.7886 -0.5965 174 | vn 0.2218 -0.8015 -0.5554 175 | vn -0.0553 -0.8963 -0.4400 176 | vn 0.2353 -0.9088 -0.3445 177 | vn -0.0783 -0.9639 -0.2545 178 | vn -0.5664 0.3322 -0.7542 179 | vn -0.2723 -0.6630 -0.6973 180 | vn -0.6831 0.4829 -0.5480 181 | vn -0.8564 0.2083 -0.4725 182 | vn -0.6391 -0.3345 -0.6926 183 | vn -0.7774 -0.4852 -0.4003 184 | vn -0.6663 -0.7192 -0.1971 185 | vn -0.1475 -0.8282 -0.5406 186 | vn -0.3282 -0.9341 -0.1404 187 | vn -0.5268 -0.8390 -0.1366 188 | vn -0.3382 -0.9207 0.1948 189 | vn -0.6297 0.5455 0.5531 190 | vn -0.6011 0.3657 0.7105 191 | vn -0.6351 0.3977 0.6622 192 | vn -0.5198 -0.6206 0.5871 193 | vn -0.6036 -0.5220 0.6026 194 | vn -0.4468 -0.2244 0.8661 195 | vn -0.5089 -0.1944 0.8386 196 | vn -0.2638 -0.9314 0.2509 197 | vn -0.2401 -0.5110 0.8253 198 | vn -0.2370 -0.1890 0.9529 199 | vn 0.4181 0.1695 0.8925 200 | vn 0.1513 -0.5296 0.8346 201 | vn 0.1329 -0.5416 0.8300 202 | vn 0.4188 -0.6847 0.5965 203 | vn 0.0999 -0.9932 0.0590 204 | vn -0.1177 -0.9812 0.1531 205 | vn 0.4061 -0.8249 0.3933 206 | vn 0.7145 0.6977 -0.0528 207 | vn 0.9797 0.0493 -0.1943 208 | vn 0.4854 -0.8419 0.2358 209 | vn 0.8796 -0.4754 0.0180 210 | vn 0.8842 -0.4221 -0.2002 211 | vn 0.4865 -0.7856 -0.3823 212 | vn 0.2440 -0.7116 -0.6589 213 | vn -0.0919 -0.9935 0.0669 214 | vn 0.1610 -0.9606 -0.2265 215 | vn 0.0996 -0.9558 -0.2767 216 | vn 0.1103 -0.9667 -0.2311 217 | vn -0.0789 -0.9635 -0.2558 218 | vn -0.2371 -0.9628 -0.1298 219 | vn -0.2350 -0.9636 -0.1278 220 | vn 0.1464 -0.9886 0.0353 221 | vn -0.0713 -0.9901 -0.1206 222 | vn 0.0930 -0.9940 0.0575 223 | vn -0.1312 -0.9912 0.0194 224 | vn 0.0461 -0.9976 -0.0524 225 | vn 0.0873 -0.9957 -0.0293 226 | vn 0.0459 -0.9954 0.0847 227 | vn 0.0958 -0.9950 -0.0286 228 | vn -0.1142 -0.9669 0.2283 229 | vn 0.1019 -0.9948 -0.0058 230 | vn -0.0598 -0.9825 0.1762 231 | vn 0.2490 -0.9071 -0.3394 232 | vn 0.3183 -0.9414 -0.1120 233 | vn 0.1585 -0.9818 -0.1043 234 | vn 0.1156 -0.9791 -0.1673 235 | vn 0.3526 -0.9284 -0.1169 236 | vn 0.0251 -0.9953 -0.0937 237 | vn 0.2659 -0.9554 0.1286 238 | vn -0.3021 -0.9348 0.1868 239 | vn -0.1138 -0.9934 -0.0132 240 | vn -0.1764 -0.9760 0.1274 241 | vn -0.0749 -0.9969 0.0231 242 | vn 0.0761 -0.9962 0.0417 243 | vn -0.3131 -0.9257 0.2120 244 | vn -0.0600 -0.9681 0.2431 245 | vn -0.0266 -0.9745 0.2230 246 | vn -0.1289 -0.9862 0.1044 247 | usemtl tree_green 248 | s off 249 | f 1//1 81//1 21//1 250 | f 9//2 14//2 16//2 251 | f 9//3 16//3 12//3 252 | f 2//4 72//4 30//4 253 | f 3//5 15//5 29//5 254 | f 4//6 18//6 38//6 255 | f 1//7 21//7 26//7 256 | f 3//8 29//8 34//8 257 | f 36//9 44//9 56//9 258 | f 6//10 46//10 57//10 259 | f 51//11 57//11 52//11 260 | f 7//12 48//12 51//12 261 | f 48//13 47//13 51//13 262 | f 51//14 47//14 57//14 263 | f 47//15 6//15 57//15 264 | f 57//16 59//16 52//16 265 | f 52//17 58//17 8//17 266 | f 58//18 55//18 8//18 267 | f 52//19 59//19 58//19 268 | f 58//20 56//20 55//20 269 | f 57//21 46//21 59//21 270 | f 59//22 45//22 58//22 271 | f 58//23 45//23 56//23 272 | f 45//24 36//24 56//24 273 | f 55//25 53//25 8//25 274 | f 55//26 56//26 53//26 275 | f 56//27 60//27 53//27 276 | f 53//28 60//28 54//28 277 | f 53//29 54//29 8//29 278 | f 54//30 49//30 8//30 279 | f 54//31 50//31 49//31 280 | f 60//32 32//32 54//32 281 | f 32//33 43//33 54//33 282 | f 43//34 5//34 54//34 283 | f 54//35 5//35 50//35 284 | f 8//36 49//36 52//36 285 | f 49//37 51//37 52//37 286 | f 49//38 61//38 51//38 287 | f 61//39 7//39 51//39 288 | f 50//40 42//40 49//40 289 | f 49//41 42//41 61//41 290 | f 42//42 41//42 61//42 291 | f 61//43 41//43 7//43 292 | f 23//44 48//44 7//44 293 | f 74//45 62//45 23//45 294 | f 22//46 63//46 74//46 295 | f 23//47 62//47 48//47 296 | f 62//48 47//48 48//48 297 | f 74//49 63//49 62//49 298 | f 62//50 63//50 47//50 299 | f 63//51 6//51 47//51 300 | f 22//52 37//52 63//52 301 | f 63//53 37//53 6//53 302 | f 40//54 46//54 6//54 303 | f 39//55 46//55 40//55 304 | f 38//56 64//56 39//56 305 | f 39//57 64//57 46//57 306 | f 46//58 64//58 59//58 307 | f 64//59 45//59 59//59 308 | f 38//60 33//60 64//60 309 | f 33//61 45//61 64//61 310 | f 35//62 44//62 36//62 311 | f 34//63 65//63 35//63 312 | f 35//64 65//64 44//64 313 | f 44//65 65//65 56//65 314 | f 65//66 60//66 56//66 315 | f 34//67 29//67 65//67 316 | f 29//68 28//68 65//68 317 | f 65//69 28//69 60//69 318 | f 31//70 43//70 32//70 319 | f 30//71 25//71 31//71 320 | f 31//72 25//72 43//72 321 | f 25//73 24//73 43//73 322 | f 43//74 24//74 5//74 323 | f 24//75 50//75 5//75 324 | f 27//76 66//76 24//76 325 | f 24//77 66//77 50//77 326 | f 66//78 42//78 50//78 327 | f 27//79 26//79 66//79 328 | f 66//80 41//80 42//80 329 | f 21//81 20//81 26//81 330 | f 26//82 20//82 66//82 331 | f 20//83 19//83 66//83 332 | f 66//84 19//84 41//84 333 | f 19//85 7//85 41//85 334 | f 37//86 40//86 6//86 335 | f 37//87 67//87 40//87 336 | f 40//88 67//88 39//88 337 | f 67//89 38//89 39//89 338 | f 13//90 67//90 37//90 339 | f 67//91 4//91 38//91 340 | f 33//92 68//92 45//92 341 | f 38//93 69//93 33//93 342 | f 45//94 68//94 36//94 343 | f 68//95 35//95 36//95 344 | f 33//96 69//96 68//96 345 | f 68//97 69//97 35//97 346 | f 69//98 34//98 35//98 347 | f 38//99 18//99 69//99 348 | f 18//100 17//100 69//100 349 | f 69//101 17//101 34//101 350 | f 17//102 3//102 34//102 351 | f 28//103 32//103 60//103 352 | f 28//104 70//104 32//104 353 | f 70//105 31//105 32//105 354 | f 28//106 29//106 70//106 355 | f 29//107 71//107 70//107 356 | f 70//108 71//108 31//108 357 | f 71//109 30//109 31//109 358 | f 29//110 15//110 71//110 359 | f 71//111 2//111 30//111 360 | f 30//112 72//112 25//112 361 | f 25//113 27//113 24//113 362 | f 72//114 73//114 25//114 363 | f 25//115 73//115 27//115 364 | f 73//116 26//116 27//116 365 | f 72//117 11//117 73//117 366 | f 11//118 1//118 73//118 367 | f 73//119 1//119 26//119 368 | f 19//120 23//120 7//120 369 | f 20//121 74//121 19//121 370 | f 21//122 75//122 20//122 371 | f 19//123 74//123 23//123 372 | f 20//124 75//124 74//124 373 | f 75//125 76//125 74//125 374 | f 76//126 22//126 74//126 375 | f 21//127 22//127 75//127 376 | f 75//128 22//128 76//128 377 | f 12//129 77//129 13//129 378 | f 13//130 77//130 67//130 379 | f 77//131 4//131 67//131 380 | f 12//132 16//132 77//132 381 | f 16//133 4//133 77//133 382 | f 4//134 78//134 18//134 383 | f 4//135 16//135 78//135 384 | f 78//136 17//136 18//136 385 | f 16//137 14//137 78//137 386 | f 14//138 3//138 78//138 387 | f 78//139 3//139 17//139 388 | f 14//140 79//140 3//140 389 | f 3//141 79//141 15//141 390 | f 14//142 9//142 79//142 391 | f 79//143 2//143 15//143 392 | f 15//144 2//144 71//144 393 | f 22//145 13//145 37//145 394 | f 21//146 81//146 22//146 395 | f 22//147 80//147 13//147 396 | f 22//148 81//148 80//148 397 | f 80//149 12//149 13//149 398 | f 81//150 10//150 80//150 399 | f 80//151 10//151 12//151 400 | f 10//152 9//152 12//152 401 | f 79//153 82//153 2//153 402 | f 9//154 82//154 79//154 403 | f 2//155 82//155 72//155 404 | f 82//156 11//156 72//156 405 | f 9//157 10//157 82//157 406 | f 82//158 10//158 11//158 407 | f 10//159 81//159 11//159 408 | f 11//160 81//160 1//160 409 | o trunk_Cube 410 | v 0.027656 -0.007227 0.447302 411 | v -0.289007 0.001421 0.361075 412 | v -0.350634 0.617017 0.094337 413 | v -0.214920 0.569371 -0.288460 414 | v 0.023994 0.940921 -0.351471 415 | v -0.672290 1.862432 -0.088893 416 | v 0.272467 1.210112 0.022780 417 | v -0.497669 2.452068 0.302469 418 | v -0.755060 2.347944 0.174502 419 | v 1.840289 4.378814 -0.125871 420 | v -0.172307 2.727377 -0.000285 421 | v -0.461126 2.040517 -0.301820 422 | v -0.298581 3.054394 -0.303270 423 | v -0.892724 3.462137 -0.229327 424 | v -0.852973 3.045056 -0.047469 425 | v -0.884474 3.176148 -0.152740 426 | v 2.061075 5.471756 -0.113247 427 | v 1.228909 4.024448 -0.424789 428 | v 1.081676 3.599301 -0.019631 429 | v 1.607004 4.639970 -0.191443 430 | v 1.032022 3.879004 -0.094981 431 | v 2.131611 5.402952 -0.382174 432 | v -2.729946 5.197021 -0.151485 433 | v -1.163654 3.632040 0.154603 434 | v -2.128721 3.764605 0.147155 435 | v 1.985221 5.467185 -0.362658 436 | v 2.182823 5.427607 -0.171042 437 | v -2.800885 5.161224 0.036299 438 | v -2.878513 5.125021 -0.244133 439 | v 0.051136 -0.012852 -0.454610 440 | v 0.386974 -0.000868 -0.251181 441 | v 0.385397 0.002598 0.270091 442 | v -0.446555 -0.007199 0.029750 443 | v -0.361220 0.001452 -0.288768 444 | v -0.117599 3.535606 -0.110837 445 | v 0.464058 3.593089 0.032227 446 | v 0.491814 3.501765 -0.394715 447 | v 0.014683 3.084027 -0.138056 448 | v -0.117111 3.161613 0.220882 449 | v -0.109288 0.618439 0.343590 450 | v -0.743339 2.998138 0.456616 451 | v -0.755878 3.591726 1.279422 452 | v -0.333006 3.269563 0.726755 453 | v -0.422443 5.105277 1.837027 454 | v -0.621016 5.097471 1.884471 455 | v -2.093704 3.591589 -0.066019 456 | v -1.652871 4.171167 -1.084610 457 | v -1.609693 4.554992 -1.327128 458 | v -1.943423 3.904490 0.234160 459 | v -1.819575 3.968162 0.171998 460 | v -0.797979 3.678133 1.525755 461 | v 2.031757 4.740176 -0.324666 462 | v 1.948812 5.487041 -0.248664 463 | v -1.635876 4.292068 -1.023042 464 | v -0.435775 3.532321 1.526632 465 | v -0.553117 3.597837 1.074360 466 | v -2.131314 3.791676 -0.201782 467 | v -1.826602 3.636355 -0.219970 468 | v -1.709501 3.780576 -0.157939 469 | v -1.994314 4.030369 -0.158496 470 | v -1.860901 3.941097 -0.288055 471 | v -0.474526 3.908245 1.667841 472 | v -0.316213 4.026925 2.333674 473 | v -0.386265 3.926633 1.959141 474 | v -0.104373 4.818018 2.646236 475 | v -0.188592 4.821406 2.517954 476 | v -0.327756 4.831180 2.654661 477 | v -0.541078 4.022537 2.212715 478 | v -0.340625 4.276246 2.272243 479 | v -0.422161 4.166740 2.463773 480 | v -0.586663 3.738691 2.021230 481 | v -0.360892 2.792797 0.246476 482 | v -0.472397 3.433257 0.201940 483 | v 1.253632 3.637132 -0.328780 484 | v -1.739948 4.242004 -1.153438 485 | v -1.995702 3.642699 -0.240623 486 | v -0.552137 5.147048 1.740353 487 | v -0.241161 2.743935 -0.209795 488 | v -0.947061 3.297351 0.306201 489 | v -2.943891 5.064518 -0.058439 490 | v -1.699473 4.305897 -1.012479 491 | v -1.601693 4.562097 -1.189715 492 | v -0.550359 3.799072 1.373383 493 | v -0.656067 3.847230 1.750450 494 | vn 0.4259 0.2379 0.8729 495 | vn 0.1124 0.0943 -0.9892 496 | vn 0.7647 0.1615 -0.6238 497 | vn -0.0394 -0.9982 0.0447 498 | vn -0.0510 -0.9979 -0.0408 499 | vn -0.9204 0.1775 -0.3484 500 | vn 0.5124 0.1067 -0.8521 501 | vn 0.9956 0.0936 0.0024 502 | vn -0.6748 -0.0774 -0.7339 503 | vn 0.9218 0.2659 -0.2819 504 | vn -0.4216 -0.0690 0.9042 505 | vn -0.7039 -0.1961 0.6827 506 | vn 0.7018 -0.6404 0.3120 507 | vn 0.6731 -0.4018 0.6209 508 | vn -0.2414 0.0373 -0.9697 509 | vn -0.9343 -0.3309 -0.1325 510 | vn 0.6518 -0.1056 -0.7510 511 | vn -0.0581 -0.2598 -0.9639 512 | vn 0.1246 0.1110 -0.9860 513 | vn -0.9592 -0.2768 -0.0577 514 | vn 0.1246 -0.2312 -0.9649 515 | vn -0.3050 -0.9302 0.2041 516 | vn 0.2059 0.8368 0.5074 517 | vn 0.2818 0.9020 -0.3271 518 | vn -0.2332 -0.2719 0.9337 519 | vn 0.3719 0.9073 -0.1962 520 | vn -0.5851 0.8089 0.0575 521 | vn -0.4389 0.8985 0.0055 522 | vn -0.2855 -0.3771 0.8811 523 | vn -0.3686 0.0955 -0.9247 524 | vn -0.9000 0.0943 0.4255 525 | vn -0.0559 0.9702 -0.2357 526 | vn -0.2291 0.7377 0.6351 527 | vn -0.2261 0.7836 -0.5787 528 | vn 0.0778 0.2722 0.9591 529 | vn -0.1188 0.0069 -0.9929 530 | vn 0.4203 -0.8989 0.1238 531 | vn -0.7177 -0.0419 0.6951 532 | vn 0.1240 0.9428 -0.3095 533 | vn -0.8542 -0.4573 0.2472 534 | vn -0.3126 0.9245 -0.2182 535 | vn -0.2320 0.9517 -0.2010 536 | vn 0.7689 0.6301 -0.1082 537 | vn 0.0059 -0.7099 0.7043 538 | vn 0.3581 -0.8724 0.3326 539 | vn 0.9902 -0.1400 0.0015 540 | vn 0.6459 0.7360 -0.2030 541 | vn 0.8006 -0.5681 -0.1905 542 | vn 0.0317 -0.8529 -0.5212 543 | vn -0.9256 0.3770 0.0344 544 | vn -0.7746 -0.4483 -0.4461 545 | vn 0.1842 0.0721 -0.9803 546 | vn 0.7985 0.5054 -0.3270 547 | vn 0.1732 0.2589 -0.9502 548 | vn -0.8325 -0.0359 0.5528 549 | vn 0.4416 -0.1079 0.8907 550 | vn 0.6266 0.2055 -0.7518 551 | vn 0.9629 -0.1637 -0.2145 552 | vn 0.8922 -0.2760 0.3576 553 | vn -0.2330 0.0358 0.9718 554 | vn -0.7087 0.3282 0.6246 555 | vn -0.9062 0.4167 0.0713 556 | vn 0.2068 -0.5391 -0.8164 557 | vn 0.1247 -0.9016 0.4142 558 | vn -0.5056 0.7179 -0.4785 559 | vn 0.9237 0.2144 -0.3174 560 | vn 0.9326 0.2072 -0.2956 561 | vn -0.0639 -0.7053 0.7060 562 | vn -0.0011 0.9351 -0.3543 563 | vn -0.3051 0.9518 0.0324 564 | vn -0.5731 0.5870 -0.5719 565 | vn 0.0584 0.9982 -0.0120 566 | vn 0.8360 0.0141 -0.5485 567 | vn 0.4182 -0.4284 0.8010 568 | vn -0.8925 0.2904 0.3452 569 | vn -0.8290 -0.2151 0.5162 570 | vn -0.0054 -1.0000 0.0061 571 | vn 0.6602 -0.3573 -0.6607 572 | vn -0.9388 0.2420 -0.2450 573 | vn -0.3807 0.0887 -0.9204 574 | vn 0.7353 0.2149 -0.6428 575 | vn 0.7331 0.2016 0.6495 576 | vn 0.2264 0.0688 0.9716 577 | vn -0.9881 -0.1498 -0.0345 578 | vn -0.9760 -0.0716 0.2056 579 | vn -0.9155 -0.2791 -0.2898 580 | vn -0.9651 -0.2312 0.1229 581 | vn -0.6548 -0.1164 -0.7468 582 | vn -0.1941 -0.0414 -0.9801 583 | vn 0.0312 -0.9995 0.0069 584 | vn 0.8007 0.2430 0.5475 585 | vn 0.7914 -0.5574 -0.2509 586 | vn 0.2595 -0.1579 -0.9527 587 | vn 0.8700 -0.3071 0.3858 588 | vn 0.0569 0.3551 -0.9331 589 | vn -0.2900 -0.2554 -0.9223 590 | vn -0.8495 -0.5094 0.1374 591 | vn 0.3817 0.8918 -0.2429 592 | vn -0.1469 0.2329 0.9613 593 | vn -0.0602 0.1921 0.9795 594 | vn -0.5780 0.8159 0.0148 595 | vn -0.7914 0.5699 -0.2211 596 | vn -0.8313 0.5474 -0.0969 597 | vn -0.3703 -0.7501 0.5479 598 | vn -0.3210 -0.8451 -0.4275 599 | vn -0.0222 0.9083 -0.4177 600 | vn 0.7272 0.6861 0.0208 601 | vn 0.1192 0.3077 0.9440 602 | vn 0.2328 0.4087 0.8825 603 | vn 0.2938 0.9499 -0.1068 604 | vn 0.2415 0.9661 -0.0911 605 | vn 0.4642 -0.0409 0.8848 606 | vn -0.1370 0.9769 0.1643 607 | vn 0.0764 0.3113 0.9473 608 | vn 0.1331 0.2411 0.9613 609 | vn 0.1569 -0.4562 -0.8759 610 | vn 0.3813 -0.8647 0.3269 611 | vn 0.3100 -0.8448 -0.4362 612 | vn -0.2351 0.3665 0.9002 613 | vn 0.2325 0.0710 0.9700 614 | vn -0.9023 0.4305 0.0236 615 | vn 0.7669 -0.4771 0.4291 616 | vn 0.0454 0.9378 0.3443 617 | vn -0.6909 -0.4904 -0.5313 618 | vn 0.3984 0.7743 0.4917 619 | vn 0.2618 0.8373 0.4800 620 | vn -0.1917 -0.7949 -0.5756 621 | vn -0.4097 -0.1255 0.9035 622 | vn 0.2451 0.4866 0.8386 623 | vn 0.9866 -0.1554 -0.0494 624 | vn -0.8367 -0.4843 0.2556 625 | vn -0.7855 -0.4512 -0.4236 626 | vn 0.4139 0.2662 -0.8705 627 | vn 0.2805 0.3331 0.9002 628 | vn -0.5145 0.4946 -0.7005 629 | vn 0.6932 0.6132 0.3788 630 | vn -0.9536 0.1933 -0.2308 631 | vn -0.9086 0.2052 -0.3637 632 | vn 0.2353 -0.1460 0.9609 633 | vn 0.9690 -0.0073 -0.2469 634 | vn -0.5335 0.1592 -0.8307 635 | vn -0.3979 -0.9168 0.0326 636 | vn 0.3998 -0.0913 0.9120 637 | vn 0.9916 -0.1270 -0.0244 638 | vn 0.9366 0.2866 -0.2015 639 | vn -0.6811 -0.6331 0.3679 640 | vn -0.2944 -0.0189 -0.9555 641 | vn -0.4763 0.4140 -0.7757 642 | vn 0.6508 0.7425 0.1586 643 | vn 0.3539 -0.8199 0.4501 644 | vn 0.9713 0.1095 -0.2110 645 | vn 0.9795 0.0476 -0.1960 646 | vn -0.9052 0.0065 0.4250 647 | vn 0.8682 -0.0369 -0.4949 648 | vn 0.0198 -0.2787 0.9602 649 | vn -0.9695 -0.0094 0.2447 650 | usemtl tree_bark_light 651 | s off 652 | f 83//161 114//161 122//161 653 | f 87//162 94//162 160//162 654 | f 160//163 89//163 87//163 655 | f 83//164 84//164 115//164 656 | f 115//165 116//165 112//165 657 | f 115//166 85//166 86//166 658 | f 87//167 113//167 112//167 659 | f 113//168 89//168 114//168 660 | f 97//169 94//169 88//169 661 | f 160//170 93//170 89//170 662 | f 90//171 91//171 122//171 663 | f 122//172 91//172 85//172 664 | f 92//173 101//173 156//173 665 | f 93//174 121//174 154//174 666 | f 94//175 98//175 95//175 667 | f 94//176 97//176 98//176 668 | f 95//177 160//177 94//177 669 | f 98//178 140//178 96//178 670 | f 158//179 140//179 98//179 671 | f 161//180 98//180 97//180 672 | f 100//181 156//181 119//181 673 | f 98//182 161//182 128//182 674 | f 106//183 155//183 117//183 675 | f 155//184 106//184 131//184 676 | f 131//185 107//185 161//185 677 | f 104//186 108//186 109//186 678 | f 111//187 162//187 110//187 679 | f 111//188 110//188 105//188 680 | f 90//189 123//189 91//189 681 | f 112//190 116//190 86//190 682 | f 115//191 84//191 85//191 683 | f 119//192 96//192 117//192 684 | f 118//193 103//193 117//193 685 | f 103//194 119//194 117//194 686 | f 101//195 103//195 118//195 687 | f 95//196 96//196 119//196 688 | f 156//197 101//197 120//197 689 | f 122//198 85//198 83//198 690 | f 124//199 161//199 133//199 691 | f 123//200 133//200 161//200 692 | f 155//201 161//201 124//201 693 | f 124//202 138//202 155//202 694 | f 137//203 125//203 138//203 695 | f 123//204 154//204 125//204 696 | f 137//205 123//205 125//205 697 | f 136//206 141//206 129//206 698 | f 141//207 142//207 132//207 699 | f 129//208 141//208 140//208 700 | f 140//209 158//209 129//209 701 | f 163//210 164//210 130//210 702 | f 111//211 139//211 128//211 703 | f 142//212 139//212 111//212 704 | f 142//213 105//213 132//213 705 | f 159//214 165//214 124//214 706 | f 166//215 127//215 133//215 707 | f 144//216 127//216 166//216 708 | f 165//217 159//217 126//217 709 | f 134//218 104//218 109//218 710 | f 109//219 92//219 134//219 711 | f 102//220 92//220 99//220 712 | f 99//221 135//221 102//221 713 | f 157//222 163//222 130//222 714 | f 130//223 129//223 157//223 715 | f 123//224 137//224 153//224 716 | f 165//225 138//225 124//225 717 | f 165//226 144//226 137//226 718 | f 137//227 144//227 146//227 719 | f 145//228 152//228 153//228 720 | f 146//229 166//229 150//229 721 | f 146//230 144//230 166//230 722 | f 151//231 146//231 150//231 723 | f 148//232 149//232 147//232 724 | f 148//233 147//233 151//233 725 | f 145//234 147//234 152//234 726 | f 153//235 166//235 133//235 727 | f 152//236 150//236 153//236 728 | f 112//237 83//237 115//237 729 | f 95//238 120//238 93//238 160//238 730 | f 115//239 86//239 116//239 731 | f 112//240 86//240 87//240 732 | f 87//241 89//241 113//241 733 | f 89//242 154//242 114//242 734 | f 154//243 90//243 114//243 735 | f 97//244 88//244 91//244 736 | f 91//245 123//245 97//245 737 | f 88//246 86//246 85//246 738 | f 85//247 91//247 88//247 739 | f 86//248 88//248 94//248 740 | f 86//249 94//249 87//249 741 | f 114//250 83//250 112//250 113//250 742 | f 89//251 93//251 154//251 743 | f 92//252 156//252 134//252 744 | f 134//253 156//253 100//253 104//253 745 | f 93//254 120//254 121//254 746 | f 96//255 140//255 141//255 747 | f 96//256 95//256 98//256 748 | f 161//257 97//257 123//257 749 | f 106//258 96//258 141//258 132//258 750 | f 102//259 103//259 101//259 751 | f 101//260 92//260 102//260 752 | f 100//261 119//261 103//261 753 | f 100//262 103//262 102//262 754 | f 102//263 104//263 100//263 755 | f 128//264 161//264 107//264 756 | f 98//265 128//265 158//265 757 | f 106//266 117//266 96//266 758 | f 121//267 155//267 138//267 125//267 759 | f 161//268 155//268 131//268 760 | f 131//269 106//269 132//269 761 | f 109//270 108//270 99//270 762 | f 135//271 99//271 108//271 763 | f 90//272 154//272 123//272 764 | f 118//273 117//273 155//273 765 | f 101//274 118//274 121//274 766 | f 118//275 155//275 121//275 767 | f 119//276 156//276 95//276 768 | f 101//277 121//277 120//277 769 | f 120//278 95//278 156//278 770 | f 83//279 85//279 84//279 771 | f 122//280 114//280 90//280 772 | f 157//281 158//281 143//281 163//281 773 | f 154//282 121//282 125//282 774 | f 127//283 126//283 159//283 775 | f 128//284 139//284 158//284 776 | f 141//285 136//285 143//285 777 | f 163//286 143//286 136//286 778 | f 129//287 158//287 157//287 779 | f 107//288 131//288 110//288 162//288 780 | f 164//289 163//289 136//289 781 | f 164//290 136//290 130//290 782 | f 128//291 107//291 162//291 783 | f 162//292 111//292 128//292 784 | f 142//293 111//293 105//293 785 | f 132//294 110//294 131//294 786 | f 149//295 148//295 151//295 150//295 787 | f 132//296 105//296 110//296 788 | f 159//297 124//297 133//297 789 | f 133//298 127//298 159//298 790 | f 144//299 126//299 127//299 791 | f 165//300 126//300 144//300 792 | f 102//301 135//301 104//301 793 | f 135//302 108//302 104//302 794 | f 99//303 92//303 109//303 795 | f 129//304 130//304 136//304 796 | f 137//305 138//305 165//305 797 | f 123//306 153//306 133//306 798 | f 139//307 143//307 158//307 799 | f 142//308 143//308 139//308 800 | f 143//309 142//309 141//309 801 | f 145//310 153//310 137//310 802 | f 145//311 137//311 146//311 803 | f 146//312 151//312 145//312 804 | f 152//313 149//313 150//313 805 | f 151//314 147//314 145//314 806 | f 152//315 147//315 149//315 807 | f 153//316 150//316 166//316 808 | -------------------------------------------------------------------------------- /src/model.c: -------------------------------------------------------------------------------- 1 | #include "model.h" 2 | 3 | #include "triangularization.h" 4 | 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include 11 | 12 | static struct model *model_init(void) 13 | { 14 | struct model *model = malloc(sizeof(*model)); 15 | 16 | model->faces_capacity = 1; 17 | if (!(model->faces = malloc(model->faces_capacity * sizeof(*model->faces)))) 18 | { 19 | fprintf(stderr, "ERROR: Memory allocation failure.\n"); 20 | exit(1); 21 | } 22 | model->faces_count = 0; 23 | 24 | model->vertex_capacity = 1; 25 | if (!(model->vertexes = malloc(model->vertex_capacity * sizeof(*model->vertexes)))) 26 | { 27 | fprintf(stderr, "ERROR: Memory allocation failure.\n"); 28 | exit(1); 29 | } 30 | model->vertex_count = 0; 31 | 32 | model->materials_capacity = 1; 33 | if (!(model->materials = malloc(model->materials_capacity * sizeof(*model->materials)))) 34 | { 35 | fprintf(stderr, "ERROR: Memory allocation failure.\n"); 36 | exit(1); 37 | } 38 | model->materials_count = 0; 39 | 40 | return model; 41 | } 42 | 43 | static void model_add_vertex(struct model *model, vec3 vec) 44 | { 45 | if (model->vertex_count == model->vertex_capacity) 46 | { 47 | model->vertex_capacity *= 2; 48 | if (!(model->vertexes = realloc(model->vertexes, model->vertex_capacity * sizeof(*model->vertexes)))) 49 | { 50 | fprintf(stderr, "ERROR: Memory allocation failure.\n"); 51 | exit(1); 52 | } 53 | } 54 | 55 | model->vertexes[model->vertex_count] = vec; 56 | model->vertex_count++; 57 | } 58 | 59 | static int obj_derelativize_idx(int i, int n) 60 | { 61 | if (i < -n || i == 0) 62 | { 63 | fprintf(stderr, "WARN: Invalid vertex index %d.\n", i); 64 | return 0; 65 | } 66 | 67 | if (i < 0) 68 | return n + i; 69 | 70 | return i - 1; 71 | } 72 | 73 | static bool model_validate_idxs(struct model *model) 74 | { 75 | bool valid = true; 76 | 77 | for (int f = 0; f < model->faces_count; ++f) 78 | { 79 | for (int i = 0; i < 3; ++i) 80 | { 81 | if (model->faces[f].idxs[i] >= model->vertex_count) 82 | { 83 | fprintf(stderr, "WARN: Invalid vertex index %d.\n", model->faces[f].idxs[i]); 84 | valid = false; 85 | model->faces[f].idxs[i] = 0; 86 | } 87 | } 88 | } 89 | return valid; 90 | } 91 | 92 | static void model_add_face(struct model *model, int idx1, int idx2, int idx3, int material) 93 | { 94 | if (model->faces_count == model->faces_capacity) 95 | { 96 | model->faces_capacity *= 2; 97 | if (!(model->faces = realloc(model->faces, model->faces_capacity * sizeof(*model->faces)))) 98 | { 99 | fprintf(stderr, "ERROR: Memory allocation failure.\n"); 100 | exit(1); 101 | } 102 | } 103 | model->faces[model->faces_count].idxs[0] = idx1; 104 | model->faces[model->faces_count].idxs[1] = idx2; 105 | model->faces[model->faces_count].idxs[2] = idx3; 106 | model->faces[model->faces_count].material = material; 107 | 108 | model->faces_count++; 109 | } 110 | 111 | static void model_add_material(struct model *model, const char *name, float d_r, float d_g, float d_b) 112 | { 113 | if (strlen(name) >= MATERIAL_NAME_BUFFER_SIZE) 114 | { 115 | fprintf(stderr, "ERROR: Material name too long.\n"); 116 | exit(1); 117 | } 118 | 119 | if (model->materials_count == model->materials_capacity) 120 | { 121 | model->materials_capacity *= 2; 122 | if (!(model->materials = realloc(model->materials, model->materials_capacity * sizeof(*model->materials)))) 123 | { 124 | fprintf(stderr, "ERROR: Memory allocation failure.\n"); 125 | exit(1); 126 | } 127 | } 128 | 129 | strcpy(model->materials[model->materials_count].name, name); 130 | model->materials[model->materials_count].Kd_r = d_r; 131 | model->materials[model->materials_count].Kd_g = d_g; 132 | model->materials[model->materials_count].Kd_b = d_b; 133 | 134 | model->materials_count++; 135 | } 136 | 137 | int model_get_material_idx(struct model *model, const char *name) 138 | { 139 | for (int i = 0; i < model->materials_count; ++i) 140 | { 141 | if (strcmp(model->materials[i].name, name) == 0) 142 | return i; 143 | } 144 | return -1; 145 | } 146 | 147 | void model_invert_triangles(struct model *model) 148 | { 149 | for (int f = 0; f < model->faces_count; ++f) 150 | { 151 | int aux = model->faces[f].idxs[1]; 152 | model->faces[f].idxs[1] = model->faces[f].idxs[2]; 153 | model->faces[f].idxs[2] = aux; 154 | } 155 | } 156 | 157 | void model_normalize(struct model *model) 158 | { 159 | vec3 center = get_bounding_box_center(model->vertexes, model->vertex_count); 160 | 161 | for (int i = 0; i < model->vertex_count; ++i) 162 | { 163 | model->vertexes[i].x -= center.x; 164 | model->vertexes[i].y -= center.y; 165 | model->vertexes[i].z -= center.z; 166 | } 167 | 168 | float max_mag = get_max_dist(model->vertexes, model->vertex_count, (vec3){0, 0, 0}); 169 | 170 | float scale = (max_mag == 0) ? 1.0 : 1.0 / max_mag; 171 | for (int i = 0; i < model->vertex_count; ++i) 172 | { 173 | model->vertexes[i].x *= scale; 174 | model->vertexes[i].y *= scale; 175 | model->vertexes[i].z *= scale; 176 | } 177 | } 178 | 179 | void model_change_orientation(struct model *model, int axis1, int axis2, int axis3) 180 | { 181 | assert(0 <= axis1 && axis1 <= 2); 182 | assert(0 <= axis2 && axis2 <= 2); 183 | assert(0 <= axis3 && axis3 <= 2); 184 | 185 | for (int i = 0; i < model->vertex_count; ++i) 186 | { 187 | vec3 vertex; 188 | 189 | vertex.x = model->vertexes[i].x; 190 | if (axis1 == 1) 191 | vertex.x = model->vertexes[i].y; 192 | if (axis1 == 2) 193 | vertex.x = model->vertexes[i].z; 194 | 195 | vertex.y = model->vertexes[i].x; 196 | if (axis2 == 1) 197 | vertex.y = model->vertexes[i].y; 198 | if (axis2 == 2) 199 | vertex.y = model->vertexes[i].z; 200 | 201 | vertex.z = model->vertexes[i].x; 202 | if (axis3 == 1) 203 | vertex.z = model->vertexes[i].y; 204 | if (axis3 == 2) 205 | vertex.z = model->vertexes[i].z; 206 | 207 | model->vertexes[i] = vertex; 208 | } 209 | } 210 | 211 | void model_invert_x(struct model *model) 212 | { 213 | for (int i = 0; i < model->vertex_count; ++i) 214 | model->vertexes[i].x *= -1; 215 | model_invert_triangles(model); 216 | } 217 | 218 | void model_invert_y(struct model *model) 219 | { 220 | for (int i = 0; i < model->vertex_count; ++i) 221 | model->vertexes[i].y *= -1; 222 | model_invert_triangles(model); 223 | } 224 | 225 | void model_invert_z(struct model *model) 226 | { 227 | for (int i = 0; i < model->vertex_count; ++i) 228 | model->vertexes[i].z *= -1; 229 | model_invert_triangles(model); 230 | } 231 | 232 | void model_free(struct model *model) 233 | { 234 | free(model->vertexes); 235 | free(model->faces); 236 | free(model->materials); 237 | free(model); 238 | } 239 | 240 | // Breaks the string the first time the delim substring is encountered, 241 | // returns the first part of the string. 242 | // The *str pointer is updated to the position after the delim, or NULL if the string ends. 243 | static char *str_chop(char **str, char *delim) 244 | { 245 | int delim_i = 0; 246 | char *ret = *str; 247 | char *p = *str; 248 | 249 | assert(*delim != '\0'); 250 | 251 | if (p == NULL) 252 | return NULL; 253 | 254 | while (*p != '\0') 255 | { 256 | if (*p == delim[delim_i]) 257 | delim_i++; 258 | else 259 | delim_i = 0; 260 | 261 | p++; 262 | 263 | if (delim[delim_i] == '\0') 264 | { 265 | p[-delim_i] = '\0'; 266 | 267 | *str = p; 268 | return ret; 269 | } 270 | } 271 | 272 | *str = NULL; 273 | return ret; 274 | } 275 | 276 | static char *str_chop_skip_empty(char **str, char *delim) 277 | { 278 | char *res; 279 | 280 | while ((res = str_chop(str, delim))) 281 | { 282 | if (res[0] != '\0') 283 | return res; 284 | } 285 | return NULL; 286 | } 287 | 288 | static bool parse_float(char **buffer, float *f) 289 | { 290 | char *arg = str_chop_skip_empty(buffer, " "); 291 | if (!arg) 292 | return false; 293 | char *f_str = str_chop(&arg, "/"); 294 | *f = (float) atof(f_str); 295 | return true; 296 | } 297 | 298 | static bool parse_int(char **buffer, int *i) 299 | { 300 | char *arg = str_chop_skip_empty(buffer, " "); 301 | if (!arg) 302 | return false; 303 | char *i_str = str_chop(&arg, "/"); 304 | *i = atoi(i_str); 305 | return true; 306 | } 307 | 308 | // Remove end-of-line characters and turn tabs into spaces 309 | static void string_strip(char *str) 310 | { 311 | char *p = str; 312 | while (*p) 313 | { 314 | if (*p == '\n' || *p == '\r') 315 | *p = '\0'; 316 | if (*p == '\t') 317 | *p = ' '; 318 | p++; 319 | } 320 | } 321 | 322 | static void model_load_materials_from_mtl(struct model *model, const char *mtl_fname) 323 | { 324 | FILE *fp = fopen(mtl_fname, "r"); 325 | if (!fp) 326 | { 327 | fprintf(stderr, "WARN: failed to load file \"%s\".\n", mtl_fname); 328 | return; 329 | } 330 | 331 | // Read each line of the file 332 | char buffer[256]; 333 | 334 | while (fgets(buffer, sizeof(buffer), fp)) 335 | { 336 | string_strip(buffer); 337 | 338 | char *bufferp = buffer; 339 | char *instr = str_chop_skip_empty(&bufferp, " "); 340 | 341 | if (!instr || instr[0] == '#') 342 | continue; 343 | 344 | if (strcmp(instr, "newmtl") == 0) 345 | { 346 | const char *name = str_chop_skip_empty(&bufferp, " "); 347 | 348 | model_add_material(model, name, 1.0, 1.0, 1.0); 349 | } 350 | else if (strcmp(instr, "Kd") == 0) 351 | { 352 | if (model->materials_count == 0) 353 | { 354 | fprintf(stderr, "WARN: Expected newmtl before \"%s\" instruction.\n", instr); 355 | continue; 356 | } 357 | 358 | float r, g, b; 359 | if (!parse_float(&bufferp, &r) || !parse_float(&bufferp, &g) || !parse_float(&bufferp, &b)) 360 | { 361 | fprintf(stderr, "WARN: invalid \"%s\" instruction.\n", instr); 362 | continue; 363 | } 364 | 365 | model->materials[model->materials_count - 1].Kd_r = r; 366 | model->materials[model->materials_count - 1].Kd_g = g; 367 | model->materials[model->materials_count - 1].Kd_b = b; 368 | } 369 | } 370 | 371 | fclose(fp); 372 | } 373 | 374 | // Read a line, duplicating the size of the buffer if necessary, using only gets() for portability. 375 | static char *read_line(char **buffer, int *buffer_size, FILE *fp) 376 | { 377 | if (!fgets(*buffer, *buffer_size, fp)) 378 | return NULL; 379 | 380 | while ((*buffer)[strlen(*buffer) - 1] != '\n') 381 | { 382 | if (!(*buffer = realloc(*buffer, *buffer_size * 2))) 383 | { 384 | fprintf(stderr, "ERROR: Memory allocation failure.\n"); 385 | exit(1); 386 | } 387 | 388 | if (!fgets(*buffer + *buffer_size - 1, *buffer_size + 1, fp)) 389 | { 390 | *buffer_size *= 2; 391 | return NULL; 392 | } 393 | 394 | *buffer_size *= 2; 395 | } 396 | return *buffer; 397 | } 398 | 399 | struct model *model_load_from_obj(const char *fname, bool color_support) 400 | { 401 | FILE *fp = fopen(fname, "r"); 402 | if (!fp) 403 | { 404 | fprintf(stderr, "ERROR: failed to load file \"%s\".\n", fname); 405 | return NULL; 406 | } 407 | 408 | // Create a new model 409 | struct model *model = model_init(); 410 | 411 | int current_material = -1; 412 | 413 | // Read each line of the file 414 | int buffer_size = 128; 415 | char *buffer; 416 | 417 | if (!(buffer = malloc(buffer_size))) 418 | { 419 | fprintf(stderr, "ERROR: Memory allocation failure.\n"); 420 | exit(1); 421 | } 422 | 423 | while (read_line(&buffer, &buffer_size, fp)) 424 | { 425 | string_strip(buffer); 426 | 427 | char *bufferp = buffer; 428 | char *instr = str_chop_skip_empty(&bufferp, " "); 429 | 430 | if (!instr || instr[0] == '#') 431 | continue; 432 | 433 | if (strcmp(instr, "v") == 0) 434 | { 435 | float f1, f2, f3; 436 | 437 | if (!parse_float(&bufferp, &f1) || !parse_float(&bufferp, &f2) || !parse_float(&bufferp, &f3)) 438 | { 439 | fprintf(stderr, "ERROR: invalid \"v\" instruction.\n"); 440 | fclose(fp); 441 | model_free(model); 442 | return NULL; 443 | } 444 | 445 | vec3 vec; 446 | vec.x = f1; 447 | vec.y = f2; 448 | vec.z = f3; 449 | 450 | model_add_vertex(model, vec); 451 | } 452 | else if (strcmp(instr, "f") == 0) 453 | { 454 | // Parse face indexes 455 | int idx_count = 0; 456 | int idx_capacity = 1; 457 | int *idxs = malloc(idx_capacity * sizeof(int)); 458 | 459 | int idx_read; 460 | while (parse_int(&bufferp, &idx_read)) 461 | { 462 | if (idx_count == idx_capacity) 463 | { 464 | idx_capacity *= 2; 465 | idxs = realloc(idxs, idx_capacity * sizeof(int)); 466 | } 467 | 468 | int idx = obj_derelativize_idx(idx_read, model->vertex_count); 469 | idxs[idx_count++] = idx; 470 | } 471 | 472 | if (idx_count < 3) 473 | { 474 | fprintf(stderr, "ERROR: invalid \"f\" instruction.\n"); 475 | fclose(fp); 476 | free(idxs); 477 | model_free(model); 478 | return NULL; 479 | } 480 | 481 | // Triangularize face 482 | vec3 *vecs; 483 | if (!(vecs = malloc(idx_count * sizeof(vec3)))) 484 | { 485 | fprintf(stderr, "ERROR: Memory allocation failure.\n"); 486 | exit(1); 487 | } 488 | for (int i = 0; i < idx_count; ++i) 489 | vecs[i] = model->vertexes[idxs[i]]; 490 | 491 | int *triangle_idxs; 492 | if (!(triangle_idxs = malloc((idx_count - 2) * 3 * sizeof(int)))) 493 | { 494 | fprintf(stderr, "ERROR: Memory allocation failure.\n"); 495 | exit(1); 496 | } 497 | 498 | triangularize(vecs, idx_count, triangle_idxs); 499 | 500 | for (int i = 0; i < idx_count - 2; ++i) 501 | { 502 | int i1 = idxs[triangle_idxs[3 * i]]; 503 | int i2 = idxs[triangle_idxs[3 * i + 1]]; 504 | int i3 = idxs[triangle_idxs[3 * i + 2]]; 505 | 506 | model_add_face(model, i1, i2, i3, current_material); 507 | } 508 | 509 | free(idxs); 510 | free(vecs); 511 | free(triangle_idxs); 512 | } 513 | else if (color_support && strcmp(instr, "mtllib") == 0) 514 | { 515 | // Mutable copy of fname 516 | char *fname2; 517 | if (!(fname2 = malloc(strlen(fname) + 2))) 518 | { 519 | fprintf(stderr, "ERROR: Memory allocation failure.\n"); 520 | exit(1); 521 | } 522 | strcpy(fname2, fname); 523 | 524 | // MTL file location 525 | const char *fname_dirname = dirname(fname2); 526 | size_t mtl_fname_size = strlen(fname_dirname) + strlen(bufferp) + 2; 527 | 528 | char *mtl_fname; 529 | if (!(mtl_fname = malloc(mtl_fname_size))) 530 | { 531 | free(fname2); 532 | fprintf(stderr, "ERROR: Memory allocation failure for MTL file name.\n"); 533 | exit(1); 534 | } 535 | strcpy(mtl_fname, fname_dirname); 536 | strcat(mtl_fname, "/"); 537 | strcat(mtl_fname, bufferp); 538 | 539 | fprintf(stderr, "NOTE: Reading \"%s\".\n", mtl_fname); 540 | 541 | model_load_materials_from_mtl(model, mtl_fname); 542 | 543 | free(fname2); 544 | free(mtl_fname); 545 | } 546 | else if (color_support && strcmp(instr, "usemtl") == 0) 547 | { 548 | const char *name = str_chop_skip_empty(&bufferp, " "); 549 | 550 | current_material = model_get_material_idx(model, name); 551 | } 552 | } 553 | 554 | free(buffer); 555 | fclose(fp); 556 | 557 | model_validate_idxs(model); 558 | return model; 559 | } 560 | 561 | struct model *model_load_from_stl(const char *fname) 562 | { 563 | FILE *fp = fopen(fname, "rb"); 564 | if (!fp) 565 | { 566 | fprintf(stderr, "ERROR: failed to load file \"%s\".\n", fname); 567 | return NULL; 568 | } 569 | 570 | // Create a new model 571 | struct model *model = model_init(); 572 | 573 | // Read each line of the file 574 | char buffer[256]; 575 | 576 | int current_material = -1; 577 | 578 | // Check this is an ASCII STL file 579 | // As the header of a binary STL could start with solid 580 | // we must also check the second line starts with facet 581 | bool is_ASCII = false; 582 | 583 | // Check first line starts with "solid" 584 | fgets(buffer, sizeof(buffer), fp); 585 | 586 | char *bufferp = buffer; 587 | char *instr = str_chop_skip_empty(&bufferp, " "); 588 | 589 | if (strcmp(instr, "solid") == 0) 590 | { 591 | // Check second line starts with "facet" 592 | fgets(buffer, sizeof(buffer), fp); 593 | 594 | char *bufferp = buffer; 595 | char *instr = str_chop_skip_empty(&bufferp, " "); 596 | 597 | if (strcmp(instr, "facet") == 0) 598 | { 599 | is_ASCII = true; 600 | } 601 | } 602 | 603 | if (is_ASCII) 604 | { 605 | while (fgets(buffer, sizeof(buffer), fp)) 606 | { 607 | string_strip(buffer); 608 | 609 | char *bufferp = buffer; 610 | char *instr = str_chop_skip_empty(&bufferp, " "); 611 | 612 | // As we ignore normals only vertex definitions are required 613 | if (strcmp(instr, "vertex") == 0) 614 | { 615 | float f1, f2, f3; 616 | 617 | if (!parse_float(&bufferp, &f1) || !parse_float(&bufferp, &f2) || !parse_float(&bufferp, &f3)) 618 | { 619 | fprintf(stderr, "ERROR: invalid \"vertex\" instruction.\n"); 620 | fclose(fp); 621 | model_free(model); 622 | return NULL; 623 | } 624 | 625 | vec3 vec; 626 | vec.x = f1; 627 | vec.y = f3; 628 | vec.z = f2; 629 | 630 | model_add_vertex(model, vec); 631 | } 632 | } 633 | } 634 | else 635 | { 636 | // ASCII check will have moved the read pointer beyond the first block of data, 637 | // reset to byte 80, after the 80 byte header 638 | fseek(fp, 80, SEEK_SET); 639 | 640 | int facet_count_expected; 641 | int facet_count_actual = 0; 642 | 643 | char facet_count[4]; 644 | if (fread(facet_count, sizeof(int), 1, fp) != 1) 645 | { 646 | fprintf(stderr, "ERROR: Failed to read facet count.\n"); 647 | fclose(fp); 648 | model_free(model); 649 | return NULL; 650 | } 651 | // NOTE: Assuming little-endian hardware. 652 | memcpy(&facet_count_expected, facet_count, sizeof(int)); 653 | 654 | // Read facet definitions, 50 bytes each, facet normal, 3 vertices, and a 2 byte spacer 655 | char buffer[50]; 656 | size_t bytes_read; 657 | while((bytes_read = fread(buffer, sizeof(char), 50, fp))) 658 | { 659 | if (bytes_read < 50) 660 | { 661 | fprintf(stderr, "ERROR: Failed to read facet data.\n"); 662 | fclose(fp); 663 | model_free(model); 664 | return NULL; 665 | } 666 | 667 | float facet[12]; 668 | memcpy(&facet, buffer, sizeof(float[12])); 669 | 670 | for (int v_index = 0; v_index < 3; v_index++) 671 | { 672 | vec3 vec; 673 | vec.x = facet[3 + (v_index * 3)]; 674 | vec.y = facet[5 + (v_index * 3)]; 675 | vec.z = facet[4 + (v_index * 3)]; 676 | 677 | model_add_vertex(model, vec); 678 | } 679 | 680 | ++facet_count_actual; 681 | } 682 | 683 | if (facet_count_expected != facet_count_actual) 684 | { 685 | fprintf(stderr, "WARN: imported facet count does not match expected facet count.\n"); 686 | } 687 | } 688 | 689 | // For every 3 vertices create a face 690 | for (int i = 0; i < model->vertex_count; i += 3) 691 | { 692 | model_add_face(model, i, i + 2, i + 1, current_material); 693 | } 694 | 695 | fclose(fp); 696 | 697 | model_validate_idxs(model); 698 | return model; 699 | } 700 | -------------------------------------------------------------------------------- /src/model.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "trigonometry.h" 4 | 5 | #include 6 | 7 | #define MATERIAL_NAME_BUFFER_SIZE 256 8 | 9 | struct face 10 | { 11 | unsigned int idxs[3]; 12 | int material; // -1 means no material. 13 | }; 14 | 15 | struct material 16 | { 17 | char name[MATERIAL_NAME_BUFFER_SIZE]; 18 | float Kd_r, Kd_g, Kd_b; 19 | }; 20 | 21 | struct model 22 | { 23 | unsigned int vertex_count; 24 | unsigned int vertex_capacity; 25 | vec3 *vertexes; 26 | 27 | unsigned int faces_count; 28 | unsigned int faces_capacity; 29 | struct face *faces; 30 | 31 | unsigned int materials_count; 32 | unsigned int materials_capacity; 33 | struct material *materials; 34 | }; 35 | 36 | struct model *model_load_from_obj(const char *fname, bool color_support); 37 | struct model *model_load_from_stl(const char *fname); 38 | 39 | void model_invert_triangles(struct model *model); 40 | 41 | // Scale the model so that it fits in the [-1, 1]^3 cube with any rotation. 42 | void model_normalize(struct model *model); 43 | 44 | void model_change_orientation(struct model *model, int axis1, int axis2, int axis3); 45 | 46 | void model_invert_x(struct model *model); 47 | void model_invert_y(struct model *model); 48 | void model_invert_z(struct model *model); 49 | 50 | void model_free(struct model *model); 51 | -------------------------------------------------------------------------------- /src/sets.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "trigonometry.h" 4 | 5 | // Get the center of the bounding box that contains the points. 6 | vec3 get_bounding_box_center(const vec3 *A, int n); 7 | 8 | // Get the maximum distance between the points in A and p 9 | float get_max_dist(const vec3 *A, int n, vec3 p); 10 | -------------------------------------------------------------------------------- /src/surface.c: -------------------------------------------------------------------------------- 1 | #include "surface.h" 2 | 3 | #include 4 | #include 5 | #include 6 | 7 | static float mini(float a, float b) 8 | { 9 | if (a < b) 10 | return a; 11 | return b; 12 | } 13 | 14 | static float maxi(float a, float b) 15 | { 16 | if (a > b) 17 | return a; 18 | return b; 19 | } 20 | 21 | vec3 triangle_normal(const struct triangle *tri) 22 | { 23 | vec3 v1, v2, normal; 24 | 25 | v1.x = tri->p2.x - tri->p1.x; 26 | v1.y = tri->p2.y - tri->p1.y; 27 | v1.z = tri->p2.z - tri->p1.z; 28 | 29 | v2.x = tri->p3.x - tri->p1.x; 30 | v2.y = tri->p3.y - tri->p1.y; 31 | v2.z = tri->p3.z - tri->p1.z; 32 | 33 | normal = vec3_cross_product(v1, v2); 34 | 35 | return vec3_normalize(normal); 36 | } 37 | 38 | static bool triangle_orientation(const struct triangle *tri) 39 | { 40 | return (tri->p2.x - tri->p1.x) * (tri->p3.y - tri->p2.y) 41 | < (tri->p3.x - tri->p2.x) * (tri->p2.y - tri->p1.y); 42 | } 43 | 44 | static struct triangle triangle_sort_by_x(struct triangle triangle) 45 | { 46 | vec3 aux; 47 | for (unsigned int i = 0; i < 2; ++i) 48 | { 49 | for (unsigned int j = i + 1; j < 3; ++j) 50 | { 51 | if (triangle.pts[i].x > triangle.pts[j].x) 52 | { 53 | aux = triangle.pts[i]; 54 | triangle.pts[i] = triangle.pts[j]; 55 | triangle.pts[j] = aux; 56 | } 57 | } 58 | } 59 | return triangle; 60 | } 61 | 62 | struct surface *surface_init(unsigned int size_x, unsigned int size_y, float logical_size_x, 63 | float logical_size_y) 64 | { 65 | struct surface *surface; 66 | 67 | if (!(surface = malloc(sizeof(*surface)))) 68 | { 69 | fprintf(stderr, "ERROR: Memory allocation failure.\n"); 70 | exit(1); 71 | } 72 | 73 | surface->size_x = size_x; 74 | surface->size_y = size_y; 75 | surface->logical_size_x = logical_size_x; 76 | surface->logical_size_y = logical_size_y; 77 | surface->dx = logical_size_x / size_x; 78 | surface->dy = logical_size_y / size_y; 79 | 80 | if (!(surface->pixels = malloc(size_y * size_x * sizeof(*surface->pixels)))) 81 | { 82 | fprintf(stderr, "ERROR: Memory allocation failure.\n"); 83 | exit(1); 84 | } 85 | surface_clear(surface); 86 | 87 | return surface; 88 | } 89 | 90 | void surface_clear(struct surface *surface) 91 | { 92 | assert(surface); 93 | assert(surface->pixels); 94 | 95 | for (int i = 0; i < surface->size_y * surface->size_x; ++i) 96 | { 97 | surface->pixels[i].z = INFINITY; 98 | surface->pixels[i].c = ' '; 99 | surface->pixels[i].material = -1; 100 | } 101 | } 102 | 103 | void surface_free(struct surface *surface) 104 | { 105 | free(surface->pixels); 106 | free(surface); 107 | } 108 | 109 | static inline int idx_x(const struct surface *surface, float x) 110 | { 111 | float dx = surface->dx; 112 | return maxi(0, mini(surface->size_x - 1, (int) floorf(x / dx))); 113 | } 114 | 115 | static inline int idx_y(const struct surface *surface, float y) 116 | { 117 | float dy = surface->dy; 118 | return maxi(0, mini(surface->size_y - 1, (int) floorf(y / dy))); 119 | } 120 | 121 | static inline float limit_y_1(const struct triangle *tri, float x) 122 | { 123 | if (x <= tri->p1.x) 124 | return tri->p1.y; 125 | if (x >= tri->p3.x) 126 | return tri->p3.y; 127 | if (x <= tri->p2.x) 128 | return tri->p1.y + (tri->p2.y - tri->p1.y) * (x - tri->p1.x) / (tri->p2.x - tri->p1.x); 129 | return tri->p2.y + (tri->p3.y - tri->p2.y) * (x - tri->p2.x) / (tri->p3.x - tri->p2.x); 130 | } 131 | 132 | static inline float limit_y_2(const struct triangle *tri, float x) 133 | { 134 | if (x <= tri->p1.x) 135 | return tri->p1.y; 136 | if (x >= tri->p3.x) 137 | return tri->p3.y; 138 | return tri->p1.y + (tri->p3.y - tri->p1.y) * (x - tri->p1.x) / (tri->p3.x - tri->p1.x); 139 | } 140 | 141 | static inline float triangle_depth(const struct surface *surface, const struct triangle *tri, 142 | vec3 normal, int xx, int yy) 143 | { 144 | float dx = surface->dx; 145 | float dy = surface->dy; 146 | 147 | float x = (xx + 0.5) * dx; 148 | float y = (yy + 0.5) * dy; 149 | 150 | return tri->p1.z - (normal.x * (x - tri->p1.x) + normal.y * (y - tri->p1.y)) / normal.z; 151 | } 152 | 153 | void surface_draw_triangle(struct surface *surface, struct triangle tri, bool inverted_orientation, 154 | char c, int material) 155 | { 156 | if (triangle_orientation(&tri) != !inverted_orientation) 157 | return; 158 | 159 | vec3 normal = triangle_normal(&tri); 160 | 161 | tri = triangle_sort_by_x(tri); 162 | 163 | float dx = surface->dx; 164 | float dy = surface->dy; 165 | 166 | float xi = tri.p1.x + dx / 2.0; 167 | float xf = tri.p3.x - dx / 2.0; 168 | 169 | if (xf < 0 || xi > surface->logical_size_x) 170 | return; 171 | 172 | int xxi = idx_x(surface, xi); 173 | int xxf = idx_x(surface, xf); 174 | 175 | for (int xx = xxi; xx <= xxf; ++xx) 176 | { 177 | float x = (xx + 0.5) * dx; 178 | float y_1 = limit_y_1(&tri, x); 179 | float y_2 = limit_y_2(&tri, x); 180 | 181 | float yi = mini(y_1, y_2); 182 | float yf = maxi(y_1, y_2); 183 | 184 | if (yf < 0 || yi > surface->logical_size_y) 185 | continue; 186 | 187 | int yyi = idx_y(surface, yi + dy / 2.0); 188 | int yyf = idx_y(surface, yf - dy / 2.0); 189 | 190 | for (int yy = yyi; yy <= yyf; ++yy) 191 | { 192 | struct pixel *pix = &surface->pixels[yy * surface->size_x + xx]; 193 | 194 | float depth = triangle_depth(surface, &tri, normal, xx, yy); 195 | 196 | if (depth < pix->z) 197 | { 198 | pix->z = depth; 199 | pix->c = c; 200 | pix->material = material; 201 | } 202 | } 203 | } 204 | } 205 | 206 | void surface_print(FILE *fp, const struct surface *surface) 207 | { 208 | for (int yy = 0; yy < surface->size_y; ++yy) 209 | { 210 | for (int xx = 0; xx < surface->size_x; ++xx) 211 | { 212 | struct pixel px = surface->pixels[yy * surface->size_x + xx]; 213 | int color = px.material + 1; 214 | 215 | if (color > 0 && color < COLORS && color < COLOR_PAIRS) 216 | { 217 | short r, g, b; 218 | 219 | color_content(color, &r, &g, &b); 220 | 221 | int rr = (255 * (int) r)/1000; 222 | int gg = (255 * (int) g)/1000; 223 | int bb = (255 * (int) b)/1000; 224 | 225 | fprintf(fp, "\x1b[38;2;%d;%d;%dm%c\x1b[0m", rr, gg, bb, px.c); 226 | } 227 | else 228 | { 229 | fprintf(fp, "%c", px.c); 230 | } 231 | } 232 | fprintf(fp, "\n"); 233 | } 234 | } 235 | 236 | void surface_printw(const struct surface *surface) 237 | { 238 | for (int yy = 0; yy < surface->size_y; ++yy) 239 | { 240 | move(yy, 0); 241 | for (int xx = 0; xx < surface->size_x; ++xx) 242 | { 243 | struct pixel px = surface->pixels[yy * surface->size_x + xx]; 244 | int color = px.material + 1; 245 | 246 | if (color > 0 && color < COLORS && color < COLOR_PAIRS) 247 | { 248 | attron(COLOR_PAIR(color)); 249 | printw("%c", px.c); 250 | attroff(COLOR_PAIR(color)); 251 | } 252 | else 253 | { 254 | printw("%c", px.c); 255 | } 256 | } 257 | } 258 | } 259 | -------------------------------------------------------------------------------- /src/surface.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "trigonometry.h" 4 | 5 | #include 6 | #include 7 | 8 | struct pixel 9 | { 10 | float z; 11 | char c; 12 | int material; 13 | }; 14 | 15 | struct surface 16 | { 17 | // Size in characters 18 | unsigned int size_y, size_x; 19 | 20 | // Logical size 21 | float logical_size_x, logical_size_y; 22 | // Logical size of each character 23 | float dx, dy; 24 | 25 | struct pixel *pixels; 26 | }; 27 | 28 | struct triangle 29 | { 30 | union 31 | { 32 | vec3 pts[3]; 33 | struct 34 | { 35 | vec3 p1, p2, p3; 36 | }; 37 | }; 38 | char color; 39 | }; 40 | 41 | struct surface *surface_init(unsigned int size_x, unsigned int size_y, float logical_size_x, 42 | float logical_size_y); 43 | 44 | void surface_free(struct surface *surface); 45 | 46 | void surface_clear(struct surface *surface); 47 | 48 | void surface_draw_triangle(struct surface *surface, struct triangle tri, bool inverted_orientation, 49 | char c, int material); 50 | 51 | void surface_print(FILE *fp, const struct surface *surface); 52 | 53 | void surface_printw(const struct surface *surface); 54 | 55 | vec3 triangle_normal(const struct triangle *tri); 56 | -------------------------------------------------------------------------------- /src/triangularization.c: -------------------------------------------------------------------------------- 1 | #include "triangularization.h" 2 | 3 | #include 4 | #include 5 | #include 6 | #include 7 | 8 | static float absfloat(float a) 9 | { 10 | return (a >= 0) ? a : -a; 11 | } 12 | 13 | static float triangle_area(vec3 p1, vec3 p2, vec3 p3) 14 | { 15 | return absfloat(p1.x * (p2.y - p3.y) + p2.x * (p3.y - p1.y) + p3.x * (p1.y - p2.y))/2.0; 16 | } 17 | 18 | static bool point_in_triangle(vec3 pt, vec3 v1, vec3 v2, vec3 v3) 19 | { 20 | float atot = triangle_area(v1, v2, v3); 21 | float a1 = triangle_area(v1, v2, pt); 22 | float a2 = triangle_area(v2, v3, pt); 23 | float a3 = triangle_area(v3, v1, pt); 24 | 25 | return a1 + a2 + a3 <= atot * 1.00001; 26 | } 27 | 28 | static void triangularize_recurse(vec3 *vecs, int *idxs, int n, bool orient, int *out_idxs) 29 | { 30 | assert(n >= 3); 31 | 32 | if (n == 3) 33 | { 34 | out_idxs[0] = idxs[0]; 35 | out_idxs[1] = idxs[1]; 36 | out_idxs[2] = idxs[2]; 37 | return; 38 | } 39 | 40 | // Find convex angle 41 | int i1, i2, i3; 42 | vec3 v1, v2, v3; 43 | for (int t = 0; t < n; ++t) 44 | { 45 | i1 = (n / 2 + t + (n - 1)) % n; 46 | i2 = (n / 2 + t) % n; 47 | i3 = (n / 2 + t + 1) % n; 48 | 49 | v1 = vecs[i1]; 50 | v2 = vecs[i2]; 51 | v3 = vecs[i3]; 52 | 53 | vec3 d1 = vec3_sub(v3, v2); 54 | vec3 d2 = vec3_sub(v1, v2); 55 | float cross_prod = vec3_cross_product(d1, d2).z; 56 | bool convex = cross_prod == 0 || ((cross_prod > 0) != orient); 57 | 58 | if (convex) 59 | break; 60 | } 61 | 62 | // Rect equation ax + by + c = 0 for the line between v1 and v3 63 | float a = v1.y - v3.y; 64 | float b = v3.x - v1.x; 65 | float c = (v1.x - v3.x) * v1.y + (v3.y - v1.y) * v1.x; 66 | 67 | // Find point inside the (v1,v2,v3) triangle with largest perpendicular distance to line (v1,v3) 68 | int max_dist_k = -1; 69 | float max_dist = 0; 70 | for (int k = 0; k < n; k++) 71 | { 72 | if (k == i1 || k == i2 || k == i3) 73 | continue; 74 | 75 | if (point_in_triangle(vecs[k], v1, v2, v3)) 76 | { 77 | // Perpendicular distance (multiplied by sqrt(a^2 + b^2)) 78 | float dist = absfloat(a * vecs[k].x + b * vecs[k].y + c); 79 | 80 | if (max_dist_k == -1 || dist > max_dist) 81 | { 82 | max_dist = dist; 83 | max_dist_k = k; 84 | } 85 | } 86 | } 87 | 88 | if (max_dist_k == -1) 89 | { 90 | // Cut this ear on i2. 91 | out_idxs[0] = idxs[i1]; 92 | out_idxs[1] = idxs[i2]; 93 | out_idxs[2] = idxs[i3]; 94 | 95 | int n2 = 0; 96 | for (int r = 0; r < n; ++r) 97 | { 98 | if (r == i2) 99 | continue; 100 | idxs[n2] = idxs[r]; 101 | vecs[n2] = vecs[r]; 102 | ++n2; 103 | } 104 | assert(n2 == n - 1); 105 | triangularize_recurse(vecs, idxs, n2, orient, out_idxs + 3); 106 | } 107 | else 108 | { 109 | // Create a diagonal from i2 to max_dist_k, split the problem in two. 110 | int n1 = 0; 111 | int n2 = 0; 112 | vec3 *vecs1 = NULL; 113 | vec3 *vecs2 = NULL; 114 | int *idxs1 = NULL; 115 | int *idxs2 = NULL; 116 | 117 | vecs1 = malloc(n * sizeof(vec3)); 118 | vecs2 = malloc(n * sizeof(vec3)); 119 | idxs1 = malloc(n * sizeof(int)); 120 | idxs2 = malloc(n * sizeof(int)); 121 | 122 | if (!vecs1 || !vecs2 || !idxs1 || !idxs2) 123 | { 124 | fprintf(stderr, "ERROR: Memory allocation failure.\n"); 125 | exit(1); 126 | } 127 | 128 | bool side = false; 129 | for (int r = 0; r < n; ++r) 130 | { 131 | if (r == i2 || r == max_dist_k) 132 | { 133 | vecs1[n1] = vecs[r]; 134 | idxs1[n1] = idxs[r]; 135 | ++n1; 136 | vecs2[n2] = vecs[r]; 137 | idxs2[n2] = idxs[r]; 138 | ++n2; 139 | side = !side; 140 | } 141 | else if (side) 142 | { 143 | vecs1[n1] = vecs[r]; 144 | idxs1[n1] = idxs[r]; 145 | ++n1; 146 | } 147 | else 148 | { 149 | vecs2[n2] = vecs[r]; 150 | idxs2[n2] = idxs[r]; 151 | ++n2; 152 | } 153 | } 154 | 155 | assert(n1 + n2 == n + 2); 156 | triangularize_recurse(vecs1, idxs1, n1, orient, out_idxs); 157 | triangularize_recurse(vecs2, idxs2, n2, orient, out_idxs + 3 * (n1 - 2)); 158 | 159 | free(vecs1); 160 | free(vecs2); 161 | free(idxs1); 162 | free(idxs2); 163 | } 164 | } 165 | 166 | void triangularize(const vec3 *vecs, int n, int *out_idxs) 167 | { 168 | assert(n >= 3); 169 | 170 | // Find the plane that contains all vectors (given by ) 171 | float best_normal_mag = 0; 172 | vec3 dir1, dir2; 173 | 174 | for (int i = 0; i < n; ++i) 175 | { 176 | vec3 v1 = vecs[i]; 177 | vec3 v2 = vecs[(i + 1) % n]; 178 | vec3 v3 = vecs[(i + 2) % n]; 179 | 180 | vec3 d1 = vec3_sub(v1, v2); 181 | vec3 d2 = vec3_sub(v3, v2); 182 | vec3 normal = vec3_cross_product(d1, d2); 183 | 184 | if (best_normal_mag <= vec3_mag(normal)) 185 | { 186 | dir1 = vec3_normalize(d1); 187 | dir2 = vec3_cross_product(vec3_normalize(normal), d1); 188 | } 189 | } 190 | 191 | // Translate all vectors to plane coordinates 192 | vec3 *vecs_plane = malloc(n * sizeof(vec3)); 193 | if (!vecs_plane) 194 | { 195 | fprintf(stderr, "ERROR: Memory allocation failure.\n"); 196 | exit(1); 197 | } 198 | 199 | for (int i = 0; i < n; ++i) 200 | { 201 | vecs_plane[i].x = vec3_dot_product(dir1, vecs[i]); 202 | vecs_plane[i].y = vec3_dot_product(dir2, vecs[i]); 203 | vecs_plane[i].z = 0; 204 | } 205 | 206 | // Find orientation 207 | float area = 0; 208 | for (int i = 0; i < n; ++i) 209 | { 210 | vec3 v1 = vecs_plane[i]; 211 | vec3 v2 = vecs_plane[(i + 1) % n]; 212 | 213 | area += (v2.x - v1.x) * (v2.y + v1.y); 214 | } 215 | bool orientation = area >= 0; 216 | 217 | // Vector indexes 218 | int *idxs = malloc(n * sizeof(int)); 219 | if (!idxs) 220 | { 221 | fprintf(stderr, "ERROR: Memory allocation failure.\n"); 222 | exit(1); 223 | } 224 | for (int i = 0; i < n; ++i) 225 | idxs[i] = i; 226 | 227 | triangularize_recurse(vecs_plane, idxs, n, orientation, out_idxs); 228 | free(vecs_plane); 229 | free(idxs); 230 | 231 | return; 232 | } 233 | -------------------------------------------------------------------------------- /src/triangularization.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "trigonometry.h" 4 | 5 | // Triangularize the face, filling *out_idxs with (n-2)*3 indexes from 0 to n -1, 6 | // in groups of 3, each group a triangle. 7 | void triangularize(const vec3 *vecs, int n, int *out_idxs); 8 | -------------------------------------------------------------------------------- /src/trigonometry.c: -------------------------------------------------------------------------------- 1 | #include "trigonometry.h" 2 | 3 | vec3 get_bounding_box_center(const vec3 *A, int n) 4 | { 5 | vec3 min = {0}; 6 | vec3 max = {0}; 7 | 8 | if (n > 0) 9 | { 10 | min = A[0]; 11 | max = A[0]; 12 | } 13 | 14 | for (int i = 0; i < n; i++) 15 | { 16 | vec3 v = A[i]; 17 | 18 | if (v.x < min.x) 19 | min.x = v.x; 20 | if (v.y < min.y) 21 | min.y = v.y; 22 | if (v.z < min.z) 23 | min.z = v.z; 24 | 25 | if (v.x > max.x) 26 | max.x = v.x; 27 | if (v.y > max.y) 28 | max.y = v.y; 29 | if (v.z > max.z) 30 | max.z = v.z; 31 | } 32 | 33 | vec3 center; 34 | center.x = (min.x + max.x)/2.0; 35 | center.y = (min.y + max.y)/2.0; 36 | center.z = (min.z + max.z)/2.0; 37 | 38 | return center; 39 | } 40 | 41 | float get_max_dist(const vec3 *A, int n, vec3 p) 42 | { 43 | float max_d2 = 0.0; 44 | 45 | for (int i = 0; i < n; ++i) 46 | { 47 | vec3 v = A[i]; 48 | float d2 = (v.x - p.x) * (v.x - p.x) + (v.y - p.y) * (v.y - p.y) + (v.z - p.z) * (v.z - p.z); 49 | 50 | if (max_d2 < d2) 51 | max_d2 = d2; 52 | } 53 | 54 | return sqrtf(max_d2); 55 | } 56 | -------------------------------------------------------------------------------- /src/trigonometry.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | typedef struct 6 | { 7 | float x, y, z; 8 | } vec3; 9 | 10 | static inline float vec3_mag(vec3 v) 11 | { 12 | return sqrtf(v.x * v.x + v.y * v.y + v.z * v.z); 13 | } 14 | 15 | static inline vec3 vec3_normalize(vec3 v) 16 | { 17 | float mag = vec3_mag(v); 18 | 19 | if (mag == 0) 20 | return (vec3){0, 0, 0}; 21 | 22 | v.x /= mag; 23 | v.y /= mag; 24 | v.z /= mag; 25 | return v; 26 | } 27 | 28 | static inline vec3 vec3_rotate_y(float cos, float sin, vec3 v) 29 | { 30 | float x = v.x * cos - v.z * sin; 31 | float z = v.x * sin + v.z * cos; 32 | v.x = x; 33 | v.z = z; 34 | return v; 35 | } 36 | 37 | static inline vec3 vec3_rotate_x(float cos, float sin, vec3 v) 38 | { 39 | float y = v.y * cos - v.z * sin; 40 | float z = v.y * sin + v.z * cos; 41 | v.y = y; 42 | v.z = z; 43 | return v; 44 | } 45 | 46 | static inline vec3 vec3_neg(vec3 v) 47 | { 48 | v.x = -v.x; 49 | v.y = -v.y; 50 | v.z = -v.z; 51 | return v; 52 | } 53 | 54 | static inline vec3 vec3_add(vec3 a, vec3 b) 55 | { 56 | vec3 res; 57 | 58 | res.x = a.x + b.x; 59 | res.y = a.y + b.y; 60 | res.z = a.z + b.z; 61 | return res; 62 | } 63 | 64 | static inline vec3 vec3_sub(vec3 a, vec3 b) 65 | { 66 | vec3 res; 67 | 68 | res.x = a.x - b.x; 69 | res.y = a.y - b.y; 70 | res.z = a.z - b.z; 71 | return res; 72 | } 73 | 74 | static inline float vec3_dot_product(vec3 a, vec3 b) 75 | { 76 | return a.x * b.x + a.y * b.y + a.z * b.z; 77 | } 78 | 79 | static inline float vec3_cos_similarity(vec3 a, vec3 b, float a_mag, float b_mag) 80 | { 81 | return vec3_dot_product(a, b) / (a_mag * b_mag); 82 | } 83 | 84 | static inline vec3 vec3_cross_product(vec3 a, vec3 b) 85 | { 86 | vec3 prod; 87 | 88 | prod.x = a.y * b.z - a.z * b.y; 89 | prod.y = a.z * b.x - a.x * b.z; 90 | prod.z = a.x * b.y - a.y * b.x; 91 | 92 | return prod; 93 | } 94 | 95 | vec3 get_bounding_box_center(const vec3 *A, int n); 96 | 97 | float get_max_dist(const vec3 *A, int n, vec3 p); 98 | -------------------------------------------------------------------------------- /src/viewer.c: -------------------------------------------------------------------------------- 1 | #include "surface.h" 2 | #include "model.h" 3 | 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include 11 | #include 12 | 13 | static char *DEFAULT_LUM_OPTIONS = ".,':;!+*=#$@"; 14 | static const float PI = 3.1415926536; 15 | static const float GOLDEN_RATIO = 1.6180339887; 16 | 17 | static const float INTERACTIVE_ZOOM_MIN = 5; 18 | static const float INTERACTIVE_ZOOM_MAX = 1000; 19 | 20 | // Program description 21 | static const char *PROGRAM_NAME = "3d-ascii-viewer"; 22 | static const char *PROGRAM_DESCRIPTION = "an OBJ 3D model format viewer for the terminal"; 23 | 24 | 25 | // Program documentation. 26 | static void output_usage(int argc, char *argv[]) 27 | { 28 | printf("Usage: %s [OPTION...] INPUT_FILE\n", argv[0]); 29 | printf("%s -- %s\n", PROGRAM_NAME, PROGRAM_DESCRIPTION); 30 | printf("\n"); 31 | printf(" -w Output width in characters\n"); 32 | printf(" -h Output height in characters\n"); 33 | printf(" -d Stop the program after this many seconds.\n"); 34 | printf(" -f Frames per second.\n"); 35 | printf(" -a Display assuming this height/width ratio for terminal\n"); 36 | printf(" characters.\n"); 37 | printf(" -c Provide alternate luminescence characters (from less to\n"); 38 | printf(" more light).\n"); 39 | printf(" -s Stretch the model, regardless of the height/width ratio.\n"); 40 | printf(" for terminal characters.\n"); 41 | printf(" -t Allow the animation to reach maximum elevation.\n"); 42 | printf(" -l Don't rotate the light with the model.\n"); 43 | printf(" -X, -Y, -Z Invert respective axes.\n"); 44 | printf(" -XYZ, -XZY, -YXZ, Change model orientation.\n"); 45 | printf(" -YZX, -ZXY, -ZYX \n"); 46 | printf(" -F Flip faces. \n"); 47 | printf(" -z Change zoom level (default: 100).\n"); 48 | printf("\n"); 49 | printf(" --color Display with colors.\n"); 50 | printf(" The OBJ format relies on the companion MTL files.\n"); 51 | printf("\n"); 52 | printf(" --snap Output a single snap to stdout, with the given azimuth\n"); 53 | printf(" and altitude angles, in degrees.\n"); 54 | printf("\n"); 55 | printf(" --interactive Manually rotate the camera.\n"); 56 | printf(" Controls: ARROW KEYS, '-', '+'\n"); 57 | printf(" Alt-controls: H, J, K, L, A, S\n"); 58 | printf(" Quit: Q Toggle Hud: T\n"); 59 | printf("\n"); 60 | printf(" -?, --help Give this help list\n"); 61 | printf("\n"); 62 | 63 | exit(1); 64 | } 65 | 66 | static void output_description(int argc, char *argv[]) 67 | { 68 | printf("Usage: %s [OPTION...] INPUT_FILE\n", argv[0]); 69 | printf("%s -- %s\n", PROGRAM_NAME, PROGRAM_DESCRIPTION); 70 | printf("Try `%s --help' for more information.\n", argv[0]); 71 | 72 | exit(1); 73 | } 74 | 75 | struct arguments 76 | { 77 | int surface_width, surface_height, fps; 78 | bool finite; 79 | float duration; 80 | float aspect_ratio; 81 | bool stretch; 82 | bool top_elevation; 83 | bool static_light; 84 | char *lum_chars; 85 | bool invert_x, invert_y, invert_z; 86 | int axes[3]; 87 | bool axes_flip_faces; 88 | bool flip_faces; 89 | 90 | bool color_support; 91 | 92 | bool snap_mode; 93 | float azimuth, altitude; 94 | float zoom; 95 | 96 | bool interactive; 97 | 98 | int arg_num; 99 | char *input_file; 100 | }; 101 | 102 | static void parse_arguments(int argc, char *argv[], struct arguments *args) 103 | { 104 | for (int i = 1; i < argc; ++i) 105 | { 106 | if (!strcmp(argv[i], "-?") || !strcmp(argv[i], "--help")) 107 | { 108 | output_usage(argc, argv); 109 | } 110 | else if (!strcmp(argv[i], "-w")) 111 | { 112 | if (i >= argc - 1) 113 | output_usage(argc, argv); 114 | args->surface_width = strtol(argv[++i], NULL, 10); 115 | if (errno || args->surface_width <= 0) 116 | { 117 | fprintf(stderr, "ERROR: Invalid width: %s\n", argv[i]); 118 | exit(1); 119 | } 120 | } 121 | else if (!strcmp(argv[i], "-h")) 122 | { 123 | if (i >= argc - 1) 124 | output_usage(argc, argv); 125 | args->surface_height = strtol(argv[++i], NULL, 10); 126 | if (errno || args->surface_height <= 0) 127 | { 128 | fprintf(stderr, "ERROR: Invalid height: %s\n", argv[i]); 129 | exit(1); 130 | } 131 | } 132 | else if (!strcmp(argv[i], "-f")) 133 | { 134 | if (i >= argc - 1) 135 | output_usage(argc, argv); 136 | args->fps = strtol(argv[++i], NULL, 10); 137 | if (errno || args->fps <= 0) 138 | { 139 | fprintf(stderr, "ERROR: Invalid FPS: %s\n", argv[i]); 140 | exit(1); 141 | } 142 | } 143 | else if (!strcmp(argv[i], "-d")) 144 | { 145 | if (i >= argc - 1) 146 | output_usage(argc, argv); 147 | args->duration = strtof(argv[++i], NULL); 148 | if (errno || args->duration < 0) 149 | { 150 | fprintf(stderr, "ERROR: Invalid duration: %s\n", argv[i]); 151 | exit(1); 152 | } 153 | args->finite = true; 154 | } 155 | else if (!strcmp(argv[i], "-a")) 156 | { 157 | if (i >= argc - 1) 158 | output_usage(argc, argv); 159 | args->aspect_ratio = strtof(argv[++i], NULL); 160 | if (errno || args->aspect_ratio <= 0) 161 | { 162 | fprintf(stderr, "ERROR: Invalid aspect-ratio: %s\n", argv[i]); 163 | exit(1); 164 | } 165 | } 166 | else if (!strcmp(argv[i], "-c")) 167 | { 168 | if (i >= argc - 1) 169 | output_usage(argc, argv); 170 | args->lum_chars = argv[++i]; 171 | if (args->lum_chars[0] == '\0') 172 | { 173 | fprintf(stderr, "ERROR: At least one luminescence character must be provided.\n"); 174 | exit(1); 175 | } 176 | } 177 | else if (!strcmp(argv[i], "-s")) 178 | { 179 | args->stretch = true; 180 | } 181 | else if (!strcmp(argv[i], "-t")) 182 | { 183 | args->top_elevation = true; 184 | } 185 | else if (!strcmp(argv[i], "-l")) 186 | { 187 | args->static_light = true; 188 | } 189 | else if (!strcmp(argv[i], "-X")) 190 | { 191 | args->invert_x = true; 192 | } 193 | else if (!strcmp(argv[i], "-Y")) 194 | { 195 | args->invert_y = true; 196 | } 197 | else if (!strcmp(argv[i], "-Z")) 198 | { 199 | args->invert_z = true; 200 | } 201 | else if (!strcmp(argv[i], "-z")) 202 | { 203 | if (i >= argc - 1) 204 | output_usage(argc, argv); 205 | args->zoom = strtof(argv[++i], NULL); 206 | if (errno || args->zoom <= 0) 207 | { 208 | fprintf(stderr, "ERROR: Invalid zoom: %s\n", argv[i]); 209 | exit(1); 210 | } 211 | } 212 | else if (!strcmp(argv[i], "-XYZ")) 213 | { 214 | args->axes[0] = 0; 215 | args->axes[1] = 1; 216 | args->axes[2] = 2; 217 | args->axes_flip_faces = false; 218 | } 219 | else if (!strcmp(argv[i], "-XZY")) 220 | { 221 | args->axes[0] = 0; 222 | args->axes[1] = 2; 223 | args->axes[2] = 1; 224 | args->axes_flip_faces = true; 225 | } 226 | else if (!strcmp(argv[i], "-YXZ")) 227 | { 228 | args->axes[0] = 1; 229 | args->axes[1] = 0; 230 | args->axes[2] = 2; 231 | args->axes_flip_faces = true; 232 | } 233 | else if (!strcmp(argv[i], "-YZX")) 234 | { 235 | args->axes[0] = 1; 236 | args->axes[1] = 2; 237 | args->axes[2] = 0; 238 | args->axes_flip_faces = false; 239 | } 240 | else if (!strcmp(argv[i], "-ZXY")) 241 | { 242 | args->axes[0] = 2; 243 | args->axes[1] = 0; 244 | args->axes[2] = 1; 245 | args->axes_flip_faces = false; 246 | } 247 | else if (!strcmp(argv[i], "-ZYX")) 248 | { 249 | args->axes[0] = 2; 250 | args->axes[1] = 1; 251 | args->axes[2] = 0; 252 | args->axes_flip_faces = true; 253 | } 254 | else if (!strcmp(argv[i], "-F")) 255 | { 256 | args->flip_faces = true; 257 | } 258 | else if (!strcmp(argv[i], "--color")) 259 | { 260 | args->color_support = true; 261 | } 262 | else if (!strcmp(argv[i], "--snap")) 263 | { 264 | if (i >= argc - 2) 265 | output_usage(argc, argv); 266 | args->snap_mode = true; 267 | args->azimuth = strtof(argv[++i], NULL); 268 | if (errno || args->duration < 0) 269 | { 270 | fprintf(stderr, "ERROR: Invalid azimuth: %s\n", argv[i]); 271 | exit(1); 272 | } 273 | args->altitude = strtof(argv[++i], NULL); 274 | if (errno || args->duration < 0) 275 | { 276 | fprintf(stderr, "ERROR: Invalid altitude: %s\n", argv[i]); 277 | exit(1); 278 | } 279 | } 280 | else if (!strcmp(argv[i], "--interactive")) 281 | { 282 | args->interactive = true; 283 | } 284 | else if (argv[i][0] == '-') 285 | { 286 | fprintf(stderr, "ERROR: Invalid option: %s\n", argv[i]); 287 | exit(1); 288 | } 289 | else 290 | { 291 | // Handle too many arguments 292 | if (args->input_file) 293 | output_usage(argc, argv); 294 | 295 | args->input_file = argv[i]; 296 | } 297 | } 298 | 299 | // Handle too few arguments 300 | if (!args->input_file) 301 | output_usage(argc, argv); 302 | } 303 | 304 | // Get current time in microseconds 305 | unsigned long long get_current_useconds(void) 306 | { 307 | unsigned long long ret; 308 | struct timeval time; 309 | 310 | gettimeofday(&time, NULL); 311 | ret = 1000000 * time.tv_sec; 312 | ret += time.tv_usec; 313 | 314 | return ret; 315 | } 316 | 317 | // Wait until frame ends function 318 | static void tick(unsigned long long *last_target, unsigned long long frame_duration) 319 | { 320 | unsigned long long current, target, delta; 321 | 322 | current = get_current_useconds(); 323 | target = *last_target + frame_duration; 324 | if (current < target) 325 | { 326 | delta = target - current; 327 | if (delta > frame_duration) 328 | delta = frame_duration; 329 | usleep(delta); 330 | *last_target = current + delta; 331 | } 332 | else 333 | { 334 | *last_target = current; 335 | } 336 | } 337 | 338 | // Translate from the [-1,1]^3 cube to the screen surface. 339 | static vec3 vec3_to_surface(const struct surface *surface, vec3 v, float zoom) 340 | { 341 | v.x = 0.5 * surface->logical_size_x + 0.5 * v.x * zoom; 342 | v.y = 0.5 * surface->logical_size_y - 0.5 * v.y * zoom; 343 | v.z = 0.5 + 0.5 * v.z * zoom; 344 | return v; 345 | } 346 | 347 | static char char_from_normal(vec3 normal, vec3 light_normal, const char *lum_chars, int lum_count) 348 | { 349 | float sim = vec3_cos_similarity(normal, light_normal, 1.0, 1.0) * 0.5 + 0.5; 350 | int p = (int) roundf((lum_count - 1) * sim); 351 | if (p < 0) 352 | p = 0; 353 | if (p >= lum_count) 354 | p = lum_count - 1; 355 | return lum_chars[p]; 356 | } 357 | 358 | static void terminal_init_colors(const struct model *model) 359 | { 360 | const int MINIMUM_COLOR_VALUE_SUM = 140; 361 | 362 | for (int i = 0; i < model->materials_count; ++i) 363 | { 364 | int color = i + 1; 365 | 366 | if (color >= COLORS || color >= COLOR_PAIRS) 367 | { 368 | fprintf(stderr, "WARN: Terminal doesn't support enough colors for all materials.\n"); 369 | return; 370 | } 371 | 372 | int r = (int)(model->materials[i].Kd_r * 1000); 373 | int g = (int)(model->materials[i].Kd_g * 1000); 374 | int b = (int)(model->materials[i].Kd_b * 1000); 375 | 376 | if (r + g + b < MINIMUM_COLOR_VALUE_SUM) 377 | { 378 | int rem = MINIMUM_COLOR_VALUE_SUM - r + g + b; 379 | r += (rem + 2)/3; 380 | g += (rem + 2)/3; 381 | b += (rem + 2)/3; 382 | } 383 | 384 | if (r > 1000) 385 | r = 1000; 386 | if (r < 0) 387 | r = 0; 388 | if (g > 1000) 389 | g = 1000; 390 | if (g < 0) 391 | g = 0; 392 | if (b > 1000) 393 | b = 1000; 394 | if (b < 0) 395 | b = 0; 396 | 397 | init_color(color, (short)r, (short)g, (short)b); 398 | init_pair(color, color, 0); 399 | } 400 | } 401 | 402 | static void surface_draw_model(struct surface *surface, const struct model *model, float azimuth, 403 | float altitude, float zoom, bool static_light, const char *lum_chars, bool color_support) 404 | { 405 | int lum_count = strlen(lum_chars); 406 | 407 | float alt_cos = cosf(-altitude); 408 | float alt_sin = sinf(-altitude); 409 | 410 | float az_cos = cosf(azimuth); 411 | float az_sin = sinf(azimuth); 412 | 413 | vec3 light = static_light ? (vec3){0.75, -1.0, -0.5} : (vec3){1, -1, 0}; 414 | light = vec3_normalize(light); 415 | 416 | for (int f = 0; f < model->faces_count; ++f) 417 | { 418 | int i1 = model->faces[f].idxs[0]; 419 | int i2 = model->faces[f].idxs[1]; 420 | int i3 = model->faces[f].idxs[2]; 421 | 422 | vec3 v1 = model->vertexes[i1]; 423 | vec3 v2 = model->vertexes[i2]; 424 | vec3 v3 = model->vertexes[i3]; 425 | 426 | struct triangle tri = {.p1 = v1, .p2 = v2, .p3 = v3}; 427 | 428 | tri.p1 = vec3_rotate_y(az_cos, az_sin, tri.p1); 429 | tri.p2 = vec3_rotate_y(az_cos, az_sin, tri.p2); 430 | tri.p3 = vec3_rotate_y(az_cos, az_sin, tri.p3); 431 | 432 | tri.p1 = vec3_rotate_x(alt_cos, alt_sin, tri.p1); 433 | tri.p2 = vec3_rotate_x(alt_cos, alt_sin, tri.p2); 434 | tri.p3 = vec3_rotate_x(alt_cos, alt_sin, tri.p3); 435 | 436 | tri.p1 = vec3_to_surface(surface, tri.p1, zoom); 437 | tri.p2 = vec3_to_surface(surface, tri.p2, zoom); 438 | tri.p3 = vec3_to_surface(surface, tri.p3, zoom); 439 | 440 | char c; 441 | if (static_light) 442 | { 443 | struct triangle tri_ini = {.p1 = v1, .p2 = v2, .p3 = v3}; 444 | tri_ini.p1 = vec3_to_surface(surface, tri_ini.p1, zoom); 445 | tri_ini.p2 = vec3_to_surface(surface, tri_ini.p2, zoom); 446 | tri_ini.p3 = vec3_to_surface(surface, tri_ini.p3, zoom); 447 | 448 | c = char_from_normal(vec3_neg(triangle_normal(&tri_ini)), light, lum_chars, lum_count); 449 | } 450 | else 451 | { 452 | c = char_from_normal(vec3_neg(triangle_normal(&tri)), light, lum_chars, lum_count); 453 | } 454 | 455 | surface_draw_triangle(surface, tri, true, c, color_support ? model->faces[f].material : -1); 456 | } 457 | } 458 | 459 | // Model radius only in X and Z. 460 | static float model_xz_rad(const struct model *model) 461 | { 462 | float rad = 0.0; 463 | for (int i = 0; i < model->vertex_count; ++i) 464 | { 465 | vec3 v = model->vertexes[i]; 466 | 467 | float dist_xz = sqrtf(v.x * v.x + v.z * v.z); 468 | if (dist_xz > rad) 469 | rad = dist_xz; 470 | } 471 | return rad; 472 | } 473 | 474 | static struct surface *create_surface(const struct model *model, int arg_surface_w, int arg_surface_h, 475 | float char_aspect_ratio, bool stretch) 476 | { 477 | // Logical size required by the model 478 | float required_y = 1.0; 479 | float required_x = model_xz_rad(model); 480 | // Surface logical size 481 | float surface_size_x, surface_size_y; 482 | // Surface size in characters 483 | int surface_w, surface_h; 484 | 485 | // User provided arguments override screen size given by ncurses 486 | getmaxyx(stdscr, surface_h, surface_w); 487 | if (arg_surface_h) 488 | surface_h = arg_surface_h; 489 | if (arg_surface_w) 490 | surface_w = arg_surface_w; 491 | 492 | if (stretch) 493 | { 494 | surface_size_x = required_x; 495 | surface_size_y = required_y; 496 | } 497 | else 498 | { 499 | // Screen width / height 500 | float screen_aspect_rel = surface_w / (surface_h * char_aspect_ratio); 501 | 502 | if (screen_aspect_rel * required_y >= 1.0 * required_x) 503 | { 504 | surface_size_x = required_y * screen_aspect_rel; 505 | surface_size_y = required_y; 506 | } 507 | else 508 | { 509 | surface_size_x = required_x; 510 | surface_size_y = required_x / screen_aspect_rel; 511 | } 512 | } 513 | 514 | return surface_init(surface_w, surface_h, surface_size_x, surface_size_y); 515 | } 516 | 517 | void init_file_extension(char dst[5], const char *filename) 518 | { 519 | for (int i = 0; i < 5; ++i) 520 | dst[i] = '\0'; 521 | 522 | const char *ext = strrchr(filename, '.'); 523 | if (!ext || ext == filename) 524 | return; 525 | ext++; 526 | 527 | for (int i = 0; i < 4; ++i) 528 | { 529 | if (ext[i] == '\0') 530 | break; 531 | dst[i] = tolower(ext[i]); 532 | } 533 | } 534 | 535 | int main(int argc, char *argv[]) 536 | { 537 | if (argc == 1) 538 | output_description(argc, argv); 539 | 540 | // Argument default values 541 | struct arguments args = {0}; 542 | args.input_file = NULL; 543 | args.surface_width = 0; 544 | args.surface_height = 0; 545 | args.aspect_ratio = 1.8; 546 | args.stretch = false; 547 | args.fps = 20; 548 | args.duration = 0; 549 | args.top_elevation = false; 550 | args.static_light = false; 551 | args.lum_chars = DEFAULT_LUM_OPTIONS; 552 | args.invert_x = false; 553 | args.invert_y = false; 554 | args.invert_z = false; 555 | args.zoom = 100; 556 | args.axes[0] = 0; 557 | args.axes[1] = 1; 558 | args.axes[2] = 2; 559 | args.axes_flip_faces = false; 560 | args.flip_faces = false; 561 | 562 | args.color_support = false; 563 | 564 | args.snap_mode = false; 565 | args.azimuth = 0.0; 566 | args.altitude = 0.0; 567 | 568 | args.interactive = false; 569 | 570 | parse_arguments(argc, argv, &args); 571 | 572 | struct model *model; 573 | 574 | char file_extension[5]; 575 | init_file_extension(file_extension, args.input_file); 576 | 577 | if (file_extension[0] == '\0') 578 | { 579 | fprintf(stderr, "ERROR: Input file has no extension.\n"); 580 | exit(1); 581 | } 582 | else if (strcmp(file_extension, "obj") == 0) 583 | { 584 | if (!(model = model_load_from_obj(args.input_file, args.color_support))) 585 | return 1; 586 | model_invert_z(model); // Required by the OBJ format. 587 | } 588 | else if (strcmp(file_extension, "stl") == 0) 589 | { 590 | if (args.color_support) 591 | { 592 | fprintf(stderr, "WARN: Colors are not supported in STL format.\n"); 593 | } 594 | if (!(model = model_load_from_stl(args.input_file))) 595 | return 1; 596 | } 597 | else 598 | { 599 | fprintf(stderr, "ERROR: Input file has unsupported extension.\n"); 600 | exit(1); 601 | } 602 | 603 | if (model->vertex_count == 0) 604 | { 605 | fprintf(stderr, "ERROR: Could not read model vertexes.\n"); 606 | exit(1); 607 | } 608 | if (model->faces_count == 0) 609 | { 610 | fprintf(stderr, "ERROR: Could not read model faces.\n"); 611 | exit(1); 612 | } 613 | model_normalize(model); 614 | 615 | // Change model orientation as required by the options 616 | model_change_orientation(model, args.axes[0], args.axes[1], args.axes[2]); 617 | if (args.axes_flip_faces) 618 | model_invert_triangles(model); 619 | 620 | // Flip faces as required by the options 621 | if (args.flip_faces) 622 | model_invert_triangles(model); 623 | 624 | // Invert axes as required by the options 625 | if (args.invert_x) 626 | model_invert_x(model); 627 | if (args.invert_y) 628 | model_invert_y(model); 629 | if (args.invert_z) 630 | model_invert_z(model); 631 | 632 | // Starting curses is required to get the screen size 633 | struct surface *surface; 634 | initscr(); 635 | surface = create_surface(model, args.surface_width, args.surface_height, args.aspect_ratio, args.stretch); 636 | endwin(); // End curses mode 637 | if (!surface) 638 | return 1; 639 | 640 | if (args.color_support) 641 | { 642 | if (has_colors() == FALSE) 643 | { 644 | endwin(); 645 | fprintf(stderr, "ERROR: Terminal does not support colors.\n"); 646 | exit(1); 647 | } 648 | if (can_change_color() == FALSE) 649 | { 650 | endwin(); 651 | fprintf(stderr, "ERROR: Terminal does not support changing colors.\n"); 652 | exit(1); 653 | } 654 | start_color(); 655 | terminal_init_colors(model); 656 | } 657 | 658 | // Initialize clock 659 | unsigned long long frame_duration = (1000000 + args.fps - 1)/args.fps; 660 | unsigned long long start = get_current_useconds(); 661 | unsigned long long clock = start; 662 | unsigned long long duration = (unsigned long long) (args.duration * 1000000); 663 | 664 | if (args.snap_mode) 665 | { 666 | float azimuth = PI * args.azimuth / 180.0; 667 | float altitude = PI * args.altitude / 180.0; 668 | float zoom = args.zoom / 100.0; 669 | surface_draw_model(surface, model, azimuth, altitude, zoom, args.static_light, 670 | args.lum_chars, args.color_support); 671 | 672 | surface_print(stdout, surface); 673 | } 674 | else if (args.interactive) 675 | { 676 | initscr(); 677 | noecho(); 678 | curs_set(0); 679 | timeout(-1); 680 | keypad(stdscr, TRUE); // read special keys. 681 | 682 | const float angle_move = 15.0; 683 | float azimuth_deg = 0.0; 684 | float altitude_deg = 0.0; 685 | float zoom = args.zoom; 686 | 687 | bool hud = true; 688 | 689 | while (1) 690 | { 691 | surface_clear(surface); 692 | 693 | float azimuth = PI * azimuth_deg / 180; 694 | float altitude = PI * altitude_deg / 180; 695 | 696 | surface_draw_model(surface, model, azimuth, altitude, zoom / 100.0, 697 | args.static_light, args.lum_chars, args.color_support); 698 | 699 | // Print surface 700 | move(0, 0); 701 | surface_printw(surface); 702 | if (hud) 703 | { 704 | move(0, 0); 705 | printw("zo:%4.0f", zoom); 706 | move(1, 0); 707 | printw("az: %3.0f", azimuth_deg); 708 | move(2, 0); 709 | printw("al: %3.0f", altitude_deg); 710 | } 711 | refresh(); 712 | 713 | int key = getch(); 714 | 715 | if (key == KEY_RESIZE) 716 | { 717 | surface_free(surface); 718 | surface = create_surface(model, args.surface_width, args.surface_height, 719 | args.aspect_ratio, args.stretch); 720 | if (!surface) 721 | return 1; 722 | } 723 | 724 | if (key == 'q') 725 | break; 726 | if (key == 't') 727 | hud = !hud; 728 | if (key == 'h' || key == KEY_LEFT) 729 | azimuth_deg += angle_move; 730 | if (key == 'l' || key == KEY_RIGHT) 731 | azimuth_deg -= angle_move; 732 | if (key == 'j' || key == KEY_DOWN) 733 | altitude_deg -= angle_move; 734 | if (key == 'k' || key == KEY_UP) 735 | altitude_deg += angle_move; 736 | if (key == '-' || key == 'a') 737 | zoom -= 5; 738 | if (key == '+' || key == 's') 739 | zoom += 5; 740 | 741 | if (azimuth_deg < 0) 742 | azimuth_deg += 360; 743 | if (azimuth_deg >= 360) 744 | azimuth_deg -= 360; 745 | 746 | if (altitude_deg > 180) 747 | altitude_deg = 180; 748 | if (altitude_deg < -180) 749 | altitude_deg = -180; 750 | 751 | if (zoom > INTERACTIVE_ZOOM_MAX) 752 | zoom = INTERACTIVE_ZOOM_MAX; 753 | if (zoom < INTERACTIVE_ZOOM_MIN) 754 | zoom = INTERACTIVE_ZOOM_MIN; 755 | } 756 | 757 | endwin(); 758 | } 759 | else 760 | { 761 | initscr(); 762 | noecho(); 763 | curs_set(0); 764 | timeout(0); 765 | 766 | int t = 0; 767 | while (1) 768 | { 769 | surface_clear(surface); 770 | 771 | float time = t * (frame_duration / 1000000.0); 772 | 773 | const float az_speed = 2.0; 774 | const float al_speed = GOLDEN_RATIO * 0.25; 775 | float azimuth = az_speed * time; 776 | float altitude = (args.top_elevation ? 0.25 : 0.125) * PI * (1 - sinf(al_speed * time)); 777 | float zoom = args.zoom / 100.0; 778 | 779 | surface_draw_model(surface, model, azimuth, altitude, zoom, args.static_light, 780 | args.lum_chars, args.color_support); 781 | 782 | // Print surface 783 | move(0, 0); 784 | surface_printw(surface); 785 | refresh(); 786 | 787 | if ((args.finite && clock - start >= duration)) 788 | break; 789 | 790 | int key = getch(); 791 | if (key == KEY_RESIZE) 792 | { 793 | surface_free(surface); 794 | surface = create_surface(model, args.surface_width, args.surface_height, args.aspect_ratio, args.stretch); 795 | if (!surface) 796 | return 1; 797 | } 798 | else if (key != ERR) 799 | { 800 | break; 801 | } 802 | 803 | tick(&clock, frame_duration); 804 | 805 | t++; 806 | } 807 | 808 | endwin(); 809 | } 810 | 811 | // Free memory 812 | surface_free(surface); 813 | model_free(model); 814 | } 815 | --------------------------------------------------------------------------------