├── .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 |
--------------------------------------------------------------------------------