├── .gitignore ├── AndroidManifest.xml ├── README ├── assets └── textures │ ├── mat1_dice.jpg │ └── tex1_eschercubefish.jpg ├── res ├── drawable-hdpi │ └── icon.png ├── drawable-ldpi │ └── icon.png ├── drawable-mdpi │ └── icon.png ├── layout │ └── main.xml ├── raw │ ├── axis_die.obj │ ├── core.obj │ ├── cube.obj │ ├── dice.obj │ ├── eschercube.obj │ ├── icosphere.obj │ └── ship.obj └── values │ └── strings.xml └── src └── com └── hlidskialf └── android ├── game ├── models │ └── ObjModel.java └── util │ ├── MathHelper.java │ └── Point3.java └── objdemo ├── DemoActivity.java └── DemoRendererView.java /.gitignore: -------------------------------------------------------------------------------- 1 | .*.sw* 2 | build.xml 3 | *.properties 4 | bin 5 | gen 6 | .classpath 7 | .project 8 | -------------------------------------------------------------------------------- /AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /README: -------------------------------------------------------------------------------- 1 | basic *.obj model loader for android opengl es 2 | 3 | does not load *.mtl files; uses the 'usemtl' directive to specfiy a texture name to load 4 | -------------------------------------------------------------------------------- /assets/textures/mat1_dice.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lithium/android-objdemo/428df752050dc19ee29ecab36b2c1159e565cb74/assets/textures/mat1_dice.jpg -------------------------------------------------------------------------------- /assets/textures/tex1_eschercubefish.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lithium/android-objdemo/428df752050dc19ee29ecab36b2c1159e565cb74/assets/textures/tex1_eschercubefish.jpg -------------------------------------------------------------------------------- /res/drawable-hdpi/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lithium/android-objdemo/428df752050dc19ee29ecab36b2c1159e565cb74/res/drawable-hdpi/icon.png -------------------------------------------------------------------------------- /res/drawable-ldpi/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lithium/android-objdemo/428df752050dc19ee29ecab36b2c1159e565cb74/res/drawable-ldpi/icon.png -------------------------------------------------------------------------------- /res/drawable-mdpi/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lithium/android-objdemo/428df752050dc19ee29ecab36b2c1159e565cb74/res/drawable-mdpi/icon.png -------------------------------------------------------------------------------- /res/layout/main.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 12 | 13 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /res/raw/axis_die.obj: -------------------------------------------------------------------------------- 1 | # Blender v2.56 (sub 0) OBJ File: 'axis die.blend' 2 | # www.blender.org 3 | mtllib axis-die.mtl 4 | o yaxis_Cylinder.003 5 | v 0.000000 -0.054949 -1.542593 6 | v 0.256793 -0.054949 -0.853325 7 | v -0.256793 -0.054949 -0.853325 8 | v 0.000000 0.051828 -1.542593 9 | v 0.256793 0.051828 -0.853324 10 | v -0.256793 0.051828 -0.853324 11 | v 0.000000 -0.199468 -1.083081 12 | v 0.000000 0.163704 -1.083081 13 | v -0.256793 -0.054949 -0.853325 14 | v -0.256793 0.051828 -0.853324 15 | v 0.256793 -0.054949 -0.853325 16 | v 0.256793 0.051828 -0.853324 17 | v 0.030276 -0.032592 -0.853325 18 | v -0.030276 -0.032592 -0.853325 19 | v 0.030276 0.029472 -0.853325 20 | v -0.030276 0.029472 -0.853325 21 | v -0.030276 -0.032593 1.005810 22 | v -0.030276 0.029471 1.005810 23 | v 0.030276 -0.032593 1.005810 24 | v 0.030276 0.029471 1.005810 25 | vt 0.640933 0.407793 26 | vt 0.640916 0.408451 27 | vt 0.640730 0.407492 28 | vt 0.641151 0.407946 29 | vt 0.641189 0.407924 30 | vt 0.640913 0.408565 31 | vt 0.641150 0.407499 32 | vt 0.641418 0.407581 33 | vt 0.641094 0.407941 34 | vt 0.641620 0.240129 35 | vt 0.645786 0.235966 36 | vt 0.649847 0.240032 37 | vt 0.645666 0.241480 38 | vt 0.640879 0.406719 39 | vt 0.638895 0.406692 40 | vt 0.645379 0.407265 41 | vt 0.642819 0.407025 42 | vt 0.655327 0.239850 43 | vt 0.636049 0.406981 44 | vt 0.636050 0.240129 45 | vt 0.641664 0.407498 46 | vt 0.641012 0.407451 47 | vt 0.640587 0.407222 48 | vt 0.641151 0.408090 49 | usemtl None_dice.jpg 50 | s off 51 | f 7/1 1/2 2/3 52 | f 8/4 5/5 4/6 53 | f 7/1 2/3 3/7 54 | f 8/4 6/8 5/9 55 | f 3/7 1/2 7/1 56 | f 8/4 4/6 6/8 57 | f 19/10 20/11 18/12 58 | f 19/10 18/12 17/13 59 | f 14/14 13/15 19/10 60 | f 14/14 19/10 17/13 61 | f 15/16 16/17 18/12 62 | f 15/16 18/12 20/18 63 | f 13/15 15/19 20/20 64 | f 13/15 20/20 19/10 65 | f 16/17 14/14 18/12 66 | f 14/14 17/13 18/12 67 | f 10/21 9/22 14/14 68 | f 10/21 14/14 16/17 69 | f 11/23 12/24 15/19 70 | f 11/23 15/19 13/15 71 | f 12/24 10/21 16/17 72 | f 12/24 16/17 15/16 73 | f 9/22 11/23 13/15 74 | f 9/22 13/15 14/14 75 | f 3/7 2/3 11/23 76 | f 3/7 11/23 9/22 77 | f 5/9 6/8 10/21 78 | f 5/9 10/21 12/24 79 | f 2/3 5/9 12/24 80 | f 2/3 12/24 11/23 81 | f 6/8 3/7 9/22 82 | f 6/8 9/22 10/21 83 | f 4/6 1/2 3/7 84 | f 4/6 3/7 6/8 85 | f 1/2 4/6 2/3 86 | f 4/6 5/9 2/3 87 | o zaxis_Cylinder.002 88 | v 0.000000 1.541962 -0.037067 89 | v 0.256793 0.852694 -0.037067 90 | v -0.256793 0.852694 -0.037067 91 | v 0.000000 1.541962 0.069710 92 | v 0.256793 0.852694 0.069710 93 | v -0.256793 0.852694 0.069710 94 | v 0.000000 1.082450 -0.181586 95 | v 0.000000 1.082450 0.181586 96 | v -0.256793 0.852694 -0.037067 97 | v -0.256793 0.852694 0.069710 98 | v 0.256793 0.852694 -0.037067 99 | v 0.256793 0.852694 0.069710 100 | v 0.030276 0.852694 -0.014710 101 | v -0.030276 0.852694 -0.014710 102 | v 0.030276 0.852694 0.047354 103 | v -0.030276 0.852694 0.047354 104 | v -0.030276 -1.006440 -0.014710 105 | v -0.030276 -1.006440 0.047354 106 | v 0.030276 -1.006440 -0.014710 107 | v 0.030276 -1.006440 0.047354 108 | vt 0.637027 0.761308 109 | vt 0.637010 0.761967 110 | vt 0.636824 0.761008 111 | vt 0.637244 0.761462 112 | vt 0.637283 0.761439 113 | vt 0.637007 0.762080 114 | vt 0.637243 0.761014 115 | vt 0.637512 0.761096 116 | vt 0.637188 0.761456 117 | vt 0.637713 0.593644 118 | vt 0.641880 0.589482 119 | vt 0.645941 0.593547 120 | vt 0.641760 0.594996 121 | vt 0.636973 0.760234 122 | vt 0.634989 0.760208 123 | vt 0.641473 0.760781 124 | vt 0.638913 0.760541 125 | vt 0.651421 0.593365 126 | vt 0.632143 0.760496 127 | vt 0.632143 0.593644 128 | vt 0.637758 0.761013 129 | vt 0.637106 0.760966 130 | vt 0.636680 0.760737 131 | vt 0.637245 0.761605 132 | usemtl None_dice.jpg 133 | s off 134 | f 27/25 21/26 22/27 135 | f 28/28 25/29 24/30 136 | f 27/25 22/27 23/31 137 | f 28/28 26/32 25/33 138 | f 23/31 21/26 27/25 139 | f 28/28 24/30 26/32 140 | f 39/34 40/35 38/36 141 | f 39/34 38/36 37/37 142 | f 34/38 33/39 39/34 143 | f 34/38 39/34 37/37 144 | f 35/40 36/41 38/36 145 | f 35/40 38/36 40/42 146 | f 33/39 35/43 40/44 147 | f 33/39 40/44 39/34 148 | f 36/41 34/38 37/37 149 | f 36/41 37/37 38/36 150 | f 30/45 29/46 34/38 151 | f 30/45 34/38 36/41 152 | f 31/47 32/48 35/43 153 | f 31/47 35/43 33/39 154 | f 32/48 30/45 36/41 155 | f 32/48 36/41 35/40 156 | f 29/46 31/47 33/39 157 | f 29/46 33/39 34/38 158 | f 23/31 22/27 31/47 159 | f 23/31 31/47 29/46 160 | f 25/33 26/32 30/45 161 | f 25/33 30/45 32/48 162 | f 22/27 25/33 32/48 163 | f 22/27 32/48 31/47 164 | f 26/32 23/31 29/46 165 | f 26/32 29/46 30/45 166 | f 24/30 21/26 23/31 167 | f 24/30 23/31 26/32 168 | f 21/26 24/30 22/27 169 | f 24/30 25/33 22/27 170 | o xaxis_Cylinder.001 171 | v 1.552960 0.009761 -0.055495 172 | v 0.863692 -0.247033 -0.055495 173 | v 0.863692 0.266554 -0.055495 174 | v 1.552960 0.009761 0.051282 175 | v 0.863692 -0.247033 0.051282 176 | v 0.863692 0.266554 0.051282 177 | v 1.093448 0.009761 -0.200015 178 | v 1.093448 0.009761 0.163158 179 | v 0.863692 0.266554 -0.055495 180 | v 0.863692 0.266554 0.051282 181 | v 0.863692 -0.247033 -0.055495 182 | v 0.863692 -0.247033 0.051282 183 | v 0.863692 -0.020516 -0.033139 184 | v 0.863692 0.040037 -0.033139 185 | v 0.863692 -0.020516 0.028925 186 | v 0.863692 0.040037 0.028925 187 | v -0.995443 0.040037 -0.033139 188 | v -0.995443 0.040037 0.028925 189 | v -0.995443 -0.020516 -0.033139 190 | v -0.995443 -0.020516 0.028925 191 | vt 0.820620 0.581621 192 | vt 0.820604 0.582279 193 | vt 0.820418 0.581320 194 | vt 0.820838 0.581774 195 | vt 0.820876 0.581752 196 | vt 0.820600 0.582393 197 | vt 0.820837 0.581327 198 | vt 0.821106 0.581409 199 | vt 0.820782 0.581769 200 | vt 0.821307 0.413956 201 | vt 0.825474 0.409794 202 | vt 0.829534 0.413860 203 | vt 0.825354 0.415308 204 | vt 0.820566 0.580547 205 | vt 0.818583 0.580520 206 | vt 0.825067 0.581093 207 | vt 0.822507 0.580853 208 | vt 0.835014 0.413678 209 | vt 0.815737 0.580809 210 | vt 0.815737 0.413956 211 | vt 0.821352 0.581326 212 | vt 0.820699 0.581279 213 | vt 0.820274 0.581050 214 | vt 0.820839 0.581918 215 | usemtl None_dice.jpg 216 | s off 217 | f 47/49 41/50 42/51 218 | f 48/52 45/53 44/54 219 | f 47/49 42/51 43/55 220 | f 48/52 46/56 45/57 221 | f 43/55 41/50 47/49 222 | f 48/52 44/54 46/56 223 | f 59/58 60/59 58/60 224 | f 59/58 58/60 57/61 225 | f 54/62 53/63 59/58 226 | f 54/62 59/58 57/61 227 | f 55/64 56/65 58/60 228 | f 55/64 58/60 60/66 229 | f 53/63 55/67 60/68 230 | f 53/63 60/68 59/58 231 | f 56/65 54/62 57/61 232 | f 56/65 57/61 58/60 233 | f 50/69 49/70 54/62 234 | f 50/69 54/62 56/65 235 | f 51/71 52/72 53/63 236 | f 52/72 55/67 53/63 237 | f 52/72 50/69 56/65 238 | f 52/72 56/65 55/64 239 | f 49/70 51/71 53/63 240 | f 49/70 53/63 54/62 241 | f 43/55 42/51 51/71 242 | f 43/55 51/71 49/70 243 | f 45/57 46/56 50/69 244 | f 45/57 50/69 52/72 245 | f 42/51 45/57 52/72 246 | f 42/51 52/72 51/71 247 | f 46/56 43/55 49/70 248 | f 46/56 49/70 50/69 249 | f 44/54 41/50 43/55 250 | f 44/54 43/55 46/56 251 | f 41/50 44/54 42/51 252 | f 44/54 45/57 42/51 253 | o die_Cube 254 | v -0.499986 -0.499986 0.499986 255 | v -0.499986 -0.499986 -0.499986 256 | v 0.499986 -0.499986 -0.499986 257 | v 0.499986 -0.499986 0.499987 258 | v -0.499986 0.499986 0.499986 259 | v -0.499986 0.499986 -0.499986 260 | v 0.499986 0.499986 -0.499986 261 | v 0.499986 0.499986 0.499986 262 | vt 0.500903 0.765123 263 | vt 0.500903 0.589114 264 | vt 0.675483 0.589114 265 | vt 0.675483 0.765123 266 | vt 0.675483 0.413106 267 | vt 0.850064 0.413106 268 | vt 0.850064 0.589114 269 | vt 0.500903 0.413106 270 | vt 0.500903 0.237097 271 | vt 0.675483 0.237097 272 | vt 0.324372 0.589114 273 | vt 0.324372 0.413105 274 | vt 0.149791 0.589114 275 | vt 0.149791 0.413105 276 | usemtl mat1_dice.jpg 277 | s off 278 | f 65/73 61/74 64/75 279 | f 65/73 64/75 68/76 280 | f 63/77 67/78 68/79 281 | f 63/77 68/79 64/75 282 | f 62/80 66/81 63/77 283 | f 66/81 67/82 63/77 284 | f 61/74 65/83 62/80 285 | f 65/83 66/84 62/80 286 | f 65/83 68/85 66/84 287 | f 68/85 67/86 66/84 288 | f 61/74 62/80 63/77 289 | f 61/74 63/77 64/75 290 | -------------------------------------------------------------------------------- /res/raw/core.obj: -------------------------------------------------------------------------------- 1 | # Blender v2.56 (sub 0) OBJ File: 'untitled.blend' 2 | # www.blender.org 3 | mtllib core.mtl 4 | o Icosphere_Icosphere.001 5 | v 0.000000 0.393667 -0.000000 6 | v 0.760837 0.946452 0.525720 7 | v -0.290608 0.946452 0.850640 8 | v -0.940453 0.946452 -0.000000 9 | v -0.290608 0.946452 -0.850640 10 | v 0.760837 0.946452 -0.525720 11 | v 0.290608 1.840882 0.850640 12 | v -0.760837 1.840882 0.525720 13 | v -0.760837 1.840882 -0.525720 14 | v 0.290608 1.840882 -0.850640 15 | v 0.940453 1.840882 -0.000000 16 | v 0.000000 2.393667 -0.000000 17 | v 0.447210 0.543013 0.309011 18 | v -0.170816 0.543012 0.499995 19 | v 0.276396 0.867929 0.809012 20 | v 0.447210 0.543013 -0.309011 21 | v 0.894423 0.867931 -0.000000 22 | v -0.552784 0.543015 -0.000000 23 | v -0.723604 0.867931 0.499997 24 | v -0.170816 0.543012 -0.499995 25 | v -0.723604 0.867931 -0.499997 26 | v 0.276396 0.867929 -0.809012 27 | v 1.000000 1.393667 -0.309013 28 | v 1.000000 1.393667 0.309013 29 | v 0.618033 1.393667 0.809017 30 | v 0.000000 1.393667 1.000000 31 | v -0.618033 1.393667 0.809017 32 | v -1.000000 1.393667 0.309013 33 | v -1.000000 1.393667 -0.309013 34 | v -0.618033 1.393667 -0.809017 35 | v 0.000000 1.393667 -1.000000 36 | v 0.618033 1.393667 -0.809017 37 | v 0.723604 1.919403 0.499997 38 | v -0.276396 1.919405 0.809012 39 | v -0.894423 1.919403 -0.000000 40 | v -0.276396 1.919404 -0.809012 41 | v 0.723604 1.919403 -0.499997 42 | v 0.552784 2.244318 -0.000000 43 | v 0.170816 2.244321 0.499995 44 | v -0.447210 2.244321 0.309011 45 | v -0.447210 2.244321 -0.309011 46 | v 0.170816 2.244321 -0.499995 47 | v 0.281349 2.432374 0.678600 48 | v 0.834137 2.107455 0.678602 49 | v 0.401141 2.028934 1.029245 50 | v -1.147063 1.970137 -0.000000 51 | v -1.252640 1.444401 -0.309013 52 | v -1.252640 1.444401 0.309013 53 | v 0.180335 2.416129 -0.694419 54 | v -0.266877 2.091212 -1.003436 55 | v 0.300127 2.012690 -1.045064 56 | v 0.319443 0.676198 0.948311 57 | v -0.127769 0.351282 0.639294 58 | v 0.490257 0.351282 0.448310 59 | v 0.265902 0.678523 -1.023350 60 | v -0.181310 0.353607 -0.714334 61 | v -0.301102 0.757046 -1.064978 62 | v 1.414860 1.448906 0.309013 63 | v 1.414860 1.448906 -0.309013 64 | v 1.355312 1.896121 -0.000000 65 | usemtl (null) 66 | s off 67 | f 15 13 2 68 | f 3 14 15 69 | f 14 1 13 70 | f 17 2 13 71 | f 13 16 17 72 | f 6 17 16 73 | f 13 1 16 74 | f 19 14 3 75 | f 14 19 18 76 | f 4 18 19 77 | f 18 1 14 78 | f 21 18 4 79 | f 18 21 20 80 | f 5 20 21 81 | f 20 1 18 82 | f 20 22 16 83 | f 6 16 22 84 | f 16 1 20 85 | f 24 2 17 86 | f 17 23 24 87 | f 23 17 6 88 | f 26 3 15 89 | f 15 25 26 90 | f 7 26 25 91 | f 25 15 2 92 | f 28 4 19 93 | f 19 27 28 94 | f 8 28 27 95 | f 27 19 3 96 | f 30 5 21 97 | f 21 29 30 98 | f 9 30 29 99 | f 29 21 4 100 | f 32 6 22 101 | f 22 31 32 102 | f 10 32 31 103 | f 31 22 5 104 | f 33 24 11 105 | f 24 33 25 106 | f 7 25 33 107 | f 25 2 24 108 | f 34 26 7 109 | f 26 34 27 110 | f 8 27 34 111 | f 27 3 26 112 | f 35 28 8 113 | f 9 29 35 114 | f 29 4 28 115 | f 36 30 9 116 | f 30 36 31 117 | f 10 31 36 118 | f 31 5 30 119 | f 37 32 10 120 | f 32 37 23 121 | f 11 23 37 122 | f 23 6 32 123 | f 33 38 39 124 | f 12 39 38 125 | f 38 33 11 126 | f 40 8 34 127 | f 34 39 40 128 | f 12 40 39 129 | f 39 34 7 130 | f 41 9 35 131 | f 35 40 41 132 | f 12 41 40 133 | f 40 35 8 134 | f 36 41 42 135 | f 12 42 41 136 | f 41 36 9 137 | f 38 11 37 138 | f 37 42 38 139 | f 12 38 42 140 | f 42 37 10 141 | f 43 45 44 142 | f 48 46 47 143 | f 49 51 50 144 | f 54 52 53 145 | f 55 56 57 146 | f 60 58 59 147 | f 23 11 59 148 | f 11 60 59 149 | f 11 24 58 150 | f 11 58 60 151 | f 24 23 59 152 | f 24 59 58 153 | f 20 5 57 154 | f 20 57 56 155 | f 5 22 57 156 | f 22 55 57 157 | f 22 20 56 158 | f 22 56 55 159 | f 13 15 54 160 | f 15 52 54 161 | f 14 13 54 162 | f 14 54 53 163 | f 15 14 52 164 | f 14 53 52 165 | f 10 36 51 166 | f 36 50 51 167 | f 42 10 51 168 | f 42 51 49 169 | f 36 42 49 170 | f 36 49 50 171 | f 28 35 48 172 | f 35 46 48 173 | f 29 28 48 174 | f 29 48 47 175 | f 35 29 47 176 | f 35 47 46 177 | f 7 33 44 178 | f 7 44 45 179 | f 39 7 45 180 | f 39 45 43 181 | f 33 39 44 182 | f 39 43 44 183 | -------------------------------------------------------------------------------- /res/raw/cube.obj: -------------------------------------------------------------------------------- 1 | # Blender v2.56 (sub 0) OBJ File: '' 2 | # www.blender.org 3 | mtllib cube.mtl 4 | o Cube 5 | v 1.000000 0.000000 -0.999999 6 | v 1.000000 0.000000 1.000000 7 | v -1.000000 0.000000 0.999999 8 | v -0.999999 0.000000 -1.000000 9 | v 1.000000 2.000000 -0.999999 10 | v 0.999999 2.000000 1.000000 11 | v -1.000000 2.000000 0.999999 12 | v -0.999999 2.000000 -1.000000 13 | usemtl (null) 14 | s off 15 | f 5 1 4 16 | f 5 4 8 17 | f 3 7 8 18 | f 3 8 4 19 | f 2 6 3 20 | f 6 7 3 21 | f 1 5 2 22 | f 5 6 2 23 | f 5 8 6 24 | f 8 7 6 25 | f 1 2 3 26 | f 1 3 4 27 | -------------------------------------------------------------------------------- /res/raw/dice.obj: -------------------------------------------------------------------------------- 1 | # Blender v2.56 (sub 0) OBJ File: 'uv-die.blend' 2 | # www.blender.org 3 | mtllib uv-die.mtl 4 | o Cube 5 | v 0.499986 -0.499986 -0.499986 6 | v 0.499986 -0.499986 0.499986 7 | v -0.499986 -0.499986 0.499986 8 | v -0.499986 -0.499986 -0.499986 9 | v 0.499986 0.499986 -0.499986 10 | v 0.499986 0.499986 0.499986 11 | v -0.499986 0.499986 0.499986 12 | v -0.499986 0.499986 -0.499986 13 | vt 0.500903 0.765123 14 | vt 0.500903 0.589114 15 | vt 0.675483 0.589114 16 | vt 0.675483 0.765123 17 | vt 0.675483 0.413106 18 | vt 0.850064 0.413106 19 | vt 0.850064 0.589114 20 | vt 0.500903 0.413106 21 | vt 0.500903 0.237097 22 | vt 0.675483 0.237097 23 | vt 0.324372 0.589114 24 | vt 0.324372 0.413105 25 | vt 0.149791 0.589114 26 | vt 0.149791 0.413105 27 | usemtl mat1_dice.jpg 28 | s off 29 | f 5/1 1/2 4/3 30 | f 5/1 4/3 8/4 31 | f 3/5 7/6 8/7 32 | f 3/5 8/7 4/3 33 | f 2/8 6/9 3/5 34 | f 6/9 7/10 3/5 35 | f 1/2 5/11 2/8 36 | f 5/11 6/12 2/8 37 | f 5/11 8/13 6/12 38 | f 8/13 7/14 6/12 39 | f 1/2 2/8 3/5 40 | f 1/2 3/5 4/3 41 | -------------------------------------------------------------------------------- /res/raw/eschercube.obj: -------------------------------------------------------------------------------- 1 | # Blender v2.56 (sub 0) OBJ File: 'eschercube.blend' 2 | # www.blender.org 3 | mtllib eschercube.mtl 4 | o Cube 5 | v 1.147221 -1.116666 -1.081276 6 | v 1.147221 -1.116666 0.918724 7 | v -0.852780 -1.116666 0.918723 8 | v -0.852779 -1.116666 -1.081277 9 | v 1.147221 0.883334 -1.081276 10 | v 1.147220 0.883334 0.918724 11 | v -0.852780 0.883334 0.918723 12 | v -0.852779 0.883334 -1.081277 13 | vt 0.656298 0.671691 14 | vt 0.656372 0.999915 15 | vt 0.328682 0.999948 16 | vt 0.328682 0.672375 17 | vt 0.000291 0.344047 18 | vt 0.328682 0.344215 19 | vt 0.000144 0.672040 20 | vt 0.656614 0.015857 21 | vt 0.656255 0.344802 22 | vt 0.328681 0.016012 23 | vt 0.984348 0.671668 24 | vt 0.984248 0.344601 25 | vt 0.656388 0.344798 26 | vt 0.656707 0.015593 27 | vt 0.984296 0.015687 28 | vt 0.984275 0.344608 29 | usemtl tex1_eschercubefish.jpg 30 | s off 31 | f 5/1 1/2 4/3 32 | f 5/1 4/3 8/4 33 | f 3/5 7/6 8/4 34 | f 3/5 8/4 4/7 35 | f 2/8 6/9 3/10 36 | f 6/9 7/6 3/10 37 | f 1/11 5/1 2/12 38 | f 5/1 6/9 2/12 39 | f 5/1 8/4 6/9 40 | f 8/4 7/6 6/9 41 | f 1/13 2/14 3/15 42 | f 1/13 3/15 4/16 43 | -------------------------------------------------------------------------------- /res/raw/icosphere.obj: -------------------------------------------------------------------------------- 1 | # Blender v2.56 (sub 0) OBJ File: '' 2 | # www.blender.org 3 | mtllib icosphere.mtl 4 | o Icosphere 5 | v 0.000000 -1.000000 0.000000 6 | v 0.723600 -0.447215 0.525720 7 | v -0.276385 -0.447215 0.850640 8 | v -0.894425 -0.447215 0.000000 9 | v -0.276385 -0.447215 -0.850640 10 | v 0.723600 -0.447215 -0.525720 11 | v 0.276385 0.447215 0.850640 12 | v -0.723600 0.447215 0.525720 13 | v -0.723600 0.447215 -0.525720 14 | v 0.276385 0.447215 -0.850640 15 | v 0.894425 0.447215 -0.000000 16 | v 0.000000 1.000000 -0.000000 17 | v 0.425323 -0.850654 0.309011 18 | v -0.162456 -0.850654 0.499995 19 | v 0.262869 -0.525738 0.809012 20 | v 0.425323 -0.850654 -0.309011 21 | v 0.850648 -0.525736 0.000000 22 | v -0.525730 -0.850652 0.000000 23 | v -0.688189 -0.525736 0.499997 24 | v -0.162456 -0.850654 -0.499995 25 | v -0.688189 -0.525736 -0.499997 26 | v 0.262869 -0.525738 -0.809012 27 | v 0.951058 -0.000000 -0.309013 28 | v 0.951058 0.000000 0.309013 29 | v 0.587786 0.000000 0.809017 30 | v 0.000000 0.000000 1.000000 31 | v -0.587786 0.000000 0.809017 32 | v -0.951058 0.000000 0.309013 33 | v -0.951058 -0.000000 -0.309013 34 | v -0.587786 -0.000000 -0.809017 35 | v 0.000000 -0.000000 -1.000000 36 | v 0.587786 -0.000000 -0.809017 37 | v 0.688189 0.525736 0.499997 38 | v -0.262869 0.525738 0.809012 39 | v -0.850648 0.525736 -0.000000 40 | v -0.262869 0.525738 -0.809012 41 | v 0.688189 0.525736 -0.499997 42 | v 0.525730 0.850652 -0.000000 43 | v 0.162456 0.850654 0.499995 44 | v -0.425323 0.850654 0.309011 45 | v -0.425323 0.850654 -0.309011 46 | v 0.162456 0.850654 -0.499995 47 | v 0.221076 -0.961939 0.160619 48 | v 0.597194 -0.674615 0.433882 49 | v -0.084442 -0.961939 0.259889 50 | v -0.228103 -0.674615 0.702042 51 | v 0.512753 -0.505727 0.693775 52 | v -0.007026 -0.505728 0.862665 53 | v 0.221076 -0.961939 -0.160619 54 | v 0.597194 -0.674615 -0.433882 55 | v 0.818272 -0.505726 -0.273262 56 | v 0.818272 -0.505726 0.273262 57 | v -0.738174 -0.674610 0.000000 58 | v -0.273266 -0.961939 0.000000 59 | v -0.822618 -0.505724 0.259890 60 | v -0.501373 -0.505727 0.702043 61 | v -0.084442 -0.961939 -0.259889 62 | v -0.228103 -0.674615 -0.702042 63 | v -0.822618 -0.505724 -0.259890 64 | v -0.501373 -0.505727 -0.702043 65 | v 0.512753 -0.505727 -0.693775 66 | v -0.007026 -0.505728 -0.862665 67 | v 0.870465 -0.232456 -0.433883 68 | v 0.959253 0.232455 -0.160620 69 | v 0.959253 0.232455 0.160620 70 | v 0.870465 -0.232456 0.433883 71 | v 0.449185 0.232457 0.862668 72 | v 0.681641 -0.232457 0.693779 73 | v 0.143661 0.232457 0.961938 74 | v -0.143661 -0.232456 0.961938 75 | v -0.449185 -0.232457 0.862668 76 | v -0.681641 0.232457 0.693779 77 | v -0.959253 -0.232455 0.160620 78 | v -0.870465 0.232456 0.433883 79 | v -0.959253 -0.232455 -0.160620 80 | v -0.870465 0.232456 -0.433883 81 | v -0.449185 -0.232457 -0.862668 82 | v -0.681641 0.232457 -0.693779 83 | v 0.143661 0.232456 -0.961938 84 | v -0.143661 -0.232457 -0.961938 85 | v 0.681641 -0.232457 -0.693779 86 | v 0.449185 0.232457 -0.862668 87 | v 0.501373 0.505727 0.702043 88 | v 0.822618 0.505724 0.259890 89 | v 0.007026 0.505728 0.862665 90 | v -0.512753 0.505727 0.693775 91 | v -0.818272 0.505726 0.273262 92 | v -0.818272 0.505726 -0.273262 93 | v 0.007026 0.505728 -0.862665 94 | v -0.512753 0.505727 -0.693775 95 | v 0.501373 0.505727 -0.702043 96 | v 0.822618 0.505724 -0.259890 97 | v 0.738174 0.674610 -0.000000 98 | v 0.273266 0.961939 -0.000000 99 | v 0.228103 0.674615 0.702042 100 | v 0.084442 0.961939 0.259889 101 | v -0.221076 0.961939 0.160619 102 | v -0.597194 0.674615 0.433882 103 | v -0.221076 0.961939 -0.160619 104 | v -0.597194 0.674615 -0.433882 105 | v 0.228103 0.674615 -0.702042 106 | v 0.084442 0.961939 -0.259889 107 | v 0.361804 -0.723612 0.587779 108 | v 0.138197 -0.894430 0.425320 109 | v 0.052790 -0.723612 0.688185 110 | v 0.670817 -0.723611 0.162457 111 | v 0.447210 -0.894429 0.000000 112 | v 0.670817 -0.723611 -0.162457 113 | v -0.447211 -0.723611 0.525727 114 | v -0.361800 -0.894429 0.262863 115 | v -0.638195 -0.723609 0.262864 116 | v -0.638195 -0.723609 -0.262864 117 | v -0.361800 -0.894429 -0.262863 118 | v -0.447211 -0.723611 -0.525727 119 | v 0.052790 -0.723612 -0.688185 120 | v 0.138197 -0.894430 -0.425319 121 | v 0.361804 -0.723612 -0.587779 122 | v 0.947213 -0.276396 0.162458 123 | v 0.947213 -0.276396 -0.162458 124 | v 1.000000 0.000000 0.000000 125 | v 0.138199 -0.276397 0.951055 126 | v 0.447216 -0.276397 0.850648 127 | v 0.309017 0.000000 0.951056 128 | v -0.861804 -0.276396 0.425322 129 | v -0.670820 -0.276396 0.688190 130 | v -0.809018 0.000000 0.587783 131 | v -0.670820 -0.276396 -0.688190 132 | v -0.861804 -0.276396 -0.425322 133 | v -0.809018 -0.000000 -0.587783 134 | v 0.447216 -0.276397 -0.850648 135 | v 0.138199 -0.276397 -0.951055 136 | v 0.309017 -0.000000 -0.951056 137 | v 0.861804 0.276396 0.425322 138 | v 0.809018 0.000000 0.587783 139 | v 0.670820 0.276396 0.688190 140 | v -0.138199 0.276397 0.951055 141 | v -0.309017 0.000000 0.951056 142 | v -0.447216 0.276397 0.850648 143 | v -0.947213 0.276396 0.162458 144 | v -1.000000 0.000000 0.000000 145 | v -0.947213 0.276396 -0.162458 146 | v -0.447216 0.276397 -0.850648 147 | v -0.309017 -0.000000 -0.951056 148 | v -0.138199 0.276397 -0.951055 149 | v 0.670820 0.276396 -0.688190 150 | v 0.809018 -0.000000 -0.587783 151 | v 0.861804 0.276396 -0.425322 152 | v 0.447211 0.723612 0.525727 153 | v 0.638195 0.723609 0.262864 154 | v 0.361800 0.894429 0.262863 155 | v -0.361804 0.723612 0.587779 156 | v -0.052790 0.723612 0.688185 157 | v -0.138197 0.894430 0.425319 158 | v -0.670817 0.723611 -0.162457 159 | v -0.670817 0.723611 0.162457 160 | v -0.447210 0.894429 -0.000000 161 | v -0.052790 0.723612 -0.688185 162 | v -0.361804 0.723612 -0.587779 163 | v -0.138197 0.894430 -0.425320 164 | v 0.638195 0.723609 -0.262864 165 | v 0.447211 0.723612 -0.525727 166 | v 0.361800 0.894429 -0.262863 167 | usemtl (null) 168 | s off 169 | f 103 47 15 170 | f 47 103 44 171 | f 13 44 103 172 | f 44 2 47 173 | f 103 104 13 174 | f 104 103 105 175 | f 15 105 103 176 | f 105 14 104 177 | f 46 48 3 178 | f 48 46 105 179 | f 14 105 46 180 | f 105 15 48 181 | f 45 104 14 182 | f 104 45 43 183 | f 1 43 45 184 | f 43 13 104 185 | f 106 17 52 186 | f 52 44 106 187 | f 13 106 44 188 | f 44 52 2 189 | f 106 13 107 190 | f 107 108 106 191 | f 17 106 108 192 | f 108 107 16 193 | f 50 6 51 194 | f 51 108 50 195 | f 16 50 108 196 | f 108 51 17 197 | f 49 16 107 198 | f 107 43 49 199 | f 1 49 43 200 | f 43 107 13 201 | f 109 56 19 202 | f 56 109 46 203 | f 14 46 109 204 | f 46 3 56 205 | f 109 110 14 206 | f 110 109 111 207 | f 19 111 109 208 | f 111 18 110 209 | f 53 55 4 210 | f 55 53 111 211 | f 18 111 53 212 | f 111 19 55 213 | f 54 110 18 214 | f 110 54 45 215 | f 1 45 54 216 | f 45 14 110 217 | f 112 59 21 218 | f 59 112 53 219 | f 18 53 112 220 | f 53 4 59 221 | f 112 113 18 222 | f 113 112 114 223 | f 21 114 112 224 | f 114 20 113 225 | f 58 60 5 226 | f 60 58 114 227 | f 20 114 58 228 | f 114 21 60 229 | f 57 113 20 230 | f 113 57 54 231 | f 1 54 57 232 | f 54 18 113 233 | f 115 62 22 234 | f 62 115 58 235 | f 20 58 115 236 | f 58 5 62 237 | f 115 116 20 238 | f 116 115 117 239 | f 22 117 115 240 | f 117 16 116 241 | f 50 61 6 242 | f 61 50 117 243 | f 16 117 50 244 | f 117 22 61 245 | f 49 116 16 246 | f 116 49 57 247 | f 1 57 49 248 | f 57 20 116 249 | f 118 24 66 250 | f 66 52 118 251 | f 17 118 52 252 | f 52 66 2 253 | f 118 17 119 254 | f 119 120 118 255 | f 24 118 120 256 | f 120 119 23 257 | f 64 11 65 258 | f 65 120 64 259 | f 23 64 120 260 | f 120 65 24 261 | f 63 23 119 262 | f 119 51 63 263 | f 6 63 51 264 | f 51 119 17 265 | f 121 26 70 266 | f 70 48 121 267 | f 15 121 48 268 | f 48 70 3 269 | f 121 15 122 270 | f 122 123 121 271 | f 26 121 123 272 | f 123 122 25 273 | f 67 7 69 274 | f 69 123 67 275 | f 25 67 123 276 | f 123 69 26 277 | f 68 25 122 278 | f 122 47 68 279 | f 2 68 47 280 | f 47 122 15 281 | f 124 28 73 282 | f 73 55 124 283 | f 19 124 55 284 | f 55 73 4 285 | f 124 19 125 286 | f 125 126 124 287 | f 28 124 126 288 | f 126 125 27 289 | f 72 8 74 290 | f 74 126 72 291 | f 27 72 126 292 | f 126 74 28 293 | f 71 27 125 294 | f 125 56 71 295 | f 3 71 56 296 | f 56 125 19 297 | f 127 30 77 298 | f 77 60 127 299 | f 21 127 60 300 | f 60 77 5 301 | f 127 21 128 302 | f 128 129 127 303 | f 30 127 129 304 | f 129 128 29 305 | f 76 9 78 306 | f 78 129 76 307 | f 29 76 129 308 | f 129 78 30 309 | f 75 29 128 310 | f 128 59 75 311 | f 4 75 59 312 | f 59 128 21 313 | f 130 32 81 314 | f 81 61 130 315 | f 22 130 61 316 | f 61 81 6 317 | f 130 22 131 318 | f 131 132 130 319 | f 32 130 132 320 | f 132 131 31 321 | f 79 10 82 322 | f 82 132 79 323 | f 31 79 132 324 | f 132 82 32 325 | f 80 31 131 326 | f 131 62 80 327 | f 5 80 62 328 | f 62 131 22 329 | f 133 84 33 330 | f 84 133 65 331 | f 24 65 133 332 | f 65 11 84 333 | f 133 134 24 334 | f 134 133 135 335 | f 33 135 133 336 | f 135 25 134 337 | f 67 83 7 338 | f 83 67 135 339 | f 25 135 67 340 | f 135 33 83 341 | f 68 134 25 342 | f 134 68 66 343 | f 2 66 68 344 | f 66 24 134 345 | f 136 85 34 346 | f 85 136 69 347 | f 26 69 136 348 | f 69 7 85 349 | f 136 137 26 350 | f 137 136 138 351 | f 34 138 136 352 | f 138 27 137 353 | f 72 86 8 354 | f 86 72 138 355 | f 27 138 72 356 | f 138 34 86 357 | f 71 137 27 358 | f 137 71 70 359 | f 3 70 71 360 | f 70 26 137 361 | f 139 87 35 362 | f 87 139 74 363 | f 28 74 139 364 | f 74 8 87 365 | f 139 140 28 366 | f 140 139 141 367 | f 35 141 139 368 | f 141 29 140 369 | f 76 88 9 370 | f 88 76 141 371 | f 29 141 76 372 | f 141 35 88 373 | f 75 140 29 374 | f 140 75 73 375 | f 4 73 75 376 | f 73 28 140 377 | f 142 90 36 378 | f 90 142 78 379 | f 30 78 142 380 | f 78 9 90 381 | f 142 143 30 382 | f 143 142 144 383 | f 36 144 142 384 | f 144 31 143 385 | f 79 89 10 386 | f 89 79 144 387 | f 31 144 79 388 | f 144 36 89 389 | f 80 143 31 390 | f 143 80 77 391 | f 5 77 80 392 | f 77 30 143 393 | f 145 91 37 394 | f 91 145 82 395 | f 32 82 145 396 | f 82 10 91 397 | f 145 146 32 398 | f 146 145 147 399 | f 37 147 145 400 | f 147 23 146 401 | f 64 92 11 402 | f 92 64 147 403 | f 23 147 64 404 | f 147 37 92 405 | f 63 146 23 406 | f 146 63 81 407 | f 6 81 63 408 | f 81 32 146 409 | f 148 39 95 410 | f 95 83 148 411 | f 33 148 83 412 | f 83 95 7 413 | f 148 33 149 414 | f 149 150 148 415 | f 39 148 150 416 | f 150 149 38 417 | f 94 12 96 418 | f 96 150 94 419 | f 38 94 150 420 | f 150 96 39 421 | f 93 38 149 422 | f 149 84 93 423 | f 11 93 84 424 | f 84 149 33 425 | f 151 40 98 426 | f 98 86 151 427 | f 34 151 86 428 | f 86 98 8 429 | f 151 34 152 430 | f 152 153 151 431 | f 40 151 153 432 | f 153 152 39 433 | f 96 12 97 434 | f 97 153 96 435 | f 39 96 153 436 | f 153 97 40 437 | f 95 39 152 438 | f 152 85 95 439 | f 7 95 85 440 | f 85 152 34 441 | f 154 41 100 442 | f 100 88 154 443 | f 35 154 88 444 | f 88 100 9 445 | f 154 35 155 446 | f 155 156 154 447 | f 41 154 156 448 | f 156 155 40 449 | f 97 12 99 450 | f 99 156 97 451 | f 40 97 156 452 | f 156 99 41 453 | f 98 40 155 454 | f 155 87 98 455 | f 8 98 87 456 | f 87 155 35 457 | f 157 42 101 458 | f 101 89 157 459 | f 36 157 89 460 | f 89 101 10 461 | f 157 36 158 462 | f 158 159 157 463 | f 42 157 159 464 | f 159 158 41 465 | f 99 12 102 466 | f 102 159 99 467 | f 41 99 159 468 | f 159 102 42 469 | f 100 41 158 470 | f 158 90 100 471 | f 9 100 90 472 | f 90 158 36 473 | f 160 38 93 474 | f 93 92 160 475 | f 37 160 92 476 | f 92 93 11 477 | f 160 37 161 478 | f 161 162 160 479 | f 38 160 162 480 | f 162 161 42 481 | f 102 12 94 482 | f 94 162 102 483 | f 42 102 162 484 | f 162 94 38 485 | f 101 42 161 486 | f 161 91 101 487 | f 10 101 91 488 | f 91 161 37 489 | -------------------------------------------------------------------------------- /res/raw/ship.obj: -------------------------------------------------------------------------------- 1 | # Blender v2.56 (sub 0) OBJ File: '' 2 | # www.blender.org 3 | mtllib ship.mtl 4 | o Cylinder 5 | v 0.413503 3.579514 -0.995849 6 | v 0.940500 3.024490 -0.992898 7 | v 0.920696 2.259380 -0.994093 8 | v 0.365691 1.732376 -0.998733 9 | v -0.399401 1.752188 -1.004100 10 | v -0.926399 2.307212 -1.007051 11 | v -0.906594 3.072321 -1.005856 12 | v -0.351589 3.599326 -1.001216 13 | v 0.399401 3.576756 1.004100 14 | v 0.926398 3.021733 1.007050 15 | v 0.906594 2.256623 1.005856 16 | v 0.351589 1.729618 1.001216 17 | v -0.413503 1.749430 0.995848 18 | v -0.940500 2.304454 0.992898 19 | v -0.920696 3.069564 0.994092 20 | v -0.365690 3.596569 0.998733 21 | v -0.166147 3.077193 0.999423 22 | v -0.412354 2.843408 0.997365 23 | v -0.421139 2.503997 0.996835 24 | v -0.187357 2.257782 0.998144 25 | v 0.152046 2.248993 1.000525 26 | v 0.398252 2.482779 1.002583 27 | v 0.407037 2.822189 1.003113 28 | v 0.173255 3.068404 1.001804 29 | v 0.172122 3.068182 1.162549 30 | v 0.405904 2.821968 1.163858 31 | v 0.397119 2.482557 1.163328 32 | v 0.150912 2.248772 1.161270 33 | v -0.188491 2.257561 1.158889 34 | v -0.422273 2.503775 1.157580 35 | v -0.413487 2.843186 1.158110 36 | v -0.167280 3.076971 1.160168 37 | v -0.010158 2.662485 1.440619 38 | v -0.334653 3.507090 1.439495 39 | v -0.836820 3.030259 1.435297 40 | v -0.854739 2.337990 1.434216 41 | v -0.377914 1.835807 1.436886 42 | v 0.314338 1.817881 1.441742 43 | v 0.816505 2.294713 1.445940 44 | v 0.834423 2.986981 1.447021 45 | v 0.357598 3.489164 1.444352 46 | v -0.281530 3.416975 -1.128460 47 | v -0.728117 2.992918 -1.132194 48 | v -0.744053 2.377270 -1.133155 49 | v -0.320002 1.930669 -1.130781 50 | v 0.295632 1.914726 -1.126462 51 | v 0.742219 2.338783 -1.122729 52 | v 0.758154 2.954431 -1.121767 53 | v 0.334104 3.401033 -1.124142 54 | v 0.233941 3.171541 -1.424924 55 | v 0.525383 2.864600 -1.423293 56 | v 0.514431 2.441477 -1.423953 57 | v 0.207500 2.150031 -1.426519 58 | v -0.215613 2.160988 -1.429488 59 | v -0.507055 2.467928 -1.431119 60 | v -0.496102 2.891052 -1.430459 61 | v -0.189172 3.182498 -1.427893 62 | v -0.098483 2.952021 -1.709823 63 | v -0.268151 2.790913 -1.711241 64 | v -0.274205 2.557016 -1.711606 65 | v -0.113100 2.387343 -1.710704 66 | v 0.120792 2.381286 -1.709063 67 | v 0.290459 2.542394 -1.707645 68 | v 0.296514 2.776291 -1.707280 69 | v 0.135408 2.945964 -1.708182 70 | v 0.037251 2.722759 -1.885925 71 | v 0.069472 2.688825 -1.885745 72 | v 0.068262 2.642045 -1.885818 73 | v 0.034328 2.609824 -1.886102 74 | v -0.012450 2.611035 -1.886430 75 | v -0.044671 2.644970 -1.886610 76 | v -0.043460 2.691749 -1.886537 77 | v -0.009527 2.723971 -1.886253 78 | v 0.012401 2.666897 -1.886178 79 | vt 0.000000 0.000000 80 | vt 1.000000 0.000000 81 | vt 1.000000 1.000000 82 | usemtl None_untitled 83 | s off 84 | f 33/1 40/2 41/3 85 | f 33/1 39/2 40/3 86 | f 33/1 38/2 39/3 87 | f 33/1 37/2 38/3 88 | f 33/1 36/2 37/3 89 | f 33/1 35/2 36/3 90 | f 33/1 34/2 35/3 91 | f 33/1 41/2 34/3 92 | f 74/1 66/2 67/3 93 | f 74/1 67/2 68/3 94 | f 74/1 68/2 69/3 95 | f 74/1 69/2 70/3 96 | f 74/1 70/2 71/3 97 | f 74/1 71/2 72/3 98 | f 74/1 72/2 73/3 99 | f 73/1 66/2 74/3 100 | f 58/1 65/2 66/3 101 | f 58/1 66/2 73/3 102 | f 59/1 58/2 73/3 103 | f 59/1 73/2 72/3 104 | f 60/1 59/2 72/3 105 | f 60/1 72/2 71/3 106 | f 61/1 60/2 71/3 107 | f 61/1 71/2 70/3 108 | f 62/1 61/2 70/3 109 | f 62/1 70/2 69/3 110 | f 63/1 62/2 69/3 111 | f 63/1 69/2 68/3 112 | f 64/1 63/2 68/3 113 | f 64/1 68/2 67/3 114 | f 65/1 64/2 67/3 115 | f 65/1 67/2 66/3 116 | f 50/1 51/2 64/3 117 | f 50/1 64/2 65/3 118 | f 51/1 52/2 63/3 119 | f 51/1 63/2 64/3 120 | f 52/1 53/2 62/3 121 | f 52/1 62/2 63/3 122 | f 53/1 54/2 61/3 123 | f 53/1 61/2 62/3 124 | f 54/1 55/2 61/3 125 | f 55/1 60/2 61/3 126 | f 55/1 56/2 60/3 127 | f 56/1 59/2 60/3 128 | f 56/1 57/2 59/3 129 | f 57/1 58/2 59/3 130 | f 57/1 50/2 65/3 131 | f 57/1 65/2 58/3 132 | f 42/1 49/2 50/3 133 | f 42/1 50/2 57/3 134 | f 43/1 42/2 57/3 135 | f 43/1 57/2 56/3 136 | f 44/1 43/2 55/3 137 | f 43/1 56/2 55/3 138 | f 45/1 44/2 55/3 139 | f 45/1 55/2 54/3 140 | f 46/1 45/2 54/3 141 | f 46/1 54/2 53/3 142 | f 47/1 46/2 53/3 143 | f 47/1 53/2 52/3 144 | f 48/1 47/2 52/3 145 | f 48/1 52/2 51/3 146 | f 49/1 48/2 51/3 147 | f 49/1 51/2 50/3 148 | f 1/1 2/2 48/3 149 | f 1/1 48/2 49/3 150 | f 2/1 3/2 48/3 151 | f 3/1 47/2 48/3 152 | f 3/1 4/2 47/3 153 | f 4/1 46/2 47/3 154 | f 4/1 5/2 46/3 155 | f 5/1 45/2 46/3 156 | f 5/1 6/2 45/3 157 | f 6/1 44/2 45/3 158 | f 6/1 7/2 43/3 159 | f 6/1 43/2 44/3 160 | f 7/1 8/2 42/3 161 | f 7/1 42/2 43/3 162 | f 8/1 1/2 49/3 163 | f 8/1 49/2 42/3 164 | f 26/1 25/2 41/3 165 | f 26/1 41/2 40/3 166 | f 27/1 26/2 40/3 167 | f 27/1 40/2 39/3 168 | f 28/1 27/2 39/3 169 | f 28/1 39/2 38/3 170 | f 29/1 28/2 38/3 171 | f 29/1 38/2 37/3 172 | f 30/1 29/2 37/3 173 | f 30/1 37/2 36/3 174 | f 31/1 30/2 36/3 175 | f 31/1 36/2 35/3 176 | f 32/1 31/2 35/3 177 | f 32/1 35/2 34/3 178 | f 25/1 32/2 34/3 179 | f 25/1 34/2 41/3 180 | f 24/1 17/2 32/3 181 | f 24/1 32/2 25/3 182 | f 17/1 18/2 31/3 183 | f 17/1 31/2 32/3 184 | f 18/1 19/2 30/3 185 | f 18/1 30/2 31/3 186 | f 19/1 20/2 29/3 187 | f 19/1 29/2 30/3 188 | f 20/1 21/2 28/3 189 | f 20/1 28/2 29/3 190 | f 21/1 22/2 27/3 191 | f 21/1 27/2 28/3 192 | f 22/1 23/2 26/3 193 | f 22/1 26/2 27/3 194 | f 23/1 24/2 25/3 195 | f 23/1 25/2 26/3 196 | f 10/1 9/2 24/3 197 | f 10/1 24/2 23/3 198 | f 11/1 10/2 23/3 199 | f 11/1 23/2 22/3 200 | f 12/1 11/2 22/3 201 | f 12/1 22/2 21/3 202 | f 13/1 12/2 21/3 203 | f 13/1 21/2 20/3 204 | f 14/1 13/2 20/3 205 | f 14/1 20/2 19/3 206 | f 15/1 14/2 19/3 207 | f 15/1 19/2 18/3 208 | f 16/1 15/2 18/3 209 | f 16/1 18/2 17/3 210 | f 9/1 16/2 17/3 211 | f 9/1 17/2 24/3 212 | f 9/1 1/2 16/3 213 | f 1/1 8/2 16/3 214 | f 7/1 15/2 8/3 215 | f 15/1 16/2 8/3 216 | f 6/1 14/2 15/3 217 | f 6/1 15/2 7/3 218 | f 5/1 13/2 14/3 219 | f 5/1 14/2 6/3 220 | f 4/1 12/2 13/3 221 | f 4/1 13/2 5/3 222 | f 3/1 11/2 12/3 223 | f 3/1 12/2 4/3 224 | f 2/1 10/2 11/3 225 | f 2/1 11/2 3/3 226 | f 1/1 9/2 10/3 227 | f 1/1 10/2 2/3 228 | -------------------------------------------------------------------------------- /res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | ObjModel Demo 4 | 5 | -------------------------------------------------------------------------------- /src/com/hlidskialf/android/game/models/ObjModel.java: -------------------------------------------------------------------------------- 1 | package com.hlidskialf.android.game.models; 2 | 3 | import android.content.Context; 4 | import android.content.res.AssetManager; 5 | import android.graphics.Bitmap; 6 | import android.graphics.Bitmap; 7 | import android.graphics.BitmapFactory; 8 | import android.opengl.GLUtils; 9 | import android.util.Log; 10 | import java.io.BufferedReader; 11 | import java.io.IOException; 12 | import java.io.InputStream; 13 | import java.io.InputStreamReader; 14 | import java.nio.FloatBuffer; 15 | import java.util.ArrayList; 16 | import java.util.StringTokenizer; 17 | import javax.microedition.khronos.opengles.GL10; 18 | 19 | import com.hlidskialf.android.game.util.Point3; 20 | 21 | 22 | public class ObjModel 23 | { 24 | 25 | public void bindTextures(Context context, GL10 gl) 26 | { 27 | Bitmap bitmap; 28 | 29 | try { 30 | InputStream is = context.getAssets().open("textures/"+mTextureName); 31 | bitmap = BitmapFactory.decodeStream(is); 32 | if (bitmap == null) { 33 | Log.v("ObjModel", "err loading bitmap!"); 34 | } 35 | } catch (java.io.IOException e) { 36 | Log.v("ObjModel", "err loading tex: "+e.toString()); 37 | return; 38 | } 39 | 40 | mTextures = new int[1]; 41 | gl.glGenTextures(1, mTextures, 0); 42 | gl.glBindTexture(GL10.GL_TEXTURE_2D, mTextures[0]); 43 | gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR); 44 | gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR); 45 | gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S, GL10.GL_CLAMP_TO_EDGE); 46 | gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T, GL10.GL_CLAMP_TO_EDGE); 47 | GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0); 48 | 49 | Log.v("ObjModel", "loaded texture: "+mTextureName+" = "+mTextures[0]); 50 | 51 | bitmap.recycle(); 52 | } 53 | 54 | public void draw(GL10 gl) 55 | { 56 | gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); 57 | gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY); 58 | 59 | 60 | for (Model model : mModels) { 61 | 62 | gl.glVertexPointer(3, GL10.GL_FLOAT, 0, model.v); 63 | if (model.vt != null && mTextures != null) { 64 | gl.glBindTexture(GL10.GL_TEXTURE_2D, mTextures[0]); 65 | gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, model.vt); 66 | } 67 | if (model.vn != null) { 68 | gl.glNormalPointer(GL10.GL_FLOAT, 0, model.vn); 69 | } 70 | gl.glDrawArrays(GL10.GL_TRIANGLES, 0, model.v_size); 71 | 72 | } 73 | 74 | gl.glDisableClientState(GL10.GL_VERTEX_ARRAY); 75 | gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY); 76 | 77 | } 78 | 79 | public static ObjModel loadFromStream(InputStream is, String texture_name) throws IOException 80 | { 81 | ObjModel obj = ObjLoader.loadFromStream(is); 82 | obj.mTextureName = texture_name; 83 | return obj; 84 | } 85 | 86 | 87 | /* private */ 88 | 89 | private Model mModels[]; 90 | private int mTextures[]; 91 | private String mTextureName; 92 | 93 | private static class ObjLoader 94 | { 95 | 96 | public static ObjModel loadFromStream(InputStream is) throws IOException 97 | { 98 | BufferedReader reader = new BufferedReader(new InputStreamReader(is)); 99 | ObjModel obj = new ObjModel(); 100 | ArrayList v = new ArrayList(); 101 | ArrayList vt = new ArrayList(); 102 | ArrayList vn = new ArrayList(); 103 | ArrayList f = new ArrayList(); 104 | 105 | ArrayList o = new ArrayList(); 106 | 107 | boolean o_pending=false; 108 | 109 | while(reader.ready()) 110 | { 111 | String line = reader.readLine(); 112 | if (line == null) 113 | break; 114 | 115 | StringTokenizer tok = new StringTokenizer(line); 116 | String cmd = tok.nextToken(); 117 | 118 | if (cmd.equals("o")) { 119 | if (o_pending) { 120 | Model model = new Model(); 121 | model.fill(f, vt.size() > 0, vn.size() > 0); 122 | o.add(model); 123 | } 124 | else { 125 | o_pending=true; 126 | } 127 | } 128 | else 129 | if (cmd.equals("v")) { 130 | v.add(read_point(tok)); 131 | } 132 | else 133 | if (cmd.equals("vn")) { 134 | vn.add(read_point(tok)); 135 | } 136 | else 137 | if (cmd.equals("vt")) { 138 | vt.add(read_point(tok)); 139 | } 140 | else 141 | if (cmd.equals("f")) { 142 | if (tok.countTokens() != 3) 143 | throw new UnsupportedOperationException("Only triangles supported"); 144 | 145 | Face face = new Face(3); 146 | while (tok.hasMoreTokens()) { 147 | StringTokenizer face_tok = new StringTokenizer(tok.nextToken(), "/"); 148 | 149 | int v_idx = -1; 150 | int vt_idx = -1; 151 | int vn_idx = -1; 152 | v_idx = Integer.parseInt(face_tok.nextToken()); 153 | if (face_tok.hasMoreTokens()) vt_idx = Integer.parseInt(face_tok.nextToken()); 154 | if (face_tok.hasMoreTokens()) vn_idx = Integer.parseInt(face_tok.nextToken()); 155 | 156 | //Log.v("objmodel", "face: "+v_idx+"/"+vt_idx+"/"+vn_idx); 157 | 158 | face.addVertex( 159 | v.get(v_idx-1), 160 | vt_idx == -1 ? null : vt.get(vt_idx-1), 161 | vn_idx == -1 ? null : vn.get(vn_idx-1) 162 | ); 163 | } 164 | f.add(face); 165 | } 166 | /* 167 | else 168 | if (cmd.equals("usemtl")) { 169 | // lets not bother parsing material file 170 | // just use the name as an asset path 171 | obj.mTextureName = tok.nextToken(); 172 | } 173 | */ 174 | } 175 | 176 | if (o_pending) { 177 | Model model = new Model(); 178 | model.fill(f, vt.size() > 0, vn.size() > 0); 179 | o.add(model); 180 | } 181 | 182 | obj.mModels = new Model[o.size()]; 183 | o.toArray(obj.mModels); 184 | 185 | return obj; 186 | } 187 | 188 | 189 | 190 | private static Point3 read_point(StringTokenizer tok) 191 | { 192 | Point3 ret = new Point3(); 193 | if (tok.hasMoreTokens()) { 194 | ret.x = Float.parseFloat(tok.nextToken()); 195 | if (tok.hasMoreTokens()) { 196 | ret.y = Float.parseFloat(tok.nextToken()); 197 | if (tok.hasMoreTokens()) { 198 | ret.z = Float.parseFloat(tok.nextToken()); 199 | } 200 | } 201 | } 202 | return ret; 203 | } 204 | 205 | } 206 | 207 | private static class Face 208 | { 209 | Point3 v[]; 210 | Point3 vt[]; 211 | Point3 vn[]; 212 | int size; 213 | int count; 214 | 215 | public Face(int size) 216 | { 217 | this.size = size; 218 | this.count = 0; 219 | this.v = new Point3[size]; 220 | this.vt = new Point3[size]; 221 | this.vn = new Point3[size]; 222 | } 223 | public boolean addVertex(Point3 v, Point3 vt, Point3 vn) 224 | { 225 | if (count >= size) 226 | return false; 227 | this.v[count] = v; 228 | this.vt[count] = vt; 229 | this.vn[count] = vn; 230 | count++; 231 | return true; 232 | } 233 | 234 | public void pushOnto(FloatBuffer v_buffer, FloatBuffer vt_buffer, FloatBuffer vn_buffer) 235 | { 236 | int i; 237 | for (i=0; i faces, boolean has_tex, boolean has_normals) 260 | { 261 | int f_len = faces.size(); 262 | 263 | this.v_size = f_len * 3; 264 | this.v = FloatBuffer.allocate(this.v_size*3); 265 | 266 | if (has_tex) 267 | this.vt = FloatBuffer.allocate(this.v_size*2); 268 | if (has_normals) 269 | this.vn = FloatBuffer.allocate(this.v_size*3); 270 | 271 | int i; 272 | for (i=0; i < f_len; i++) { 273 | Face face = faces.get(i); 274 | face.pushOnto(this.v, this.vt, this.vn); 275 | } 276 | 277 | this.v.rewind(); 278 | if (this.vt != null) 279 | this.vt.rewind(); 280 | if (this.vn != null) 281 | this.vn.rewind(); 282 | } 283 | } 284 | 285 | 286 | } 287 | -------------------------------------------------------------------------------- /src/com/hlidskialf/android/game/util/MathHelper.java: -------------------------------------------------------------------------------- 1 | package com.hlidskialf.android.game.util; 2 | 3 | 4 | public class MathHelper 5 | 6 | { 7 | 8 | 9 | public static float angle_of_vector(float x, float y) 10 | { 11 | double angle = Math.atan(x / y) * 180 / Math.PI; 12 | angle = y > 0 ? 90 + angle : 270 + angle; 13 | return 270f - (float)angle; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/com/hlidskialf/android/game/util/Point3.java: -------------------------------------------------------------------------------- 1 | package com.hlidskialf.android.game.util; 2 | 3 | 4 | public class Point3 extends Object 5 | { 6 | public float x; 7 | public float y; 8 | public float z; 9 | 10 | public Point3() 11 | { 12 | x = 0.0f; 13 | y = 0.0f; 14 | z = 0.0f; 15 | } 16 | public Point3(float x, float y, float z) 17 | { 18 | set(x,y,z); 19 | } 20 | public Point3(Point3 src) 21 | { 22 | set(src.x, src.y, src.z); 23 | } 24 | 25 | public final boolean equals(float x, float y, float z) 26 | { 27 | return ((this.x == x) && (this.y == y) && (this.z == z)); 28 | } 29 | 30 | public void set(float x, float y, float z) 31 | { 32 | this.x = x; 33 | this.y = y; 34 | this.z = z; 35 | } 36 | 37 | public void minmax(float minx, float miny, float minz, float maxx, float maxy, float maxz) 38 | { 39 | this.x = Math.min(Math.max(this.x, minx), maxx); 40 | this.y = Math.min(Math.max(this.y, miny), maxy); 41 | this.z = Math.min(Math.max(this.z, minz), maxz); 42 | } 43 | 44 | @Override 45 | public boolean equals(Object o) { 46 | if (this == o) 47 | return true; 48 | 49 | if (!(o instanceof Point3)) 50 | return false; 51 | 52 | Point3 obj = (Point3)o; 53 | return this.equals(obj.x, obj.y, obj.z); 54 | } 55 | @Override 56 | public String toString() { 57 | return "("+x+","+y+","+z+")"; 58 | } 59 | @Override 60 | public int hashCode() { throw new UnsupportedOperationException(); } 61 | } 62 | -------------------------------------------------------------------------------- /src/com/hlidskialf/android/objdemo/DemoActivity.java: -------------------------------------------------------------------------------- 1 | package com.hlidskialf.android.objdemo; 2 | 3 | import android.app.Activity; 4 | import android.os.Bundle; 5 | import android.opengl.GLSurfaceView; 6 | import android.widget.TextView; 7 | 8 | public class DemoActivity extends Activity 9 | { 10 | /** Called when the activity is first created. */ 11 | @Override 12 | public void onCreate(Bundle savedInstanceState) 13 | { 14 | super.onCreate(savedInstanceState); 15 | setContentView(R.layout.main); 16 | 17 | 18 | mSurfaceView = (DemoRendererView)findViewById(R.id.renderer_view); 19 | mSurfaceView.start(); 20 | 21 | mText = (TextView)findViewById(android.R.id.text1); 22 | 23 | update_text(); 24 | } 25 | 26 | @Override 27 | public void onPause() 28 | { 29 | super.onPause(); 30 | mSurfaceView.onPause(); 31 | } 32 | @Override 33 | public void onResume() 34 | { 35 | super.onResume(); 36 | mSurfaceView.onResume(); 37 | } 38 | 39 | 40 | private void update_text() 41 | { 42 | //mText.setText( "origin: "+mRenderer.mOrigin); 43 | } 44 | 45 | 46 | DemoRendererView mSurfaceView; 47 | TextView mText; 48 | } 49 | -------------------------------------------------------------------------------- /src/com/hlidskialf/android/objdemo/DemoRendererView.java: -------------------------------------------------------------------------------- 1 | package com.hlidskialf.android.objdemo; 2 | 3 | import android.content.Context; 4 | import android.opengl.GLSurfaceView; 5 | import android.opengl.GLU; 6 | import android.view.MotionEvent; 7 | import android.view.GestureDetector; 8 | import android.os.Handler; 9 | import android.util.AttributeSet; 10 | import android.util.Log; 11 | import javax.microedition.khronos.egl.EGLConfig; 12 | import javax.microedition.khronos.opengles.GL10; 13 | 14 | import java.nio.FloatBuffer; 15 | 16 | import com.hlidskialf.android.game.models.ObjModel; 17 | import com.hlidskialf.android.game.util.Point3; 18 | import com.hlidskialf.android.game.util.MathHelper; 19 | 20 | 21 | public class DemoRendererView extends GLSurfaceView 22 | { 23 | public static final int GRID_SIZE=8; 24 | 25 | Context mContext; 26 | DemoRenderer mRenderer; 27 | TouchHelper mTouchHelper; 28 | 29 | float mViewWidth, mViewHeight; 30 | 31 | ObjModel mModel; 32 | Point3 mOrigin; 33 | Point3 mRotate; 34 | Point3 mCamera; 35 | 36 | 37 | FloatBuffer mGrid; 38 | int mGridSize; 39 | 40 | 41 | 42 | 43 | public DemoRendererView(Context context) { this(context,null); } 44 | public DemoRendererView(Context context, AttributeSet attrs) 45 | { 46 | super(context,attrs); 47 | mContext = context; 48 | 49 | try{ 50 | mModel = ObjModel.loadFromStream(context.getResources().openRawResource(R.raw.axis_die), "mat1_dice.jpg"); 51 | } catch (java.io.IOException e) { 52 | Log.v("DemoRendererView", "loading model: "+e); 53 | } 54 | 55 | mOrigin = new Point3(0f,0f,0f); 56 | mRotate = new Point3(0f,0f,0f); 57 | mCamera = new Point3(0f,3f,3.9f); 58 | 59 | mTouchHelper = new TouchHelper(context); 60 | 61 | } 62 | public void start() 63 | { 64 | mRenderer = new DemoRenderer(); 65 | setRenderer(mRenderer); 66 | } 67 | 68 | 69 | 70 | 71 | 72 | 73 | @Override 74 | public boolean onTouchEvent(MotionEvent ev) 75 | { 76 | return mTouchHelper.onTouchEvent(ev); 77 | } 78 | 79 | private void drag_xy(float dx, float dy) 80 | { 81 | 82 | mOrigin.x += (dx/mViewWidth)*mGridSize; 83 | mOrigin.y -= (dy/mViewHeight)*mGridSize; 84 | 85 | float half = mGridSize/2; 86 | mOrigin.minmax(-half+.5f,-half+.5f,-half+.5f,half-.5f,half-.5f,half-.5f); 87 | } 88 | 89 | private void drag_xz(float dx, float dy) 90 | { 91 | mOrigin.x += (dx/mViewWidth)*mGridSize; 92 | mOrigin.z += (dy/mViewHeight)*mGridSize; 93 | 94 | float half = mGridSize/2; 95 | mOrigin.minmax(-half+.5f,-half+.5f,-half+.5f,half-.5f,half-.5f,half-.5f); 96 | } 97 | 98 | 99 | 100 | 101 | 102 | private class TouchHelper extends GestureDetector.SimpleOnGestureListener 103 | { 104 | GestureDetector gesture; 105 | int ptr1_id=-1, ptr2_id=-1; 106 | float last_x=-1, last_y=-1; 107 | 108 | public TouchHelper(Context context) 109 | { 110 | gesture = new GestureDetector(context, this); 111 | } 112 | 113 | @Override 114 | public boolean onDoubleTap(MotionEvent ev) 115 | { 116 | if (mRotationFinal != -1) 117 | return true; 118 | 119 | int index = ev.getActionIndex(); 120 | float x = ev.getX(index); 121 | float y = ev.getY(index); 122 | 123 | int col = (int)(x / mViewWidth * 3); 124 | int row = (int)(y / mViewHeight * 3); 125 | 126 | Log.v("ObjDem", "col,row:"+col+","+row); 127 | 128 | 129 | if (col == 0 && row == 0) { 130 | mRotationAxis = Z_AXIS; 131 | mRotationFinal = mRotate.z + 90; 132 | mRotationDelta = 1; 133 | } 134 | else 135 | if (col == 0 && row == 1) { 136 | mRotationAxis = Y_AXIS; 137 | mRotationFinal = mRotate.y - 90; 138 | mRotationDelta = -1; 139 | } 140 | else 141 | if (col == 1 && row == 0) { 142 | mRotationAxis = X_AXIS; 143 | mRotationFinal = mRotate.x - 90; 144 | mRotationDelta = -1; 145 | } 146 | else 147 | if (col == 1 && row == 2) { 148 | mRotationAxis = X_AXIS; 149 | mRotationFinal = mRotate.x + 90; 150 | mRotationDelta = 1; 151 | } 152 | else 153 | if (col == 2 && row == 1) { 154 | mRotationAxis = Y_AXIS; 155 | mRotationFinal = mRotate.y + 90; 156 | mRotationDelta = 1; 157 | } 158 | else 159 | if (col == 2 && row == 2) { 160 | mRotationAxis = Z_AXIS; 161 | mRotationFinal = mRotate.z - 90; 162 | mRotationDelta = -1; 163 | } 164 | 165 | 166 | 167 | 168 | 169 | return true; 170 | } 171 | 172 | @Override 173 | public boolean onFling(MotionEvent e1, MotionEvent e2, float vel_x, float vel_y) 174 | { 175 | float angle = MathHelper.angle_of_vector(vel_x, vel_y); 176 | 177 | Log.v("ObjDemo", "vel: "+vel_x+","+vel_y+" = "+angle); 178 | 179 | 180 | return true; 181 | } 182 | 183 | public boolean onTouchEvent(MotionEvent ev) 184 | { 185 | if (gesture.onTouchEvent(ev)) { 186 | ptr1_id = -1; 187 | ptr2_id = -1; 188 | last_x = -1f; 189 | last_y = -1f; 190 | return true; 191 | } 192 | 193 | 194 | int action = ev.getActionMasked(); 195 | int index = ev.getActionIndex(); 196 | int id = ev.getPointerId(index); 197 | int count = ev.getPointerCount(); 198 | 199 | switch (action) 200 | { 201 | case MotionEvent.ACTION_DOWN: 202 | ptr1_id = id; 203 | break; 204 | 205 | case MotionEvent.ACTION_POINTER_DOWN: 206 | ptr2_id = id; 207 | break; 208 | 209 | case MotionEvent.ACTION_POINTER_UP: 210 | ptr2_id = -1; 211 | break; 212 | 213 | case MotionEvent.ACTION_UP: 214 | ptr1_id = -1; 215 | last_x = -1; 216 | last_y = -1; 217 | break; 218 | 219 | case MotionEvent.ACTION_MOVE: 220 | 221 | float x,y; 222 | 223 | if (count >= 2) { 224 | x = ev.getX(index); 225 | y = ev.getY(index); 226 | 227 | if (last_x != -1) 228 | drag_xz(x - last_x, y - last_y); 229 | } 230 | else { 231 | x = ev.getX(index); 232 | y = ev.getY(index); 233 | 234 | if (last_x != -1) 235 | drag_xy(x - last_x, y - last_y); 236 | } 237 | 238 | last_x = x; 239 | last_y = y; 240 | 241 | 242 | break; 243 | } 244 | return true; 245 | } 246 | 247 | } 248 | 249 | 250 | 251 | public final static int NONE=-1; 252 | public final static int X_AXIS=0; 253 | public final static int Y_AXIS=1; 254 | public final static int Z_AXIS=2; 255 | 256 | float mRotationFinal=-1f; 257 | float mRotationDelta=0f; 258 | int mRotationAxis=-1; 259 | 260 | 261 | 262 | private void tick() 263 | { 264 | if (mRotationFinal != -1) 265 | { 266 | float close = Math.abs(mRotationDelta*2); 267 | switch (mRotationAxis) 268 | { 269 | case X_AXIS: 270 | mRotate.x += mRotationDelta; 271 | if (Math.abs(mRotationFinal - mRotate.x) <= close) { 272 | mRotate.x = mRotationFinal; 273 | mRotationFinal=-1; 274 | } 275 | break; 276 | case Y_AXIS: 277 | mRotate.y += mRotationDelta; 278 | if (Math.abs(mRotationFinal - mRotate.y) <= close) { 279 | mRotate.y = mRotationFinal; 280 | mRotationFinal=-1; 281 | } 282 | break; 283 | case Z_AXIS: 284 | mRotate.z += mRotationDelta; 285 | if (Math.abs(mRotationFinal - mRotate.z) <= close) { 286 | mRotate.z = mRotationFinal; 287 | mRotationFinal=-1; 288 | } 289 | break; 290 | } 291 | //mRotate.minmax(-360,-360,-360, 360,360,360); 292 | } 293 | 294 | } 295 | 296 | private class DemoRenderer implements GLSurfaceView.Renderer 297 | { 298 | public void onSurfaceCreated(GL10 gl, EGLConfig config) 299 | { 300 | gl.glClearColor(0f,0f,0f, 0.5f); 301 | gl.glEnable(GL10.GL_DEPTH_TEST); 302 | gl.glDepthFunc(GL10.GL_LEQUAL); 303 | gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_NICEST); 304 | 305 | gl.glEnable(GL10.GL_TEXTURE_2D); 306 | gl.glShadeModel(GL10.GL_SMOOTH); 307 | 308 | 309 | /* 310 | gl.glEnable(GL10.GL_LIGHTING); 311 | gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_AMBIENT, new float[] {0.3f,0.3f,0.3f,1f}, 0); 312 | gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_DIFFUSE, new float[] {1f,1f,1f,1f}, 0); 313 | gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_SPECULAR, new float[] {1f,1f,1f,1f}, 0); 314 | gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_POSITION, new float[] {-1f,10f,5f,1f}, 0); 315 | gl.glEnable(GL10.GL_LIGHT0); 316 | */ 317 | 318 | 319 | build_grid(GRID_SIZE); 320 | mModel.bindTextures(mContext, gl); 321 | } 322 | public void onSurfaceChanged(GL10 gl, int w, int h) 323 | { 324 | mViewWidth = (float)w; 325 | mViewHeight = (float)h; 326 | gl.glViewport(0,0,w,h); 327 | 328 | gl.glMatrixMode(GL10.GL_PROJECTION); 329 | gl.glLoadIdentity(); 330 | GLU.gluPerspective(gl, 60.0f, mViewWidth/mViewHeight, 0.1f, 100f); 331 | 332 | gl.glMatrixMode(GL10.GL_MODELVIEW); 333 | gl.glLoadIdentity(); 334 | 335 | 336 | } 337 | public void onDrawFrame(GL10 gl) 338 | { 339 | tick(); 340 | 341 | gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT); 342 | gl.glPushMatrix(); 343 | 344 | 345 | //position camera 346 | GLU.gluLookAt(gl, mCamera.x,mCamera.y,mCamera.z, mOrigin.x,mOrigin.y,mOrigin.z, 0f,1f,0f); 347 | 348 | 349 | //draw_grid 350 | draw_grid(gl); 351 | 352 | 353 | //draw_model 354 | gl.glPushMatrix(); 355 | 356 | gl.glTranslatef(mOrigin.x, mOrigin.y, mOrigin.z); 357 | gl.glRotatef(mRotate.x, 1f, 0f, 0f); 358 | gl.glRotatef(mRotate.y, 0f, 1f, 0f); 359 | gl.glRotatef(mRotate.z, 0f, 0f, 1f); 360 | 361 | mModel.draw(gl); 362 | 363 | //draw_lights 364 | //gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_POSITION, new float[] {-1f,10f,5f,1f}, 0); 365 | 366 | gl.glPopMatrix(); 367 | 368 | 369 | gl.glPopMatrix(); 370 | } 371 | 372 | 373 | private void build_grid(int GRID_SIZE) 374 | { 375 | float x,y,z; 376 | 377 | float i; 378 | 379 | float half = GRID_SIZE/2f; 380 | 381 | mGridSize = GRID_SIZE; 382 | mGrid = FloatBuffer.allocate((GRID_SIZE+1)*12*3); 383 | 384 | for (i=-half; i <= +half; i++) 385 | { 386 | mGrid.put(i); mGrid.put(-half); mGrid.put(+half); 387 | mGrid.put(i); mGrid.put(-half); mGrid.put(-half); 388 | mGrid.put(i); mGrid.put(+half); mGrid.put(-half); 389 | mGrid.put(i); mGrid.put(+half); mGrid.put(+half); 390 | 391 | mGrid.put(-half); mGrid.put(i); mGrid.put(+half); 392 | mGrid.put(-half); mGrid.put(i); mGrid.put(-half); 393 | mGrid.put(+half); mGrid.put(i); mGrid.put(-half); 394 | mGrid.put(+half); mGrid.put(i); mGrid.put(+half); 395 | 396 | mGrid.put(-half); mGrid.put(+half); mGrid.put(i); 397 | mGrid.put(-half); mGrid.put(-half); mGrid.put(i); 398 | mGrid.put(+half); mGrid.put(-half); mGrid.put(i); 399 | mGrid.put(+half); mGrid.put(+half); mGrid.put(i); 400 | } 401 | mGrid.rewind(); 402 | 403 | 404 | } 405 | public void draw_grid(GL10 gl) 406 | { 407 | gl.glPushMatrix(); 408 | 409 | int ofs=0; 410 | int i; 411 | 412 | gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY); 413 | 414 | gl.glVertexPointer(3, GL10.GL_FLOAT, 0, mGrid); 415 | for (i=0; i <= mGridSize*3; i++) 416 | { 417 | gl.glDrawArrays(GL10.GL_LINE_LOOP, ofs, 4); 418 | ofs+=4; 419 | } 420 | 421 | gl.glPopMatrix(); 422 | } 423 | 424 | 425 | } 426 | 427 | } 428 | --------------------------------------------------------------------------------