| 46 |
46 |
class MirrorRenderer implements GLSurfaceView.Renderer
|
| 47 |
47 |
{
|
| 48 |
48 |
private static final float MIRROR_SCALE =0.70f; // each next mirror will be 70% of the size or the previous
|
| 49 |
|
private static final float HEAD_SCALE =0.40f; // Head's height will be 30% of the height of the mirror
|
|
49 |
private static final float HEAD_SCALE =0.30f; // Head's height will be 30% of the height of the mirror
|
| 50 |
50 |
private static final float MIRROR_BRIGHTNESS=0.70f; // Each next mirror 30% darker
|
| 51 |
|
private static final float MIRROR_MARGIN =0.09f; // The frame of the mirror takes up 9% of its width
|
|
51 |
private static final float MIRROR_MARGIN =0.11f; // The frame of the mirror takes up 11% of its width
|
| 52 |
52 |
private static final float MIRROR_MOVE =0.12f; // Each next mirror is moved to the right by 12% of
|
| 53 |
53 |
// the length of the previous one
|
| 54 |
54 |
|
| 55 |
55 |
private GLSurfaceView mView;
|
| 56 |
|
private DistortedEffects mEffectsHead, mEffectsNull, mEffectsOffscreen1, mEffectsOffscreen2;
|
|
56 |
private DistortedEffects mEffectsMirror, mEffectsHead, mEffectsNull;
|
|
57 |
private DistortedEffects mEffectsOffscreen1, mEffectsOffscreen2;
|
| 57 |
58 |
private DistortedTexture mTextureMirror, mTextureHead;
|
| 58 |
59 |
private DistortedFramebuffer mOffScreen1, mOffScreen2;
|
| 59 |
60 |
private DistortedScreen mScreen;
|
| ... | ... | |
| 62 |
63 |
private Dynamic3D mHeadDyn;
|
| 63 |
64 |
private int mX;
|
| 64 |
65 |
|
| 65 |
|
private int mHeadW, mHeadH;
|
|
66 |
private int mMirrorW, mMirrorH, mHeadW, mHeadH;
|
| 66 |
67 |
private int mScreenW, mScreenH;
|
| 67 |
68 |
|
| 68 |
69 |
///////////////////////////////////////////////////////////////////////////////////////////////////
|
| ... | ... | |
| 73 |
74 |
mQuad = new MeshFlat(1,1);
|
| 74 |
75 |
mScreen = new DistortedScreen();
|
| 75 |
76 |
|
| 76 |
|
mEffectsHead = new DistortedEffects();
|
| 77 |
|
mEffectsOffscreen1 = new DistortedEffects();
|
| 78 |
|
mEffectsOffscreen2 = new DistortedEffects();
|
| 79 |
|
mEffectsNull = new DistortedEffects();
|
|
77 |
mEffectsMirror = new DistortedEffects();
|
|
78 |
mEffectsHead = new DistortedEffects();
|
|
79 |
mEffectsOffscreen1= new DistortedEffects();
|
|
80 |
mEffectsOffscreen2= new DistortedEffects();
|
|
81 |
mEffectsNull = new DistortedEffects();
|
| 80 |
82 |
|
| 81 |
83 |
mX = MirrorActivity.INIT_POSITION;
|
| 82 |
84 |
|
| ... | ... | |
| 90 |
92 |
void setPosition(int pos)
|
| 91 |
93 |
{
|
| 92 |
94 |
mX = pos;
|
| 93 |
|
mHeadPosition.set1( (mX/50.0f-1)*(0.5f-MIRROR_MARGIN-HEAD_SCALE/2) );
|
|
95 |
|
|
96 |
float headW = (HEAD_SCALE *mScreenH* mHeadW) / (mScreenW* mHeadH);
|
|
97 |
|
|
98 |
mHeadPosition.set1(mX*(1.0f-2*MIRROR_MARGIN-headW)*mScreenW / 100.0f + MIRROR_MARGIN*mScreenW);
|
| 94 |
99 |
}
|
| 95 |
100 |
|
| 96 |
101 |
///////////////////////////////////////////////////////////////////////////////////////////////////
|
| ... | ... | |
| 128 |
133 |
mOffScreen2 = new DistortedFramebuffer( (int)(MIRROR_SCALE*mScreenW), (int)(MIRROR_SCALE*mScreenH) );
|
| 129 |
134 |
|
| 130 |
135 |
mEffectsHead.abortAllEffects();
|
|
136 |
mEffectsMirror.abortAllEffects();
|
| 131 |
137 |
mEffectsOffscreen1.abortAllEffects();
|
| 132 |
138 |
mEffectsOffscreen2.abortAllEffects();
|
| 133 |
139 |
|
|
140 |
mEffectsMirror.scale( new Static3D( (float)mScreenW/mMirrorW, (float)mScreenH/mMirrorH, 1.0f) );
|
|
141 |
mEffectsOffscreen1.scale(MIRROR_SCALE);
|
| 134 |
142 |
mEffectsOffscreen1.brightness(new Static1D(MIRROR_BRIGHTNESS));
|
| 135 |
|
mEffectsOffscreen2.move( new Static3D( MIRROR_MOVE-0.5f+MIRROR_SCALE/2, MIRROR_MOVE-0.5f+MIRROR_SCALE/2, 0) );
|
| 136 |
|
mEffectsOffscreen2.scale( new Static3D( MIRROR_SCALE, MIRROR_SCALE, 1) );
|
|
143 |
mEffectsOffscreen2.move( new Static3D( MIRROR_MOVE*mScreenW, MIRROR_MOVE*mScreenH*mMirrorW/mMirrorH, 0) );
|
| 137 |
144 |
|
| 138 |
145 |
mEffectsHead.move(mHeadDyn);
|
| 139 |
|
float qx = mScreenW/ mHeadW;
|
| 140 |
|
float qy = mScreenH/ mHeadH;
|
| 141 |
|
|
| 142 |
|
if( qx<qy )
|
| 143 |
|
{
|
| 144 |
|
mEffectsHead.scale(new Static3D(HEAD_SCALE, HEAD_SCALE*qx/qy, 1) );
|
| 145 |
|
mHeadPosition.set2(0.5f-MIRROR_MARGIN-(HEAD_SCALE/2)*qx/qy);
|
| 146 |
|
}
|
| 147 |
|
else
|
| 148 |
|
{
|
| 149 |
|
mEffectsHead.scale( new Static3D(HEAD_SCALE*qy/qx, HEAD_SCALE, 1) );
|
| 150 |
|
mHeadPosition.set2(0.5f-MIRROR_MARGIN-HEAD_SCALE/2);
|
| 151 |
|
}
|
| 152 |
|
|
|
146 |
float headScale = HEAD_SCALE *mScreenH/ mHeadH;
|
|
147 |
mEffectsHead.scale(headScale);
|
|
148 |
mHeadPosition.set2( mScreenH*(1.0f-MIRROR_MARGIN*mMirrorW/mMirrorH) - headScale* mHeadH);
|
| 153 |
149 |
setPosition(mX);
|
| 154 |
150 |
|
| 155 |
|
mOffScreen1.attach( mTextureMirror, mEffectsNull , mQuad );
|
|
151 |
mOffScreen1.attach( mTextureMirror, mEffectsMirror , mQuad );
|
| 156 |
152 |
mOffScreen1.attach( mOffScreen2 , mEffectsOffscreen2, mQuad );
|
| 157 |
153 |
mOffScreen1.attach( mTextureHead , mEffectsHead , mQuad );
|
| 158 |
154 |
mOffScreen2.attach( mOffScreen1 , mEffectsOffscreen1, mQuad );
|
| 159 |
155 |
|
| 160 |
156 |
mScreen.detachAll();
|
| 161 |
|
mScreen.attach ( mOffScreen1 , mEffectsNull , mQuad );
|
|
157 |
mScreen.attach ( mOffScreen1 , mEffectsNull , mQuad );
|
| 162 |
158 |
mScreen.resize(mScreenW,mScreenH);
|
| 163 |
159 |
}
|
| 164 |
160 |
}
|
| ... | ... | |
| 187 |
183 |
catch(IOException e) { }
|
| 188 |
184 |
}
|
| 189 |
185 |
|
| 190 |
|
mHeadW = bitmapH.getWidth();
|
| 191 |
|
mHeadH = bitmapH.getHeight();
|
|
186 |
mMirrorW = bitmapM.getWidth();
|
|
187 |
mMirrorH = bitmapM.getHeight();
|
|
188 |
mHeadW = bitmapH.getWidth();
|
|
189 |
mHeadH = bitmapH.getHeight();
|
| 192 |
190 |
|
| 193 |
|
if( mTextureMirror==null ) mTextureMirror = new DistortedTexture(bitmapM.getWidth(),bitmapM.getHeight());
|
|
191 |
if( mTextureMirror==null ) mTextureMirror = new DistortedTexture(mMirrorW,mMirrorH);
|
| 194 |
192 |
if( mTextureHead ==null ) mTextureHead = new DistortedTexture(mHeadW, mHeadH);
|
| 195 |
193 |
|
| 196 |
194 |
mTextureMirror.setTexture(bitmapM);
|
Revert "Convert a few more APPs to the new resolution-independent Matrix Effects."
This reverts commit 19938eb7e76e004b164589f0ca6eec2894935e08.