Project

General

Profile

« Previous | Next » 

Revision eeabbae3

Added by Leszek Koltunski about 1 year ago

Progress with Master Icosamate.

View differences:

src/main/java/org/distorted/objectlib/objects/TwistyIcosamate.java
11 11

  
12 12
import static org.distorted.objectlib.touchcontrol.TouchControl.TC_ICOSAHEDRON;
13 13
import static org.distorted.objectlib.touchcontrol.TouchControl.TYPE_NOT_SPLIT;
14
import static org.distorted.objectlib.touchcontrol.TouchControlIcosahedron.*;
14 15

  
15 16
import org.distorted.library.type.Static3D;
16 17
import org.distorted.library.type.Static4D;
......
31 32

  
32 33
public class TwistyIcosamate extends ShapeIcosahedron
33 34
{
34
  // topmost vertex (0,A,0) and 3 vertices from the second-topmost-layer, front one and two ones
35
  // to the right: (0,B,C) , (D,B,E) , (F,B,H)
36

  
37
  private static final float Z = (float)Math.sqrt(5+SQ5);
38

  
39
  private static final float A = Z*(SQ2/4);
40
  private static final float B = Z*(SQ2*SQ5/20);
41
  private static final float C = Z*(SQ2*SQ5/10);
42
  private static final float D = (SQ5+1)/4;
43
  private static final float E = Z*(SQ5-1)/(4*SQ2*SQ5);
44
  private static final float F = 0.5f;
45
  private static final float H =-Z*(SQ5+1)/(4*SQ2*SQ5);
46

  
47
  private static final float X1 = D/3;
48
  private static final float X2 = (D+F)/3;
49
  private static final float X3 = (2*D+F)/3;
50
  private static final float X4 = (D+F)/3;
51
  private static final float Y1 = (A+2*B)/3;
52
  private static final float Y2 = B/3;
53
  private static final float Z1 = (C+E)/3;
54
  private static final float Z2 = (E+H)/3;
55
  private static final float Z3 = 2*H/3;
56
  private static final float Z4 = (C-2*H)/3;
57
  private static final float Z5 = -H/3;
58
  private static final float Z6 = (H-C-E)/3;
59

  
60 35
  static final Static3D[] ROT_AXIS = new Static3D[]
61 36
         {
62
           new Static3D(   0,  1,  0),
63
           new Static3D(   0,B/A,C/A),
64
           new Static3D( D/A,B/A,E/A),
65
           new Static3D( F/A,B/A,H/A),
66
           new Static3D(-F/A,B/A,H/A),
67
           new Static3D(-D/A,B/A,E/A)
37
           new Static3D(                   0,                   1,                   0),
38
           new Static3D(                   0, VEC[1][1]/VEC[0][1], VEC[1][2]/VEC[0][1]),
39
           new Static3D( VEC[2][0]/VEC[0][1], VEC[1][1]/VEC[0][1], VEC[2][2]/VEC[0][1]),
40
           new Static3D( VEC[3][0]/VEC[0][1], VEC[1][1]/VEC[0][1], VEC[3][2]/VEC[0][1]),
41
           new Static3D(-VEC[3][0]/VEC[0][1], VEC[1][1]/VEC[0][1], VEC[3][2]/VEC[0][1]),
42
           new Static3D(-VEC[2][0]/VEC[0][1], VEC[1][1]/VEC[0][1], VEC[2][2]/VEC[0][1])
68 43
         };
69 44

  
70 45
  private int[][] mEdges;
......
80 55
    super(meshState, iconMode, data.getNumLayers()[0], quat, move, scale, data, asset);
81 56
    }
82 57

  
58
///////////////////////////////////////////////////////////////////////////////////////////////////
59

  
60
  @Override
61
  public int getInternalColor()
62
    {
63
    return 0xff222222;
64
    }
65

  
83 66
///////////////////////////////////////////////////////////////////////////////////////////////////
84 67

  
85 68
  public int[][] getScrambleEdges()
......
99 82
    {
100 83
    if( mCuts==null )
101 84
      {
102
      float[] cut = new float[] {0};  // TODO
85
      int nL = numLayers[0];
86
      float[] cut = new float[nL-1];
87
      for(int i=0; i<nL-1; i++) cut[i] = VEC[1][1]*(2*i+2-nL);
103 88
      mCuts = new float[][] { cut,cut,cut,cut,cut,cut };
104 89
      }
105 90

  
......
157 142
    return TouchControlIcosahedron.FACE_AXIS;
158 143
    }
159 144

  
145
///////////////////////////////////////////////////////////////////////////////////////////////////
146

  
147
  private float[] computeOff(int index, int N)
148
    {
149
    if( N==2 )
150
      {
151
      return new float[] {0,0,0};
152
      }
153
    else
154
      {
155
      switch(index)
156
        {
157
        case 0 : return new float[] {0,SQ3/9,0};
158
        case 1 : return new float[] {-1.0f/6,-SQ3/18,0};
159
        default: return new float[] { 1.0f/6,-SQ3/18,0};
160
        }
161
      }
162
    }
163

  
164
///////////////////////////////////////////////////////////////////////////////////////////////////
165
// Rodrigues
166

  
167
  private void rotateVect(float vx, float vy, float vz, float sin, float cos, float[] vec)
168
    {
169
    float cx = vy*vec[2] - vz*vec[1];
170
    float cy = vz*vec[0] - vx*vec[2];
171
    float cz = vx*vec[1] - vy*vec[0];
172

  
173
    float scalar = vx*vec[0] + vy*vec[1] + vz*vec[2];
174

  
175
    vec[0] = vec[0]*cos + cx*sin + vx*scalar*(1-cos);
176
    vec[1] = vec[1]*cos + cy*sin + vy*scalar*(1-cos);
177
    vec[2] = vec[2]*cos + cz*sin + vz*scalar*(1-cos);
178
    }
179

  
180
///////////////////////////////////////////////////////////////////////////////////////////////////
181

  
182
  private void rotateFacePosition(float x, float y, float z, float[] off)
183
    {
184
    float cosB = (float)Math.sqrt(x*x+z*z);
185
    float sinB = y;
186
    float sinA = x/cosB;
187
    float cosA = z/cosB;
188

  
189
    float vec1X = 0;
190
    float vec1Y = 1;
191
    float vec1Z = 0;
192

  
193
    float vec2X = -z/cosB;
194
    float vec2Y = 0;
195
    float vec2Z = x/cosB;
196

  
197
    rotateVect(vec1X,vec1Y,vec1Z,sinA,cosA,off);
198
    rotateVect(vec2X,vec2Y,vec2Z,sinB,cosB,off);
199
    }
200

  
201
///////////////////////////////////////////////////////////////////////////////////////////////////
202

  
203
  private float[] createFacePosition(float vx, float vy, float vz, float scale, boolean inverted, float[] off)
204
    {
205
    float[] tmp = new float[3];
206
    tmp[0] = off[0];
207
    tmp[1] = off[1];
208
    tmp[2] = off[2];
209

  
210
    rotateFacePosition(vx,vy,vz,tmp);
211

  
212
    if( inverted )
213
      {
214
      tmp[0] = -tmp[0];
215
      tmp[1] = -tmp[1];
216
      tmp[2] = -tmp[2];
217
      }
218

  
219
    float[] ret = new float[3];
220

  
221
    ret[0] = scale*(vx+tmp[0]);
222
    ret[1] = scale*(vy+tmp[1]);
223
    ret[2] = scale*(vz+tmp[2]);
224

  
225
    return ret;
226
    }
227

  
228
///////////////////////////////////////////////////////////////////////////////////////////////////
229

  
230
  private float[] createEdgePosition(int edge, int index, int N)
231
    {
232
    int[] edgeIndices = EDGE_INDICES[edge];
233
    int i0 = edgeIndices[0];
234
    int i1 = edgeIndices[1];
235

  
236
    float x = (VEC[i0][0]+VEC[i1][0])/2;
237
    float y = (VEC[i0][1]+VEC[i1][1])/2;
238
    float z = (VEC[i0][2]+VEC[i1][2])/2;
239

  
240
    return new float[] { x,y,z };
241
    }
242

  
160 243
///////////////////////////////////////////////////////////////////////////////////////////////////
161 244

  
162 245
  public float[][] getCubitPositions(int[] numLayers)
163 246
    {
164 247
    if( mPosition==null )
165 248
      {
166
      float N = numLayers[0];
167
      float AN = N*A;
168
      float BN = N*B;
169
      float CN = N*C;
170
      float DN = N*D;
171
      float EN = N*E;
172
      float FN = N*F;
173
      float HN = N*H;
174

  
175
      mPosition = new float[][]
176
         {
177
             {  0, AN,  0},
178

  
179
             {  0, BN, CN},
180
             { DN, BN, EN},
181
             { FN, BN, HN},
182
             {-FN, BN, HN},
183
             {-DN, BN, EN},
184

  
185
             { DN,-BN,-EN},
186
             { FN,-BN,-HN},
187
             {-FN,-BN,-HN},
188
             {-DN,-BN,-EN},
189
             {  0,-BN,-CN},
190

  
191
             {  0,-AN,  0},
192

  
193
             {  X1*N, Y1*N, Z1*N   },
194
             {  X2*N, Y1*N, Z2*N   },
195
             {     0, Y1*N, Z3*N   },
196
             { -X2*N, Y1*N, Z2*N   },
197
             { -X1*N, Y1*N, Z1*N   },
198

  
199
             {     0,-Y2*N, Z4*N   },
200
             {  X3*N,-Y2*N, Z5*N   },
201
             {  X4*N,-Y2*N, Z6*N   },
202
             { -X4*N,-Y2*N, Z6*N   },
203
             { -X3*N,-Y2*N, Z5*N   },
204

  
205
             {     0, Y2*N,-Z4*N   },
206
             { -X3*N, Y2*N,-Z5*N   },
207
             { -X4*N, Y2*N,-Z6*N   },
208
             {  X4*N, Y2*N,-Z6*N   },
209
             {  X3*N, Y2*N,-Z5*N   },
210

  
211
             { -X1*N,-Y1*N,-Z1*N   },
212
             { -X2*N,-Y1*N,-Z2*N   },
213
             {     0,-Y1*N,-Z3*N   },
214
             {  X2*N,-Y1*N,-Z2*N   },
215
             {  X1*N,-Y1*N,-Z1*N   },
216
         };
249
      int N = numLayers[0];
250

  
251
      int numV = 12;
252
      int perF = N*(N-1)/2;
253
      int numF = 20*perF;
254
      int perE = N-2;
255
      int numE = 30*perE;
256

  
257
      mPosition = new float[numV+numF+numE][];
258

  
259
      for(int v=0; v<12; v++)
260
        mPosition[v] = new float[] { VEC[v][0]*N, VEC[v][1]*N, VEC[v][2]*N };
261

  
262
      float[][] off = new float[perF][];
263
      for(int i=0; i<perF; i++) off[i] = computeOff(i,N);
264

  
265
      for(int f=0; f<20; f++)
266
        {
267
        Static3D vect = TouchControlIcosahedron.FACE_AXIS[f];
268
        float x = vect.get0();
269
        float y = vect.get1();
270
        float z = vect.get2();
271
        boolean inverted = f>=10;
272

  
273
        for(int i=0; i<perF; i++)
274
          mPosition[12+f*perF+i] = createFacePosition(x,y,z,DIST3D*N,inverted,off[i]);
275
        }
276

  
277
      for(int e=0; e<30; e++)
278
        for(int i=0; i<perE; i++)
279
          mPosition[12+20*perF+e*perE+i] = createEdgePosition(e,i,N);
217 280
      }
218 281

  
219 282
    return mPosition;
......
225 288
    {
226 289
    if( mQuatIndex==null )
227 290
      {
228
      mQuatIndex = new int[]
291
      switch( numLayers[0] )
229 292
        {
230
         0,12,5,9,13,8,10,6,7,18,14,55,
231
         0,4,3,2,1, 6,11,32,14,26, 41,27,7,5,10, 35,18,45,33,15
232
        };
293
        case 2: mQuatIndex = new int[]
294
                  {
295
                  0,12,5,9,13,8,14,18,7,6,10,55,
296

  
297
                  0,4,3,2,1,
298
                  6,11,32,14,26,
299
                  41,27,7,5,10,
300
                  35,18,45,33,15
301
                  };
302
                break;
303
        case 3: mQuatIndex = new int[]
304
                  {
305
                  0,12,5,9,13,8,14,18,7,6,10,55,
306

  
307
                  0,52,28,4,44,9,3,31,24,2,13,51,1,8,42,
308
                  21,30,6,16,11,49,54,32,39,48,14,23,37,43,26,
309
                  41,50,46,27,40,34,7,25,17,29,5,12,10,20,53,
310
                  56,38,35,58,22,18,57,47,45,55,36,33,59,19,15,
311

  
312
                  0,4,3,2,1,
313
                  5,20,31,13,8,
314
                  6,16,49,10,39,41,23,27,17,7,
315
                  14,22,30,11,19,
316
                  35,18,45,33,15
317
                  };
318
                break;
319
        }
233 320
      }
234 321

  
235 322
    return mObjectQuats[mQuatIndex[cubit]];
......
239 326

  
240 327
  private float[][] getVertices(int variant)
241 328
    {
329
    float N = getNumLayers()[0];
330

  
242 331
    if( variant==0 )
243 332
      {
244
      float N = getNumLayers()[0];
245
      float X = B-A;
246
      return new float[][] { {0,0,0},{0,X,C},{D,X,E},{F,X,H},{-F,X,H},{-D,X,E},{0,-A*N,0} };
333
      float[] pos = mPosition[0];
334
      float[][] ret = new float[7][];
335
      for(int i=0; i<6; i++) ret[i] = new float[] { VEC[i][0]-pos[0], VEC[i][1]+(N-1)*VEC[0][1]-pos[1], VEC[i][2]-pos[2] };
336
      ret[6] = new float[] { -pos[0], -pos[1], -pos[2] };
337
      return ret;
338
      }
339
    else if( variant==1 )
340
      {
341
      float CX = mPosition[12][0];
342
      float CY = mPosition[12][1];
343
      float CZ = mPosition[12][2];
344

  
345
      float v1x = VEC[0][0]*(N-1)+VEC[2][0]; float v1y = VEC[0][1]*(N-1)+          VEC[2][1]; float v1z = VEC[0][2]*(N-1)+VEC[2][2];
346
      float v2x = VEC[2][0];                 float v2y = VEC[0][1]*(N-2)+VEC[1][1]+VEC[2][1]; float v2z = VEC[1][2]+VEC[2][2];
347
      float v3x = VEC[0][0]*(N-1)+VEC[1][0]; float v3y = VEC[0][1]*(N-1)+VEC[1][1]          ; float v3z = VEC[0][2]*(N-1)+VEC[1][2];
348

  
349
      return new float[][] { { v1x-CX, v1y-CY, v1z-CZ },
350
                             { v2x-CX, v2y-CY, v2z-CZ },
351
                             { v3x-CX, v3y-CY, v3z-CZ },
352
                             {    -CX,    -CY,    -CZ }
353
                           };
247 354
      }
248 355
    else
249 356
      {
250
      float N = getNumLayers()[0];
251
      float CX = X1*N;
252
      float CY = Y1*N;
253
      float CZ = Z1*N;
254

  
255
      return new float[][] { { D-CX, A*(N-1)+  B-CY,   E-CZ },
256
                             { D-CX, A*(N-2)+2*B-CY, C+E-CZ },
257
                             {  -CX, A*(N-1)+  B-CY, C  -CZ },
258
                             {  -CX,            -CY,    -CZ }
357
      float[] pos = mPosition[72];
358

  
359
      float v1x = N*(VEC[0][0] + VEC[0][0] + VEC[1][0])/3; float v1y = N*(VEC[0][1] + VEC[0][1] + VEC[1][1])/3; float v1z = N*(VEC[0][2] + VEC[0][2] + VEC[1][2])/3;
360
      float v2x = N*(VEC[0][0] + VEC[1][0] + VEC[1][0])/3; float v2y = N*(VEC[0][1] + VEC[1][1] + VEC[1][1])/3; float v2z = N*(VEC[0][2] + VEC[1][2] + VEC[1][2])/3;
361
      float v3x = N*(VEC[0][0] + VEC[1][0] + VEC[2][0])/3; float v3y = N*(VEC[0][1] + VEC[1][1] + VEC[2][1])/3; float v3z = N*(VEC[0][2] + VEC[1][2] + VEC[2][2])/3;
362
      float v4x =-N*(VEC[0][0] + VEC[1][0] + VEC[2][0])/3; float v4y = N*(VEC[0][1] + VEC[1][1] + VEC[2][1])/3; float v4z = N*(VEC[0][2] + VEC[1][2] + VEC[2][2])/3;
363

  
364
      return new float[][] { { v1x-pos[0], v1y-pos[1], v1z-pos[2] },
365
                             { v2x-pos[0], v2y-pos[1], v2z-pos[2] },
366
                             { v3x-pos[0], v3y-pos[1], v3z-pos[2] },
367
                             { v4x-pos[0], v4y-pos[1], v4z-pos[2] },
368
                             {    -pos[0],    -pos[1],    -pos[2] }
259 369
                           };
260 370
      }
261 371
    }
......
273 383

  
274 384
      return new ObjectShape(getVertices(variant), indices);
275 385
      }
276
    else
386
    else if( variant==1 )
277 387
      {
278 388
      int[][] indices =
279 389
          {
280 390
              {0,2,1},{0,1,3},{2,0,3},{1,2,3}
281 391
          };
282 392

  
393
      return new ObjectShape(getVertices(variant), indices);
394
      }
395
    else
396
      {
397
      int[][] indices =
398
          {
399
              {0,1,2},{0,3,1},{4,2,1},{4,0,2},{4,3,0},{4,1,3}
400
          };
401

  
283 402
      return new ObjectShape(getVertices(variant), indices);
284 403
      }
285 404
    }
......
296 415
      int[] indices   = { 0,0,0,0,0, 1,1,1,1,1,1 };
297 416
      return new ObjectFaceShape(bands,indices,null);
298 417
      }
299
    else
418
    else if( variant==1 )
300 419
      {
301 420
      float h1 = isInIconMode() ? 0.001f : 0.04f;
302 421
      float h2 = 0.001f;
......
304 423
      int[] indices   = { 0,1,1,1 };
305 424
      return new ObjectFaceShape(bands,indices,null);
306 425
      }
426
    else
427
      {
428
      float h1 = isInIconMode() ? 0.001f : 0.04f;
429
      float h2 = 0.001f;
430
      float[][] bands = { {h1,25,0.2f,0.4f,5,0,0}, {h2,25,0.2f,0.4f,3,0,0} };
431
      int[] indices   = { 0,0,1,1,1,1 };
432
      return new ObjectFaceShape(bands,indices,null);
433
      }
307 434
    }
308 435

  
309 436
///////////////////////////////////////////////////////////////////////////////////////////////////
......
312 439
    {
313 440
    if( variant==0 )
314 441
      {
442
      float[] pos = mPosition[0];
315 443
      float[][] corners  = { {0.04f,0.12f},{0.04f,0.10f} };
316 444
      int[] cornerIndices= { 0,1,1,1,1,1,-1 };
317
      float[][] centers  = { {0,-A/2,0} };
445
      float[][] centers = { { -pos[0]/2, -pos[1]/2, -pos[2]/2} };
318 446
      int[] centerIndices= { 0,0,0,0,0,0,-1 };
319 447
      return FactoryCubit.generateVertexEffect(getVertices(variant),corners,cornerIndices,centers,centerIndices);
320 448
      }
321
    else
449
    else if( variant==1 )
322 450
      {
451
      float[] pos = mPosition[12];
323 452
      float[][] corners = { {0.04f,0.15f} };
324 453
      int[] indices     = { 0,0,0,-1 };
325
      float[][] centers = { {0,Y2/2,-Z4/2} };
454
      float[][] centers = { { -pos[0]/2, -pos[1]/2, -pos[2]/2} };
455
      return FactoryCubit.generateVertexEffect(getVertices(variant),corners,indices,centers,indices);
456
      }
457
    else
458
      {
459
      float[] pos = mPosition[72];
460
      float[][] corners = { {0.04f,0.15f} };
461
      int[] indices     = { 0,0,0,0,-1 };
462
      float[][] centers = { { -pos[0]/2, -pos[1]/2, -pos[2]/2} };
326 463
      return FactoryCubit.generateVertexEffect(getVertices(variant),corners,indices,centers,indices);
327 464
      }
328 465
    }
src/main/java/org/distorted/objectlib/touchcontrol/TouchControlIcosahedron.java
27 27
                                        DIST3D,DIST3D,DIST3D,DIST3D,DIST3D,
28 28
                                        DIST3D,DIST3D,DIST3D,DIST3D,DIST3D };
29 29

  
30
  // topmost vertex (0,A,0) and 3 vertices from the second-topmost-layer, front one and two ones
31
  // to the right: (0,B,C) , (D,B,E) , (F,B,H)
30
  // VEC_0: topmost one. Then 3 vertices from the second-topmost-layer,
31
  // front one and two ones to the right.
32 32

  
33 33
  private static final float Z = (float)Math.sqrt(5+SQ5);
34 34

  
35
  private static final float A = Z*(SQ2/4);
36
  private static final float B = Z*(SQ2*SQ5/20);
37
  private static final float C = Z*(SQ2*SQ5/10);
38
  private static final float D = (SQ5+1)/4;
39
  private static final float E = Z*(SQ5-1)/(4*SQ2*SQ5);
40
  private static final float F = 0.5f;
41
  private static final float H =-Z*(SQ5+1)/(4*SQ2*SQ5);
42

  
43
  private static final float X1 = D/3;
44
  private static final float X2 = (D+F)/3;
45
  private static final float X3 = (2*D+F)/3;
46
  private static final float X4 = (D+F)/3;
47
  private static final float Y1 = (A+2*B)/3;
48
  private static final float Y2 = B/3;
49
  private static final float Z1 = (C+E)/3;
50
  private static final float Z2 = (E+H)/3;
51
  private static final float Z3 = 2*H/3;
52
  private static final float Z4 = (C-2*H)/3;
53
  private static final float Z5 = -H/3;
54
  private static final float Z6 = (H-C-E)/3;
35
  private static final float VEC_0_X = 0;
36
  private static final float VEC_0_Y = Z*(SQ2/4);
37
  private static final float VEC_0_Z = 0;
38

  
39
  private static final float VEC_1_X = 0;
40
  private static final float VEC_1_Y = Z*(SQ2*SQ5/20);
41
  private static final float VEC_1_Z = Z*(SQ2*SQ5/10);
42

  
43
  private static final float VEC_2_X = (SQ5+1)/4;
44
  private static final float VEC_2_Y = Z*(SQ2*SQ5/20);
45
  private static final float VEC_2_Z = Z*(SQ5-1)/(4*SQ2*SQ5);
46

  
47
  private static final float VEC_3_X = 0.5f;
48
  private static final float VEC_3_Y = Z*(SQ2*SQ5/20);
49
  private static final float VEC_3_Z =-Z*(SQ5+1)/(4*SQ2*SQ5);
50

  
51
  private static final float X1 = VEC_2_X/3;
52
  private static final float X2 = (VEC_2_X + VEC_3_X)/3;
53
  private static final float X3 = (2*VEC_2_X + VEC_3_X)/3;
54
  private static final float X4 = (VEC_2_X + VEC_3_X)/3;
55
  private static final float Y1 = (VEC_0_Y + 2*VEC_1_Y)/3;
56
  private static final float Y2 = VEC_1_Y/3;
57
  private static final float Z1 = (VEC_1_Z + VEC_2_Z)/3;
58
  private static final float Z2 = (VEC_2_Z + VEC_3_Z)/3;
59
  private static final float Z3 = 2*VEC_3_Z/3;
60
  private static final float Z4 = (VEC_1_Z - 2*VEC_3_Z)/3;
61
  private static final float Z5 = -VEC_3_Z/3;
62
  private static final float Z6 = (VEC_3_Z - VEC_1_Z - VEC_2_Z)/3;
63

  
64
  public static final float[][] VEC = new float[][]
65
        {
66
            { VEC_0_X, VEC_0_Y, VEC_0_Z},
67

  
68
            { VEC_1_X, VEC_1_Y, VEC_1_Z},
69
            { VEC_2_X, VEC_2_Y, VEC_2_Z},
70
            { VEC_3_X, VEC_3_Y, VEC_3_Z},
71
            {-VEC_3_X, VEC_3_Y, VEC_3_Z},
72
            {-VEC_2_X, VEC_2_Y, VEC_2_Z},
73

  
74
            {-VEC_1_X,-VEC_1_Y,-VEC_1_Z},
75
            {-VEC_2_X,-VEC_2_Y,-VEC_2_Z},
76
            {-VEC_3_X,-VEC_3_Y,-VEC_3_Z},
77
            { VEC_3_X,-VEC_3_Y,-VEC_3_Z},
78
            { VEC_2_X,-VEC_2_Y,-VEC_2_Z},
79

  
80
            {-VEC_0_X,-VEC_0_Y,-VEC_0_Z},
81
        };
82

  
83
  public static final int[][] EDGE_INDICES = new int[][]
84
        {
85
            {0,1}, {0,2}, {0,3}, {0,4}, {0,5},
86
            {1,2}, {2,3}, {3,4}, {4,5}, {5,1},
87
            {1,9}, {9,2}, {2,10}, {10,3}, {3,6}, {6,4}, {4,7}, {7,5}, {5,8}, {8,1},
88
            {6,7}, {7,8}, {8,9}, {9,10}, {10,6},
89
            {11,6}, {11,7}, {11,8}, {11,9}, {11,10}
90
        };
55 91

  
56 92
  public static final Static3D[] FACE_AXIS = new Static3D[]
57 93
         {
58 94
           new Static3D(    X1/DIST3D, Y1/DIST3D, Z1/DIST3D   ),
59 95
           new Static3D(    X2/DIST3D, Y1/DIST3D, Z2/DIST3D   ),
60
           new Static3D(  0.0f/DIST3D, Y1/DIST3D, Z3/DIST3D   ),
96
           new Static3D(     0/DIST3D, Y1/DIST3D, Z3/DIST3D   ),
61 97
           new Static3D(   -X2/DIST3D, Y1/DIST3D, Z2/DIST3D   ),
62 98
           new Static3D(   -X1/DIST3D, Y1/DIST3D, Z1/DIST3D   ),
63 99

  
64
           new Static3D(  0.0f/DIST3D,-Y2/DIST3D, Z4/DIST3D   ),
100
           new Static3D(     0/DIST3D,-Y2/DIST3D, Z4/DIST3D   ),
65 101
           new Static3D(    X3/DIST3D,-Y2/DIST3D, Z5/DIST3D   ),
66 102
           new Static3D(    X4/DIST3D,-Y2/DIST3D, Z6/DIST3D   ),
67 103
           new Static3D(   -X4/DIST3D,-Y2/DIST3D, Z6/DIST3D   ),
68 104
           new Static3D(   -X3/DIST3D,-Y2/DIST3D, Z5/DIST3D   ),
69 105

  
70
           new Static3D(  0.0f/DIST3D, Y2/DIST3D,-Z4/DIST3D   ),
106
           new Static3D(     0/DIST3D, Y2/DIST3D,-Z4/DIST3D   ),
71 107
           new Static3D(   -X3/DIST3D, Y2/DIST3D,-Z5/DIST3D   ),
72 108
           new Static3D(   -X4/DIST3D, Y2/DIST3D,-Z6/DIST3D   ),
73 109
           new Static3D(    X4/DIST3D, Y2/DIST3D,-Z6/DIST3D   ),
......
75 111

  
76 112
           new Static3D(   -X1/DIST3D,-Y1/DIST3D,-Z1/DIST3D   ),
77 113
           new Static3D(   -X2/DIST3D,-Y1/DIST3D,-Z2/DIST3D   ),
78
           new Static3D(  0.0f/DIST3D,-Y1/DIST3D,-Z3/DIST3D   ),
114
           new Static3D(     0/DIST3D,-Y1/DIST3D,-Z3/DIST3D   ),
79 115
           new Static3D(    X2/DIST3D,-Y1/DIST3D,-Z2/DIST3D   ),
80 116
           new Static3D(    X1/DIST3D,-Y1/DIST3D,-Z1/DIST3D   ),
81 117
         };

Also available in: Unified diff