Project

General

Profile

« Previous | Next » 

Revision 1585ba24

Added by Leszek Koltunski over 5 years ago

Make the Fragment effects truly 3D: change their 4D 'region' into a 3D 'center' (a point in 3D) and 3D 'region' (which is now a set of 3 radii defining an ellipsoid around the center)

Also corresponding changes to the applications.

View differences:

src/main/java/org/distorted/examples/effects3d/Effects3DEffect.java
76 76
  private int[] mSeekID;
77 77
  private int[] mSeekRegionID;
78 78
  private int[] mSeekCenterID;
79
  private int mDimension;
79
  private int mDimension, mRegionDimension;
80 80
  private TextView mText,mTextRegion,mTextCenter;
81 81

  
82 82
  private Dynamic1D mDyn1;
......
89 89
  private Static3D  mSta3;
90 90
  private Static4D  mSta4;
91 91
  private Static5D  mSta5;
92
  private Dynamic4D mRegionDyn;
93
  private Static4D  mRegionSta;
92
  private Dynamic4D mRegion4Dyn;
93
  private Static4D  mRegion4Sta;
94
  private Dynamic3D mRegion3Dyn;
95
  private Static3D  mRegion3Sta;
94 96
  private Dynamic3D mCenterDyn;
95 97
  private Static3D  mCenterSta;
96 98

  
......
147 149
      case SCALE            : effect = new MatrixEffectScale       (mDyn3)            ; break;
148 150
      case SHEAR            : effect = new MatrixEffectShear       (mDyn3, mCenterDyn); break;
149 151

  
150
      case DISTORT          : effect = new VertexEffectDistort     (mDyn3, mCenterDyn, mRegionDyn); break;
151
      case DEFORM           : effect = new VertexEffectDeform      (mDyn3, mCenterDyn, mRegionDyn); break;
152
      case SINK             : effect = new VertexEffectSink        (mDyn1, mCenterDyn, mRegionDyn); break;
153
      case PINCH            : effect = new VertexEffectPinch       (mDyn2, mCenterDyn, mRegionDyn); break;
154
      case SWIRL            : effect = new VertexEffectSwirl       (mDyn1, mCenterDyn, mRegionDyn); break;
155
      case WAVE             : effect = new VertexEffectWave        (mDyn5, mCenterDyn, mRegionDyn); break;
156

  
157
      case ALPHA            : effect = new FragmentEffectAlpha     (mDyn1,        mRegionDyn, false); break;
158
      case SMOOTH_ALPHA     : effect = new FragmentEffectAlpha     (mDyn1,        mRegionDyn, true ); break;
159
      case CHROMA           : effect = new FragmentEffectChroma    (mDyn1, mDyn3, mRegionDyn, false); break;
160
      case SMOOTH_CHROMA    : effect = new FragmentEffectChroma    (mDyn1, mDyn3, mRegionDyn, true ); break;
161
      case BRIGHTNESS       : effect = new FragmentEffectBrightness(mDyn1,        mRegionDyn, false); break;
162
      case SMOOTH_BRIGHTNESS: effect = new FragmentEffectBrightness(mDyn1,        mRegionDyn, true ); break;
163
      case SATURATION       : effect = new FragmentEffectSaturation(mDyn1,        mRegionDyn, false); break;
164
      case SMOOTH_SATURATION: effect = new FragmentEffectSaturation(mDyn1,        mRegionDyn, true ); break;
165
      case CONTRAST         : effect = new FragmentEffectContrast  (mDyn1,        mRegionDyn, false); break;
166
      case SMOOTH_CONTRAST  : effect = new FragmentEffectContrast  (mDyn1,        mRegionDyn, true ); break;
152
      case DISTORT          : effect = new VertexEffectDistort     (mDyn3, mCenterDyn, mRegion4Dyn); break;
153
      case DEFORM           : effect = new VertexEffectDeform      (mDyn3, mCenterDyn, mRegion4Dyn); break;
154
      case SINK             : effect = new VertexEffectSink        (mDyn1, mCenterDyn, mRegion4Dyn); break;
155
      case PINCH            : effect = new VertexEffectPinch       (mDyn2, mCenterDyn, mRegion4Dyn); break;
156
      case SWIRL            : effect = new VertexEffectSwirl       (mDyn1, mCenterDyn, mRegion4Dyn); break;
157
      case WAVE             : effect = new VertexEffectWave        (mDyn5, mCenterDyn, mRegion4Dyn); break;
158

  
159
      case ALPHA            : effect = new FragmentEffectAlpha     (mDyn1,        mCenterDyn, mRegion3Dyn, false); break;
160
      case SMOOTH_ALPHA     : effect = new FragmentEffectAlpha     (mDyn1,        mCenterDyn, mRegion3Dyn, true ); break;
161
      case CHROMA           : effect = new FragmentEffectChroma    (mDyn1, mDyn3, mCenterDyn, mRegion3Dyn, false); break;
162
      case SMOOTH_CHROMA    : effect = new FragmentEffectChroma    (mDyn1, mDyn3, mCenterDyn, mRegion3Dyn, true ); break;
163
      case BRIGHTNESS       : effect = new FragmentEffectBrightness(mDyn1,        mCenterDyn, mRegion3Dyn, false); break;
164
      case SMOOTH_BRIGHTNESS: effect = new FragmentEffectBrightness(mDyn1,        mCenterDyn, mRegion3Dyn, true ); break;
165
      case SATURATION       : effect = new FragmentEffectSaturation(mDyn1,        mCenterDyn, mRegion3Dyn, false); break;
166
      case SMOOTH_SATURATION: effect = new FragmentEffectSaturation(mDyn1,        mCenterDyn, mRegion3Dyn, true ); break;
167
      case CONTRAST         : effect = new FragmentEffectContrast  (mDyn1,        mCenterDyn, mRegion3Dyn, false); break;
168
      case SMOOTH_CONTRAST  : effect = new FragmentEffectContrast  (mDyn1,        mCenterDyn, mRegion3Dyn, true ); break;
167 169

  
168 170
      case BLUR             : effect = new PostprocessEffectBlur   (mDyn1       ); break;
169 171
      case GLOW             : effect = new PostprocessEffectGlow   (mDyn1, mDyn4); break;
......
401 403
    float z = (mInterRegion[2]-deduct)*factorX;   // ??
402 404
    float r =  mInterRegion[3]        *(factorX+factorY)/2;
403 405

  
404
    mRegionSta.set(x,y,z,r);
406
    mRegion4Sta.set(x,y,z,r);
407
    mRegion3Sta.set(x,y,z);
405 408
    }
406 409

  
407 410
///////////////////////////////////////////////////////////////////////////////////////////////////
......
418 421

  
419 422
  private void setRegionText()
420 423
    {
421
    int f0 = (int)mRegionSta.get1();
422
    int f1 = (int)mRegionSta.get2();
423
    int f2 = (int)mRegionSta.get3();
424
    int f3 = (int)mRegionSta.get4();
424
    if( mRegionDimension==4 )
425
      {
426
      int f0 = (int) mRegion4Sta.get1();
427
      int f1 = (int) mRegion4Sta.get2();
428
      int f2 = (int) mRegion4Sta.get3();
429
      int f3 = (int) mRegion4Sta.get4();
430

  
431
      mTextRegion.setText("region (" + f0 + "," + f1 + "," + f2 + "," + f3 + ")");
432
      }
425 433

  
426
    mTextRegion.setText("region ("+f0+","+f1+","+f2+","+f3+")");
434
    if( mRegionDimension==3 )
435
      {
436
      int f0 = (int) mRegion3Sta.get1();
437
      int f1 = (int) mRegion3Sta.get2();
438
      int f2 = (int) mRegion3Sta.get3();
439

  
440
      mTextRegion.setText("region (" + f0 + "," + f1 + "," + f2 + ")");
441
      }
427 442
    }
428 443

  
429 444
///////////////////////////////////////////////////////////////////////////////////////////////////
......
455 470
    mSta4 = null;
456 471
    mSta5 = null;
457 472

  
458
    mDimension = mName.getDimension();
473
    mDimension = mName.getEffectDimension();
474
    mRegionDimension = mName.getRegionDimension();
459 475

  
460 476
    switch(mDimension)
461 477
      {
......
511 527

  
512 528
    mInterRegion = new int[4];
513 529
    mSeekRegionID= new int[4];
514
    mRegionDyn   = new Dynamic4D();
515
    mRegionSta   = new Static4D(0,0,0,0);
516
    mRegionDyn.add(mRegionSta);
530
    mRegion4Dyn  = new Dynamic4D();
531
    mRegion4Sta  = new Static4D(0,0,0,0);
532
    mRegion4Dyn.add(mRegion4Sta);
533
    mRegion3Dyn  = new Dynamic3D();
534
    mRegion3Sta  = new Static3D(0,0,0);
535
    mRegion3Dyn.add(mRegion3Sta);
517 536

  
518 537
    mInterCenter = new int[3];
519 538
    mSeekCenterID= new int[3];
......
610 629
    {
611 630
    Effects3DActivity2 act = mAct.get();
612 631

  
613
    mRegion = act.getLayoutInflater().inflate(R.layout.effectregion, null);
614
    mRegion.setBackgroundColor( num%2==1 ? BACKGROUND_EVEN: BACKGROUND_ODD );
632
    if( mRegionDimension== 4 )
633
      {
634
      mRegion = act.getLayoutInflater().inflate(R.layout.effectregion4, null);
635
      mRegion.setBackgroundColor(num % 2 == 1 ? BACKGROUND_EVEN : BACKGROUND_ODD);
615 636

  
616
    SeekBar[] seek = new SeekBar[4];
637
      SeekBar[] seek = new SeekBar[4];
617 638

  
618
    seek[0] = mRegion.findViewById(R.id.effectRegionBarX );
619
    seek[1] = mRegion.findViewById(R.id.effectRegionBarY );
620
    seek[2] = mRegion.findViewById(R.id.effectRegionBarRX);
621
    seek[3] = mRegion.findViewById(R.id.effectRegionBarRY);
639
      seek[0] = mRegion.findViewById(R.id.effectRegion4BarX);
640
      seek[1] = mRegion.findViewById(R.id.effectRegion4BarY);
641
      seek[2] = mRegion.findViewById(R.id.effectRegion4BarZ);
642
      seek[3] = mRegion.findViewById(R.id.effectRegion4BarR);
622 643

  
623
    mSeekRegionID[0] = seek[0].getId();
624
    mSeekRegionID[1] = seek[1].getId();
625
    mSeekRegionID[2] = seek[2].getId();
626
    mSeekRegionID[3] = seek[3].getId();
644
      mSeekRegionID[0] = seek[0].getId();
645
      mSeekRegionID[1] = seek[1].getId();
646
      mSeekRegionID[2] = seek[2].getId();
647
      mSeekRegionID[3] = seek[3].getId();
627 648

  
628
    mTextRegion = mRegion.findViewById(R.id.effectRegionText);
649
      mTextRegion = mRegion.findViewById(R.id.effectRegion4Text);
629 650

  
630
    setDefaultRegionInter();
651
      setDefaultRegionInter();
631 652

  
632
    for(int i=0; i<4; i++)
633
      {
634
      seek[i].setOnSeekBarChangeListener(this);
635
      seek[i].setProgress( mInterRegion[i] );
653
      for (int i = 0; i < 4; i++)
654
        {
655
        seek[i].setOnSeekBarChangeListener(this);
656
        seek[i].setProgress(mInterRegion[i]);
657
        }
658

  
659
      act.setRegion(mRegion4Sta.get1(), mRegion4Sta.get2(), mRegion4Sta.get3(), mRegion4Sta.get4());
636 660
      }
661
    else
662
      {
663
      mRegion = act.getLayoutInflater().inflate(R.layout.effectregion3, null);
664
      mRegion.setBackgroundColor(num % 2 == 1 ? BACKGROUND_EVEN : BACKGROUND_ODD);
665

  
666
      SeekBar[] seek = new SeekBar[3];
667

  
668
      seek[0] = mRegion.findViewById(R.id.effectRegion3BarRX);
669
      seek[1] = mRegion.findViewById(R.id.effectRegion3BarRY);
670
      seek[2] = mRegion.findViewById(R.id.effectRegion3BarRZ);
671

  
672
      mSeekRegionID[0] = seek[0].getId();
673
      mSeekRegionID[1] = seek[1].getId();
674
      mSeekRegionID[2] = seek[2].getId();
675

  
676
      mTextRegion = mRegion.findViewById(R.id.effectRegion3Text);
637 677

  
638
    act.setRegion(mRegionSta.get1(),mRegionSta.get2(),mRegionSta.get3(), mRegionSta.get4() );
678
      setDefaultRegionInter();
679

  
680
      for (int i = 0; i < 3; i++)
681
        {
682
        seek[i].setOnSeekBarChangeListener(this);
683
        seek[i].setProgress(mInterRegion[i]);
684
        }
685

  
686
      act.setRegion(mRegion3Sta.get1(), mRegion3Sta.get2(), mRegion3Sta.get3(), 1.0f );
687
      }
639 688

  
640 689
    return mRegion;
641 690
    }
......
709 758
      setText();
710 759
      }
711 760

  
712
    if( bar.getId() == mSeekRegionID[0] )
761
    if( mRegionDimension>=1 && bar.getId() == mSeekRegionID[0] )
713 762
      {
714 763
      mInterRegion[0] = progress;
715 764
      fillRegionStatics();
716 765
      setRegionText();
717 766
      }
718
    if( bar.getId() == mSeekRegionID[1] )
767
    if( mRegionDimension>=2 && bar.getId() == mSeekRegionID[1] )
719 768
      {
720 769
      mInterRegion[1] = progress;
721 770
      fillRegionStatics();
722 771
      setRegionText();
723 772
      }
724
    if( bar.getId() == mSeekRegionID[2] )
773
    if( mRegionDimension>=3 && bar.getId() == mSeekRegionID[2] )
725 774
      {
726 775
      mInterRegion[2] = progress;
727 776
      fillRegionStatics();
728 777
      setRegionText();
729 778
      }
730
    if( bar.getId() == mSeekRegionID[3] )
779
    if( mRegionDimension>=4 && bar.getId() == mSeekRegionID[3] )
731 780
      {
732 781
      mInterRegion[3] = progress;
733 782
      fillRegionStatics();
......
765 814
      view.getRenderer().showRegionAndCenter( showR,showC );
766 815

  
767 816
      act.setCenter(mCenterSta.get1(),mCenterSta.get2(),mCenterSta.get3());
768
      act.setRegion(mRegionSta.get1(),mRegionSta.get2(),mRegionSta.get3(), mRegionSta.get4());
817
      act.setRegion(mRegion4Sta.get1(),mRegion4Sta.get2(),mRegion4Sta.get3(), mRegion4Sta.get4());
769 818
      }
770 819
    }
771 820

  

Also available in: Unified diff