Revision 334c13fa
Added by Leszek Koltunski over 7 years ago
src/main/java/org/distorted/examples/matrix3d/Matrix3DEffect.java | ||
---|---|---|
59 | 59 |
private Dynamic1D mDyn1; |
60 | 60 |
private Dynamic2D mDyn2; |
61 | 61 |
private Dynamic3D mDyn3; |
62 |
private Dynamic4D mDyn4; |
|
62 | 63 |
private Dynamic5D mDyn5; |
63 | 64 |
private Static1D mSta1; |
64 | 65 |
private Static2D mSta2; |
65 | 66 |
private Static3D mSta3; |
67 |
private Static4D mSta4; |
|
66 | 68 |
private Static5D mSta5; |
67 | 69 |
private Dynamic4D mRegionDyn; |
68 | 70 |
private Static4D mRegionSta; |
69 |
private Dynamic2D mCenterDyn;
|
|
70 |
private Static2D mCenterSta;
|
|
71 |
private Dynamic3D mCenterDyn;
|
|
72 |
private Static3D mCenterSta;
|
|
71 | 73 |
|
72 | 74 |
private View mButton, mEffect, mCenter, mRegion; |
73 | 75 |
private long mId; |
... | ... | |
79 | 81 |
{ |
80 | 82 |
switch(mName) |
81 | 83 |
{ |
82 |
case ROTATE : break;//object.rotate (mDyn4, mCenterDyn); break;
|
|
83 |
case QUATERNION : break;//object.quaternion(mDyn4, mCenterDyn); break;
|
|
84 |
case MOVE : object.move (mDyn3) ; break;
|
|
85 |
case SCALE : object.scale (mDyn3) ; break;
|
|
86 |
case SHEAR : break;//object.shear (mDyn3, mCenterDyn); break;
|
|
84 |
case ROTATE : mId = object.rotate (mDyn4, mCenterDyn); break;
|
|
85 |
case QUATERNION : mId = object.quaternion(mDyn4, mCenterDyn); break;
|
|
86 |
case MOVE : mId = object.move (mDyn3) ; break;
|
|
87 |
case SCALE : mId = object.scale (mDyn3) ; break;
|
|
88 |
case SHEAR : mId = object.shear (mDyn3, mCenterDyn); break;
|
|
87 | 89 |
|
88 | 90 |
case DISTORT: mId = object.distort(mDyn3, mCenterDyn, mRegionDyn); break; |
89 | 91 |
case DEFORM : mId = object.deform (mDyn3, mCenterDyn ); break; |
... | ... | |
113 | 115 |
{ |
114 | 116 |
switch(mName) |
115 | 117 |
{ |
116 |
case ROTATE : |
|
118 |
case ROTATE : float an = (mInter[0]-50)*180/50; |
|
119 |
float rx = (mInter[1]-50)/ 50.0f; |
|
120 |
float ry = (mInter[2]-50)/ 50.0f; |
|
121 |
float rz = (mInter[3]-50)/ 50.0f; |
|
122 |
mSta4.set(an,rx,ry,rz); |
|
117 | 123 |
break; |
118 | 124 |
case QUATERNION : |
119 | 125 |
break; |
120 |
case MOVE : float lm = mAct.get().getWidth()/50.0f; |
|
121 |
float xm = (mInter[0]-50)*lm; |
|
122 |
float ym = (mInter[1]-50)*lm; |
|
123 |
float zm = (mInter[2]-50)*lm; |
|
126 |
case MOVE : float sw = mAct.get().getScreenWidth()/50.0f; |
|
127 |
float sh = mAct.get().getScreenWidth()/50.0f; |
|
128 |
float xm = (mInter[0]-50)*sw; |
|
129 |
float ym = (mInter[1]-50)*sh; |
|
130 |
float zm = (mInter[2]-50)*(sw+sh)/2; |
|
124 | 131 |
mSta3.set(xm,ym,zm); |
125 | 132 |
break; |
126 |
case SCALE : float xs = (mInter[0])/50.0f;
|
|
127 |
float ys = (mInter[1])/50.0f;
|
|
128 |
float zs = (mInter[2])/50.0f;
|
|
133 |
case SCALE : float xs = (mInter[0]>50 ? 0.18f : 0.018f)*(mInter[0]-50) + 1;
|
|
134 |
float ys = (mInter[1]>50 ? 0.18f : 0.018f)*(mInter[1]-50) + 1;
|
|
135 |
float zs = (mInter[2]>50 ? 0.18f : 0.018f)*(mInter[2]-50) + 1;
|
|
129 | 136 |
mSta3.set(xs,ys,zs); |
130 | 137 |
break; |
131 |
case SHEAR : |
|
138 |
case SHEAR : float xsh = (mInter[0]-50)/25.0f; |
|
139 |
float ysh = (mInter[1]-50)/25.0f; |
|
140 |
float zsh = (mInter[2]-50)/25.0f; |
|
141 |
mSta3.set(xsh,ysh,zsh); |
|
132 | 142 |
break; |
133 | 143 |
case DISTORT : |
134 | 144 |
case DEFORM : float ld = mAct.get().getWidth()/50.0f; |
... | ... | |
179 | 189 |
case 2: mInter[1] = 50; |
180 | 190 |
case 1: mInter[0] = 50; |
181 | 191 |
} |
192 |
|
|
193 |
if( mName==EffectNames.ROTATE ) mInter[1]= 100; |
|
182 | 194 |
} |
183 | 195 |
|
184 | 196 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
... | ... | |
208 | 220 |
text += " ("+f1+","+f2+","+f3+")"; |
209 | 221 |
} |
210 | 222 |
|
223 |
if( mSta4 !=null ) |
|
224 |
{ |
|
225 |
float f1 = ((int)(mSta4.getX()*100))/100.0f; |
|
226 |
float f2 = ((int)(mSta4.getY()*100))/100.0f; |
|
227 |
float f3 = ((int)(mSta4.getZ()*100))/100.0f; |
|
228 |
float f4 = ((int)(mSta4.getW()*100))/100.0f; |
|
229 |
text += " ("+f1+","+f2+","+f3+","+f4+")"; |
|
230 |
} |
|
231 |
|
|
211 | 232 |
if( mSta5 !=null ) |
212 | 233 |
{ |
213 | 234 |
float f1 = ((int)(mSta5.getX()*100))/100.0f; |
... | ... | |
229 | 250 |
|
230 | 251 |
float x = (mInterCenter[0]*0.012f - 0.1f)*act.getWidth(); |
231 | 252 |
float y = (mInterCenter[1]*0.012f - 0.1f)*act.getHeight(); |
232 |
mCenterSta.set(x,y); |
|
253 |
float z = (mInterCenter[2]*0.012f - 0.1f)*act.getDepth(); |
|
254 |
|
|
255 |
mCenterSta.set(x,y,z); |
|
233 | 256 |
} |
234 | 257 |
|
235 | 258 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
... | ... | |
238 | 261 |
{ |
239 | 262 |
mInterCenter[0] = 50; |
240 | 263 |
mInterCenter[1] = 50; |
264 |
mInterCenter[2] = 50; |
|
241 | 265 |
} |
242 | 266 |
|
243 | 267 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
... | ... | |
246 | 270 |
{ |
247 | 271 |
int f0 = (int)mCenterSta.getX(); |
248 | 272 |
int f1 = (int)mCenterSta.getY(); |
273 |
int f2 = (int)mCenterSta.getZ(); |
|
249 | 274 |
|
250 |
mTextCenter.setText("center ("+f0+","+f1+")"); |
|
275 |
mTextCenter.setText("center ("+f0+","+f1+","+f2+")");
|
|
251 | 276 |
} |
252 | 277 |
|
253 | 278 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
... | ... | |
301 | 326 |
mDyn1 = null; |
302 | 327 |
mDyn2 = null; |
303 | 328 |
mDyn3 = null; |
329 |
mDyn4 = null; |
|
304 | 330 |
mDyn5 = null; |
305 | 331 |
mSta1 = null; |
306 | 332 |
mSta2 = null; |
307 | 333 |
mSta3 = null; |
334 |
mSta4 = null; |
|
308 | 335 |
mSta5 = null; |
309 | 336 |
|
310 | 337 |
mDimension = mName.getDimension(); |
... | ... | |
323 | 350 |
mSta3 = new Static3D(0,0,0); |
324 | 351 |
mDyn3.add(mSta3); |
325 | 352 |
break; |
326 |
case 4 : mDyn3 = new Dynamic3D(); |
|
327 |
mSta3 = new Static3D(0,0,0); |
|
328 |
mDyn3.add(mSta3); |
|
329 |
mDyn1 = new Dynamic1D(); |
|
330 |
mSta1 = new Static1D(0); |
|
331 |
mDyn1.add(mSta1); |
|
353 |
case 4 : if( mName == EffectNames.QUATERNION || mName == EffectNames.ROTATE ) |
|
354 |
{ |
|
355 |
mDyn4 = new Dynamic4D(); |
|
356 |
mSta4 = new Static4D(0,0,0,0); |
|
357 |
mDyn4.add(mSta4); |
|
358 |
} |
|
359 |
else |
|
360 |
{ |
|
361 |
mDyn3 = new Dynamic3D(); |
|
362 |
mSta3 = new Static3D(0,0,0); |
|
363 |
mDyn3.add(mSta3); |
|
364 |
mDyn1 = new Dynamic1D(); |
|
365 |
mSta1 = new Static1D(0); |
|
366 |
mDyn1.add(mSta1); |
|
367 |
} |
|
332 | 368 |
break; |
333 | 369 |
case 5 : mDyn5 = new Dynamic5D(); |
334 | 370 |
mSta5 = new Static5D(0,0,0,0,0); |
... | ... | |
346 | 382 |
mRegionSta = new Static4D(0,0,0,0); |
347 | 383 |
mRegionDyn.add(mRegionSta); |
348 | 384 |
|
349 |
mInterCenter = new int[2];
|
|
350 |
mSeekCenterID= new int[2];
|
|
351 |
mCenterDyn = new Dynamic2D();
|
|
352 |
mCenterSta = new Static2D(0,0);
|
|
385 |
mInterCenter = new int[3];
|
|
386 |
mSeekCenterID= new int[3];
|
|
387 |
mCenterDyn = new Dynamic3D();
|
|
388 |
mCenterSta = new Static3D(0,0,0);
|
|
353 | 389 |
mCenterDyn.add(mCenterSta); |
354 | 390 |
|
355 | 391 |
mButton = null; |
... | ... | |
479 | 515 |
|
480 | 516 |
mCenter = act.getLayoutInflater().inflate(R.layout.effectcenter, null); |
481 | 517 |
|
482 |
SeekBar[] seek = new SeekBar[2];
|
|
518 |
SeekBar[] seek = new SeekBar[3];
|
|
483 | 519 |
|
484 | 520 |
seek[0] = (SeekBar)mCenter.findViewById(R.id.effectCenterBarX ); |
485 | 521 |
seek[1] = (SeekBar)mCenter.findViewById(R.id.effectCenterBarY ); |
522 |
seek[2] = (SeekBar)mCenter.findViewById(R.id.effectCenterBarZ ); |
|
486 | 523 |
|
487 | 524 |
mSeekCenterID[0] = seek[0].getId(); |
488 | 525 |
mSeekCenterID[1] = seek[1].getId(); |
526 |
mSeekCenterID[2] = seek[2].getId(); |
|
489 | 527 |
|
490 | 528 |
mTextCenter = (TextView)mCenter.findViewById(R.id.effectCenterText); |
491 | 529 |
|
492 | 530 |
setDefaultCenterInter(); |
493 | 531 |
|
494 |
for(int i=0; i<2; i++)
|
|
532 |
for(int i=0; i<3; i++)
|
|
495 | 533 |
{ |
496 | 534 |
seek[i].setOnSeekBarChangeListener(this); |
497 | 535 |
seek[i].setProgress( mInterCenter[i] ); |
498 | 536 |
} |
499 | 537 |
|
500 |
act.setCenter(mCenterSta.getX(),mCenterSta.getY()); |
|
538 |
act.setCenter(mCenterSta.getX(),mCenterSta.getY(),mCenterSta.getZ());
|
|
501 | 539 |
|
502 | 540 |
return mCenter; |
503 | 541 |
} |
... | ... | |
574 | 612 |
fillCenterStatics(); |
575 | 613 |
setCenterText(); |
576 | 614 |
} |
615 |
if( bar.getId() == mSeekCenterID[2] ) |
|
616 |
{ |
|
617 |
mInterCenter[2] = progress; |
|
618 |
fillCenterStatics(); |
|
619 |
setCenterText(); |
|
620 |
} |
|
577 | 621 |
|
578 | 622 |
if( fromUser ) |
579 | 623 |
{ |
... | ... | |
582 | 626 |
|
583 | 627 |
Matrix3DActivity act = mAct.get(); |
584 | 628 |
|
585 |
act.setCenter(mCenterSta.getX(),mCenterSta.getY()); |
|
629 |
act.setCenter(mCenterSta.getX(),mCenterSta.getY(),mCenterSta.getZ());
|
|
586 | 630 |
act.setRegion(mRegionSta.getX(),mRegionSta.getY(),mRegionSta.getZ()); |
587 | 631 |
} |
588 | 632 |
} |
Also available in: Unified diff
Make the effect Center be always 3D.