Project

General

Profile

« Previous | Next » 

Revision 846b69f3

Added by Leszek Koltunski over 2 years ago

Preparation for drawing only the FRONT side of the cubit walls.

View differences:

src/main/java/org/distorted/objectlib/helpers/FactoryCubit.java
50 50
  private static final float[] mQuat1  = new float[4];
51 51
  private static final float[] mQuat2  = new float[4];
52 52
  private static final float[] mQuat3  = new float[4];
53
  private static final float[] mQuat4  = new float[4];
54 53

  
55 54
  public static class StickerCoords
56 55
    {
......
68 67
    float vx,vy,vz;
69 68
    float scale;
70 69
    float qx,qy,qz,qw;
71
    boolean flip;
72 70
    }
73 71

  
74 72
  private static final ArrayList<FaceTransform> mNewFaceTransf = new ArrayList<>();
......
243 241
    mStickerCoords.add(sInfo);
244 242

  
245 243
    info.sticker = mStickerCoords.size() -1;
246
    info.flip = false;
247 244
    }
248 245

  
249 246
///////////////////////////////////////////////////////////////////////////////////////////////////
......
398 395

  
399 396
///////////////////////////////////////////////////////////////////////////////////////////////////
400 397

  
401
  private int computeRotatedIndex(int oldVertex, int len, int rotatedVertex, boolean inverted)
398
  private int computeRotatedIndex(int oldVertex, int len, int rotatedVertex)
402 399
    {
403
    int v = (rotatedVertex + (inverted? -oldVertex : oldVertex));
400
    int v = (rotatedVertex + oldVertex);
404 401
    if( v>=len ) v-=len;
405 402
    if( v< 0   ) v+=len;
406 403

  
......
409 406

  
410 407
///////////////////////////////////////////////////////////////////////////////////////////////////
411 408

  
412
  private boolean isScaledVersionOf(float[] newVert, float[] oldVert, int len, int vertex, boolean inverted)
409
  private boolean isScaledVersionOf(float[] newVert, float[] oldVert, int len, int vertex)
413 410
    {
414
    int newZeroIndex = computeRotatedIndex(0,len,vertex,inverted);
411
    int newZeroIndex = computeRotatedIndex(0,len,vertex);
415 412
    float EPSILON = 0.001f;
416 413
    float scale = computeScale(newVert,oldVert,newZeroIndex,0);
417 414

  
418 415
    for(int i=1; i<len; i++)
419 416
      {
420
      int index = computeRotatedIndex(i,len,vertex,inverted);
417
      int index = computeRotatedIndex(i,len,vertex);
421 418

  
422 419
      float horz = oldVert[2*i  ] - scale*newVert[2*index  ];
423 420
      float vert = oldVert[2*i+1] - scale*newVert[2*index+1];
......
441 438

  
442 439
///////////////////////////////////////////////////////////////////////////////////////////////////
443 440

  
444
  private void correctInfo(FaceTransform info, float scale, float sin, float cos, int oldSticker, boolean flip)
441
  private void correctInfo(FaceTransform info, float scale, float sin, float cos, int oldSticker)
445 442
    {
446 443
    mStickerCoords.remove(info.sticker);
447 444

  
448
    info.flip    = flip;
449 445
    info.sticker = oldSticker;
450 446
    info.scale  *= scale;
451 447

  
......
457 453
    float sinHalf = computeSinHalf(cos);
458 454
    float cosHalf = computeCosHalf(sin,cos);
459 455

  
460
    if( flip )
461
      {
462
      mQuat3[0] = 1.0f;
463
      mQuat3[1] = 0.0f;
464
      mQuat3[2] = 0.0f;
465
      mQuat3[3] = 0.0f;
466

  
467
      mQuat4[0] = 0.0f;
468
      mQuat4[1] = 0.0f;
469
      mQuat4[2] = sinHalf;
470
      mQuat4[3] = cosHalf;
471

  
472
      QuatHelper.quatMultiply( mQuat2, mQuat3, mQuat4 );
473
      }
474
    else
475
      {
476
      mQuat2[0] = 0.0f;
477
      mQuat2[1] = 0.0f;
478
      mQuat2[2] = sinHalf;
479
      mQuat2[3] = cosHalf;
480
      }
456
    mQuat2[0] = 0.0f;
457
    mQuat2[1] = 0.0f;
458
    mQuat2[2] = sinHalf;
459
    mQuat2[3] = cosHalf;
481 460

  
482 461
    QuatHelper.quatMultiply( mQuat3, mQuat1, mQuat2 );
483 462

  
......
505 484
///////////////////////////////////////////////////////////////////////////////////////////////////
506 485

  
507 486
  private boolean foundVertex(FaceTransform info, float[] buffer, int len, float[] newVert,
508
                              float[] oldVert, float lenFirstOld, int oldSticker, boolean inverted)
487
                              float[] oldVert, float lenFirstOld, int oldSticker)
509 488
    {
510 489
    for(int vertex=0; vertex<len; vertex++)
511 490
      {
......
517 496

  
518 497
      rotateAllVertices(buffer,len,newVert,sin,cos);
519 498

  
520
      if( isScaledVersionOf(buffer,oldVert,len,vertex,inverted) )
499
      if( isScaledVersionOf(buffer,oldVert,len,vertex) )
521 500
        {
522
        int newZeroIndex = computeRotatedIndex(0,len,vertex,inverted);
501
        int newZeroIndex = computeRotatedIndex(0,len,vertex);
523 502
        float scale = computeScale(oldVert,newVert,0,newZeroIndex);
524
        correctInfo(info,scale,sin,cos,oldSticker,inverted);
503
        correctInfo(info,scale,sin,cos,oldSticker);
525 504
        return true;
526 505
        }
527 506
      }
......
578 557
      int oldSticker = oldInfo.sticker;
579 558
      float[] buffer1 = new float[oldLen];
580 559
      float lenFirstOld = (float)Math.sqrt(oldVert[0]*oldVert[0] + oldVert[1]*oldVert[1]);
581
      if( foundVertex(newInfo, buffer1, oldLen/2, newVert, oldVert, lenFirstOld, oldSticker, false) )
582
        {
583
        if( sNewInfo.outer ) sOldInfo.outer = true;
584
        return true;
585
        }
586
      float[] buffer2 = new float[oldLen];
587
      mirrorAllVertices(buffer2, newLen/2, newVert);
588
      if( foundVertex(newInfo, buffer1, oldLen/2, buffer2, oldVert, lenFirstOld, oldSticker, true ) )
560
      if( foundVertex(newInfo, buffer1, oldLen/2, newVert, oldVert, lenFirstOld, oldSticker) )
589 561
        {
590 562
        if( sNewInfo.outer ) sOldInfo.outer = true;
591 563
        return true;
......
661 633
  private void printTransform(FaceTransform f)
662 634
    {
663 635
    android.util.Log.e("D", "face="+f.face+" q=("+f.qx+", "+f.qy+", "+f.qz+", "+f.qw+") v=("
664
                       +f.vx+", "+f.vy+", "+f.vz+") scale="+f.scale+" sticker="+f.sticker+" flip="+f.flip);
636
                       +f.vx+", "+f.vy+", "+f.vz+") scale="+f.scale+" sticker="+f.sticker);
665 637
    }
666 638

  
667 639
///////////////////////////////////////////////////////////////////////////////////////////////////
......
1096 1068
      float qz = fInfo.qz;
1097 1069
      float qw = fInfo.qw;
1098 1070

  
1099
      Static3D scale = new Static3D(sc,sc, fInfo.flip ? -sc : sc);
1071
      Static3D scale = new Static3D(sc,sc,sc);
1100 1072
      Static3D move3D= new Static3D(vx,vy,vz);
1101 1073
      Static4D quat  = new Static4D(qx,qy,qz,qw);
1102 1074

  

Also available in: Unified diff