Revision 1585ba24
Added by Leszek Koltunski over 5 years ago
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
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.