Revision d57f3a14
Added by Leszek Koltunski over 8 years ago
| src/main/java/org/distorted/examples/deform/DeformRenderer.java | ||
|---|---|---|
| 23 | 23 |
import javax.microedition.khronos.opengles.GL10; |
| 24 | 24 |
|
| 25 | 25 |
import org.distorted.library.effect.EffectName; |
| 26 |
import org.distorted.library.effect.MatrixEffectMove; |
|
| 27 |
import org.distorted.library.effect.MatrixEffectShear; |
|
| 28 |
import org.distorted.library.effect.VertexEffectDeform; |
|
| 29 |
import org.distorted.library.effect.VertexEffectDistort; |
|
| 26 | 30 |
import org.distorted.library.main.Distorted; |
| 27 | 31 |
import org.distorted.library.main.DistortedEffects; |
| 28 | 32 |
import org.distorted.library.main.DistortedScreen; |
| ... | ... | |
| 54 | 58 |
private DistortedScreen mScreen; |
| 55 | 59 |
private Static3D touchPoint; |
| 56 | 60 |
|
| 57 |
private Dynamic3D mReleasedDistortDynamic; |
|
| 58 |
private Dynamic3D mMovingDistortDynamic; |
|
| 59 | 61 |
private Static3D[] vDistort; |
| 60 |
private Dynamic3D mReleasedDeformDynamic; |
|
| 61 |
private Dynamic3D mMovingDeformDynamic; |
|
| 62 | 62 |
private Static3D[] vDeform; |
| 63 |
private Dynamic3D mReleasedShearDynamic; |
|
| 64 |
private Dynamic3D mMovingShearDynamic; |
|
| 65 | 63 |
private Static3D[] vShear; |
| 66 | 64 |
|
| 67 | 65 |
private Static4D mRegion; |
| 66 |
private Static3D mMove; |
|
| 68 | 67 |
private int scrHeight, scrWidth; |
| 69 | 68 |
private float mRadius; |
| 70 | 69 |
|
| 71 | 70 |
private EffectName mMode = EffectName.DISTORT; |
| 72 |
private EffectName mLastEffect = EffectName.DISTORT; |
|
| 71 |
private long mLastEffect = -1; |
|
| 72 |
|
|
| 73 |
private MatrixEffectShear mMovingShear, mReleasedShear; |
|
| 74 |
private VertexEffectDistort mMovingDistort, mReleasedDistort; |
|
| 75 |
private VertexEffectDeform mMovingDeform, mReleasedDeform; |
|
| 73 | 76 |
|
| 74 | 77 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 75 | 78 |
|
| ... | ... | |
| 79 | 82 |
|
| 80 | 83 |
stretchEffects = new DistortedEffects(); |
| 81 | 84 |
mRegion = new Static4D(0,0,0,0); |
| 85 |
mMove = new Static3D(0,0,0); |
|
| 82 | 86 |
|
| 83 | 87 |
// DISTORT |
| 84 |
mReleasedDistortDynamic = new Dynamic3D(NUM_VECTORS*500, 0.5f);
|
|
| 85 |
mReleasedDistortDynamic.setMode(Dynamic3D.MODE_PATH);
|
|
| 86 |
mMovingDistortDynamic = new Dynamic3D(0,0.5f);
|
|
| 87 |
mMovingDistortDynamic.setMode(Dynamic3D.MODE_PATH);
|
|
| 88 |
Dynamic3D releasedDistortDynamic = new Dynamic3D(NUM_VECTORS*500, 0.5f);
|
|
| 89 |
releasedDistortDynamic.setMode(Dynamic3D.MODE_PATH);
|
|
| 90 |
Dynamic3D movingDistortDynamic = new Dynamic3D(0,0.5f);
|
|
| 91 |
movingDistortDynamic.setMode(Dynamic3D.MODE_PATH); |
|
| 88 | 92 |
|
| 89 | 93 |
vDistort = new Static3D[NUM_VECTORS]; |
| 90 | 94 |
|
| 91 | 95 |
for(int i=0; i<NUM_VECTORS; i++) |
| 92 | 96 |
{
|
| 93 | 97 |
vDistort[i] = new Static3D(0,0,0); |
| 94 |
mReleasedDistortDynamic.add(vDistort[i]);
|
|
| 98 |
releasedDistortDynamic.add(vDistort[i]);
|
|
| 95 | 99 |
} |
| 96 | 100 |
|
| 97 |
mMovingDistortDynamic.add(vDistort[0]);
|
|
| 101 |
movingDistortDynamic.add(vDistort[0]); |
|
| 98 | 102 |
|
| 99 | 103 |
// Deform |
| 100 |
mReleasedDeformDynamic = new Dynamic3D(NUM_VECTORS*500, 0.5f);
|
|
| 101 |
mReleasedDeformDynamic.setMode(Dynamic3D.MODE_PATH);
|
|
| 102 |
mMovingDeformDynamic = new Dynamic3D(0,0.5f);
|
|
| 103 |
mMovingDeformDynamic.setMode(Dynamic3D.MODE_PATH);
|
|
| 104 |
Dynamic3D releasedDeformDynamic = new Dynamic3D(NUM_VECTORS*500, 0.5f);
|
|
| 105 |
releasedDeformDynamic.setMode(Dynamic3D.MODE_PATH);
|
|
| 106 |
Dynamic3D movingDeformDynamic = new Dynamic3D(0,0.5f);
|
|
| 107 |
movingDeformDynamic.setMode(Dynamic3D.MODE_PATH); |
|
| 104 | 108 |
|
| 105 | 109 |
vDeform = new Static3D[NUM_VECTORS]; |
| 106 | 110 |
|
| 107 | 111 |
for(int i=0; i<NUM_VECTORS; i++) |
| 108 | 112 |
{
|
| 109 | 113 |
vDeform[i] = new Static3D(0,0,0); |
| 110 |
mReleasedDeformDynamic.add(vDeform[i]);
|
|
| 114 |
releasedDeformDynamic.add(vDeform[i]);
|
|
| 111 | 115 |
} |
| 112 | 116 |
|
| 113 |
mMovingDeformDynamic.add(vDeform[0]);
|
|
| 117 |
movingDeformDynamic.add(vDeform[0]); |
|
| 114 | 118 |
|
| 115 | 119 |
// Shear |
| 116 |
mReleasedShearDynamic = new Dynamic3D(NUM_VECTORS*500, 0.5f);
|
|
| 117 |
mReleasedShearDynamic.setMode(Dynamic3D.MODE_PATH);
|
|
| 118 |
mMovingShearDynamic = new Dynamic3D(0,0.5f);
|
|
| 119 |
mMovingShearDynamic.setMode(Dynamic3D.MODE_PATH);
|
|
| 120 |
Dynamic3D releasedShearDynamic = new Dynamic3D(NUM_VECTORS*500, 0.5f);
|
|
| 121 |
releasedShearDynamic.setMode(Dynamic3D.MODE_PATH);
|
|
| 122 |
Dynamic3D movingShearDynamic = new Dynamic3D(0,0.5f);
|
|
| 123 |
movingShearDynamic.setMode(Dynamic3D.MODE_PATH); |
|
| 120 | 124 |
|
| 121 | 125 |
vShear = new Static3D[NUM_VECTORS]; |
| 122 | 126 |
|
| 123 | 127 |
for(int i=0; i<NUM_VECTORS; i++) |
| 124 | 128 |
{
|
| 125 | 129 |
vShear[i] = new Static3D(0,0,0); |
| 126 |
mReleasedShearDynamic.add(vShear[i]);
|
|
| 130 |
releasedShearDynamic.add(vShear[i]);
|
|
| 127 | 131 |
} |
| 128 | 132 |
|
| 129 |
mMovingShearDynamic.add(vShear[0]);
|
|
| 133 |
movingShearDynamic.add(vShear[0]); |
|
| 130 | 134 |
|
| 131 | 135 |
mScreen = new DistortedScreen(mView); |
| 132 | 136 |
mScreen.setDebug(DistortedScreen.DEBUG_FPS); |
| 137 |
|
|
| 138 |
mMovingDistort = new VertexEffectDistort(movingDistortDynamic, touchPoint, mRegion); |
|
| 139 |
mMovingDeform = new VertexEffectDeform(movingDeformDynamic, touchPoint, mRegion); |
|
| 140 |
mMovingShear = new MatrixEffectShear(movingShearDynamic, touchPoint); |
|
| 141 |
mReleasedDistort = new VertexEffectDistort(releasedDistortDynamic, touchPoint, mRegion); |
|
| 142 |
mReleasedDeform = new VertexEffectDeform(releasedDeformDynamic, touchPoint, mRegion); |
|
| 143 |
mReleasedShear = new MatrixEffectShear(releasedShearDynamic, touchPoint); |
|
| 144 |
|
|
| 145 |
stretchEffects.apply(new MatrixEffectMove(mMove)); |
|
| 133 | 146 |
} |
| 134 | 147 |
|
| 135 | 148 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| ... | ... | |
| 190 | 203 |
if( stretchTexture==null ) stretchTexture = new DistortedTexture(w,h); |
| 191 | 204 |
stretchTexture.setTexture(stretchBitmap); |
| 192 | 205 |
|
| 193 |
stretchEffects.abortAllEffects(); |
|
| 194 |
stretchEffects.move( new Static3D(scrWidth/4,scrHeight/4,0) ); |
|
| 206 |
mMove.set(scrWidth/4,scrHeight/4,0); |
|
| 195 | 207 |
|
| 196 | 208 |
mScreen.detachAll(); |
| 197 | 209 |
mScreen.attach(stretchTexture,stretchEffects,stretchMesh); |
| ... | ... | |
| 233 | 245 |
switch(mMode) |
| 234 | 246 |
{
|
| 235 | 247 |
case DISTORT: vDistort[0].set(0,0,0); |
| 236 |
mLastEffect = stretchEffects.distort( mMovingDistortDynamic, touchPoint, mRegion); |
|
| 248 |
stretchEffects.apply(mMovingDistort); |
|
| 249 |
mLastEffect = mMovingDeform.getID(); |
|
| 237 | 250 |
break; |
| 238 | 251 |
case DEFORM : vDeform[0].set(0,0,0); |
| 239 |
mLastEffect = stretchEffects.deform( mMovingDeformDynamic, touchPoint, mRegion); |
|
| 252 |
stretchEffects.apply(mMovingDeform); |
|
| 253 |
mLastEffect = mMovingDeform.getID(); |
|
| 240 | 254 |
break; |
| 241 | 255 |
case SHEAR : vShear[0].set(0,0,0); |
| 242 |
mLastEffect = stretchEffects.shear(mMovingShearDynamic, touchPoint); |
|
| 256 |
stretchEffects.apply(mMovingShear); |
|
| 257 |
mLastEffect = mMovingShear.getID(); |
|
| 243 | 258 |
break; |
| 244 | 259 |
} |
| 245 | 260 |
} |
| ... | ... | |
| 263 | 278 |
|
| 264 | 279 |
void up() |
| 265 | 280 |
{
|
| 266 |
stretchEffects.abortByName(mLastEffect);
|
|
| 281 |
stretchEffects.abortById(mLastEffect);
|
|
| 267 | 282 |
|
| 268 | 283 |
float damp = -0.65f; |
| 269 | 284 |
|
| ... | ... | |
| 274 | 289 |
vDistort[i].set( vDistort[i-1].getX()*damp, vDistort[i-1].getY()*damp ); |
| 275 | 290 |
} |
| 276 | 291 |
vDistort[NUM_VECTORS-1].set(0,0); |
| 277 |
stretchEffects.distort( mReleasedDistortDynamic, touchPoint, mRegion);
|
|
| 292 |
stretchEffects.apply( mReleasedDistort);
|
|
| 278 | 293 |
break; |
| 279 | 294 |
case DEFORM : for(int i=1; i<NUM_VECTORS-1; i++) |
| 280 | 295 |
{
|
| 281 | 296 |
vDeform[i].set( vDeform[i-1].getX()*damp, vDeform[i-1].getY()*damp ); |
| 282 | 297 |
} |
| 283 | 298 |
vDeform[NUM_VECTORS-1].set(0,0); |
| 284 |
stretchEffects.deform( mReleasedDeformDynamic, touchPoint, mRegion);
|
|
| 299 |
stretchEffects.apply( mReleasedDeform);
|
|
| 285 | 300 |
break; |
| 286 | 301 |
case SHEAR : for(int i=1; i<NUM_VECTORS-1; i++) |
| 287 | 302 |
{
|
| 288 | 303 |
vShear[i].set( vShear[i-1].getX()*damp, vShear[i-1].getY()*damp ); |
| 289 | 304 |
} |
| 290 | 305 |
vShear[NUM_VECTORS-1].set(0,0); |
| 291 |
stretchEffects.shear(mReleasedShearDynamic, touchPoint);
|
|
| 306 |
stretchEffects.apply(mReleasedShear);
|
|
| 292 | 307 |
break; |
| 293 | 308 |
} |
| 294 | 309 |
} |
Also available in: Unified diff
Further progress with Apps.