Project

General

Profile

« Previous | Next » 

Revision 16b22aab

Added by Leszek Koltunski almost 6 years ago

Fix several more apps for the 'center-of-matrix-effects-in-screen-center' change.

View differences:

src/main/java/org/distorted/examples/aroundtheworld/AroundTheWorldRenderer.java
27 27
import org.distorted.library.effect.EffectType;
28 28
import org.distorted.library.effect.FragmentEffectChroma;
29 29
import org.distorted.library.effect.FragmentEffectContrast;
30
import org.distorted.library.effect.MatrixEffectMove;
31 30
import org.distorted.library.effect.MatrixEffectScale;
32 31
import org.distorted.library.effect.VertexEffectDistort;
33 32
import org.distorted.library.effect.VertexEffectPinch;
......
56 55
   private DistortedScreen mScreen;
57 56
   private MeshFlat mMesh;
58 57
   private AroundTheWorldEffectsManager mManager;
59
   private int mObjWidth, mObjHeight;
60
   private Static3D mMove, mScale;
58
   private Static3D mScale;
61 59

  
62 60
///////////////////////////////////////////////////////////////////////////////////////////////////
63 61

  
64 62
   AroundTheWorldRenderer(GLSurfaceView view)
65 63
      {
66
      mMove = new Static3D(0,0,0);
67 64
      mScale= new Static3D(1,1,1);
68 65

  
69 66
      mView = view;
70 67
      mManager = new AroundTheWorldEffectsManager();
71 68
      mEffects = new DistortedEffects();
72
      mEffects.apply(new MatrixEffectMove(mMove));
73 69
      mEffects.apply(new MatrixEffectScale(mScale));
74 70

  
75 71
      mManager.apply(mEffects);
......
95 91
    
96 92
   public void onSurfaceChanged(GL10 glUnused, int width, int height) 
97 93
      {
98
      if( (float)mObjHeight/mObjWidth > (float)height/width )
99
        {
100
        int w = (height*mObjWidth)/mObjHeight;
101
        float factor = (float)height/mObjHeight;
102
        mMove.set((width-w)/2,0,0);
103
        mScale.set(factor,factor,factor);
104
        }
105
      else
106
        {
107
        int h = (width*mObjHeight)/mObjWidth;
108
        float factor = (float)width/mObjWidth;
109
        mMove.set(0,(height-h)/2,0);
110
        mScale.set(factor,factor,factor);
111
        }
94
      float horiRatio = (float)width / mTexture.getWidth();
95
      float vertRatio = (float)height/ mTexture.getHeight();
96
      float factor    = horiRatio > vertRatio ? vertRatio : horiRatio;
112 97

  
98
      mScale.set( factor,factor,factor );
113 99
      mScreen.resize(width,height);
114 100
      }
115 101

  
......
133 119
        catch(IOException e) { }
134 120
        }
135 121

  
136
      mObjWidth = bitmap.getWidth();
137
      mObjHeight= bitmap.getHeight();
122
      int objWidth = bitmap.getWidth();
123
      int objHeight= bitmap.getHeight();
138 124

  
139
      if( mTexture==null ) mTexture = new DistortedTexture(mObjWidth,mObjHeight);
125
      if( mTexture==null ) mTexture = new DistortedTexture(objWidth,objHeight);
140 126
      mTexture.setTexture(bitmap);
141 127

  
142
      if( mMesh==null ) mMesh = new MeshFlat(30,30*mObjHeight/mObjWidth);
128
      if( mMesh==null ) mMesh = new MeshFlat(30,30*objHeight/objWidth);
143 129

  
144 130
      mScreen.detachAll();
145 131
      mScreen.attach(mTexture, mEffects, mMesh);
src/main/java/org/distorted/examples/blur/BlurRenderer.java
58 58
    private MeshFlat mMesh;
59 59
    private Static1D mRadiusSta;
60 60
    private int mObjHeight, mObjWidth;
61
    private Static3D mMove, mScale, mBufferMove, mBufferScale;
61
    private Static3D mScale, mBufferScale;
62 62

  
63 63
///////////////////////////////////////////////////////////////////////////////////////////////////
64 64

  
......
73 73
      Dynamic1D radiusDyn = new Dynamic1D();
74 74
      radiusDyn.add(mRadiusSta);
75 75

  
76
      mMove = new Static3D(0,0,0);
77 76
      mScale= new Static3D(1,1,1);
78
      mBufferMove = new Static3D(0,0,0);
79 77
      mBufferScale= new Static3D(1,1,1);
80 78

  
81 79
      mBufferEffects = new DistortedEffects();
82
      mBufferEffects.apply(new MatrixEffectMove(mBufferMove));
83 80
      mBufferEffects.apply(new MatrixEffectScale(mBufferScale));
84 81

  
85 82
      mEffects = new DistortedEffects();
86 83
      mEffects.apply( new PostprocessEffectBlur(radiusDyn) );
87
      mEffects.apply(new MatrixEffectMove(mMove));
88 84
      mEffects.apply(new MatrixEffectScale(mScale));
89 85
      }
90 86

  
......
114 110
     float qw1 = (float)width /SIZE;
115 111
     float qh1 = (float)height/SIZE;
116 112
     float factor1 = 0.8f* (qw1<qh1 ? qw1:qh1);
117
     int w1 = (int)(factor1*SIZE);
118
     int h1 = (int)(factor1*SIZE);
119 113

  
120
     mBufferMove.set((width-w1)/2 ,(height-h1)/2, 0);
121 114
     mBufferScale.set( factor1,factor1,factor1 );
122 115

  
123 116
     float qw2 = (float)SIZE/mObjWidth;
124 117
     float qh2 = (float)SIZE/mObjHeight;
125 118
     float factor2 = 0.9f* (qw2<qh2 ? qw2:qh2);
126
     int w2 = (int)(factor2*mObjWidth);
127
     int h2 = (int)(factor2*mObjHeight);
128 119

  
129
     mMove.set((SIZE-w2)/2 ,(SIZE-h2)/2, 0);
130 120
     mScale.set( factor2,factor2,factor2 );
131 121

  
132 122
     mScreen.resize(width, height);
src/main/java/org/distorted/examples/check/CheckRenderer.java
29 29

  
30 30
import org.distorted.library.effect.EffectType;
31 31
import org.distorted.library.effect.FragmentEffectChroma;
32
import org.distorted.library.effect.MatrixEffectMove;
33 32
import org.distorted.library.effect.MatrixEffectScale;
34 33
import org.distorted.library.effect.VertexEffectDeform;
35 34
import org.distorted.library.effect.VertexEffectSwirl;
......
66 65
    private MeshFlat mMesh;
67 66
    private DistortedScreen mScreen;
68 67
    private int mObjHeight, mObjWidth;
69
    private Static3D mMove, mScale, mCenter;
68
    private Static3D mScale, mCenter;
70 69
    private Static3D mSwirl1, mSwirl2, mDeform1, mDeform2;
71 70

  
72 71
///////////////////////////////////////////////////////////////////////////////////////////////////
......
88 87
      mSwirl2 = new Static3D(0,0,0);
89 88
      mDeform1= new Static3D(0,0,0);
90 89
      mDeform2= new Static3D(0,0,0);
91
      mMove   = new Static3D(0,0,0);
92 90
      mScale  = new Static3D(1,1,1);
93 91
      mCenter = new Static3D(0,0,0);
94 92

  
95 93
      mEffects = new DistortedEffects();
96
      mEffects.apply(new MatrixEffectMove(mMove));
97 94
      mEffects.apply(new MatrixEffectScale(mScale));
98 95

  
99 96
      // Try adding 2 Vertex Effects to the Bitmap.
......
152 149

  
153 150
      float factor = xW>xH ? SCALE*xH : SCALE*xW;
154 151

  
155
      mMove.set( (width-factor*mObjWidth)/2 , (height-factor*mObjHeight)/2 , 0);
156 152
      mScale.set(factor,factor,factor);
157 153

  
158 154
      mScreen.resize(width,height);
src/main/java/org/distorted/examples/deform/DeformRenderer.java
63 63

  
64 64
   private Static4D mRegion;
65 65
   private int scrHeight, scrWidth;
66
   private int textureWidth, textureHeight;
66 67
   private float mRadius;
67 68

  
68 69
   private EffectName mMode = EffectName.DISTORT;
......
173 174
     mRegion.set4(mRadius*scrWidth);
174 175

  
175 176
     Canvas stretchCanvas;
176
     int w=width/2;
177
     int h=height/2;
177
     textureWidth = (int)(0.6f*width);
178
     textureHeight= (int)(0.6f*height);
178 179

  
179 180
     if( stretchMesh!=null ) stretchMesh.markForDeletion();
180 181

  
181
     stretchMesh = new MeshFlat(50,50*h/w);
182
     Bitmap stretchBitmap = Bitmap.createBitmap(w,h, Bitmap.Config.ARGB_8888);
182
     stretchMesh = new MeshFlat(50,50*textureHeight/textureWidth);
183
     Bitmap stretchBitmap = Bitmap.createBitmap(textureWidth,textureHeight, Bitmap.Config.ARGB_8888);
183 184
     stretchCanvas = new Canvas(stretchBitmap);
184 185

  
185 186
     Paint paint = new Paint();
186 187
     paint.setColor(0xff008800);
187 188
     paint.setStyle(Style.FILL);
188
     stretchCanvas.drawRect(0, 0, w, h, paint);
189
     stretchCanvas.drawRect(0, 0, textureWidth, textureHeight, paint);
189 190
     paint.setColor(0xffffffff);
190 191

  
191 192
     for(int i=0; i<=NUM_LINES ; i++ )
192 193
       {
193
       stretchCanvas.drawRect(w*i/NUM_LINES-1,               0, w*i/NUM_LINES+1, h              , paint);
194
       stretchCanvas.drawRect(              0, h*i/NUM_LINES-1, w              , h*i/NUM_LINES+1, paint);
194
       stretchCanvas.drawRect(textureWidth*i/NUM_LINES-1,                           0, textureWidth*i/NUM_LINES+1, textureHeight              , paint);
195
       stretchCanvas.drawRect(                         0, textureHeight*i/NUM_LINES-1, textureWidth              , textureHeight*i/NUM_LINES+1, paint);
195 196
       }
196 197

  
197
     if( stretchTexture==null ) stretchTexture = new DistortedTexture(w,h);
198
     if( stretchTexture==null ) stretchTexture = new DistortedTexture(textureWidth,textureHeight);
198 199
     stretchTexture.setTexture(stretchBitmap);
199 200

  
200 201
     mScreen.detachAll();
......
223 224

  
224 225
   void down(int x, int y)
225 226
     {
226
     int xt = x-scrWidth /4;
227
     int yt = y-scrHeight/4;
228
      
229
     if( xt<0 ) xt=0;
230
     if( xt>scrWidth /2 ) xt=scrWidth/2;
231
     if( yt<0 ) yt=0;
232
     if( yt>scrHeight/2 ) yt=scrHeight/2;
233
      
234
     mTouchPoint.set(xt, scrHeight/2-yt,0);   // OpenGL coord system and 2D coords have inverted Y axis
227
     int xt = x-(scrWidth -textureWidth )/2;
228
     int yt = y-(scrHeight-textureHeight)/2;
229

  
230
     yt = textureHeight - yt;  // OpenGL coord system and 2D coords have inverted Y axis
235 231

  
236 232
     switch(mMode)
237 233
       {
238 234
       case DISTORT: vDistort[0].set(0,0,0);
239 235
                     stretchEffects.apply(mMovingDistort);
240 236
                     mLastEffect = mMovingDistort.getID();
237
                     mTouchPoint.set(xt,yt,0);
241 238
                     break;
242 239
       case DEFORM : vDeform[0].set(0,0,0);
243 240
                     stretchEffects.apply(mMovingDeform);
244 241
                     mLastEffect = mMovingDeform.getID();
242
                     mTouchPoint.set(xt,yt,0);
245 243
                     break;
246 244
       case SHEAR  : vShear[0].set(0,0,0);
247 245
                     stretchEffects.apply(mMovingShear);
248 246
                     mLastEffect = mMovingShear.getID();
247
                     mTouchPoint.set(xt-textureWidth/2,yt-textureHeight/2,0);
249 248
                     break;
250 249
       }
251 250
     }
......
260 259
                     break;
261 260
       case DEFORM:  vDeform[0].set(x,-y,0);
262 261
                     break;
263
       case SHEAR:   vShear[0].set( (float)x/(scrWidth/2), (float)(-y)/(scrHeight/2), 0);
262
       case SHEAR:   vShear[0].set( (float)x/textureWidth, (float)(-y)/textureHeight, 0);
264 263
                     break;
265 264
       }
266 265
     }
src/main/java/org/distorted/examples/differentbitmaps/DifferentBitmapsRenderer.java
49 49

  
50 50
class DifferentBitmapsRenderer implements GLSurfaceView.Renderer 
51 51
{
52
   private static final int NUM = 3;
52
   private static final int[] bitmap = { R.raw.dog, R.raw.face, R.raw.cat };
53
   private static final int NUM = bitmap.length;
53 54
   
54 55
   private GLSurfaceView mView;
55 56
   private DistortedEffects[] mEffects;
56 57
   private DistortedTexture[] mTexture;
57 58
   private MeshFlat mMesh;
58 59
   private DistortedScreen mScreen;
59
   private int bmpHeight, bmpWidth;
60 60
   private Static3D mScale;
61 61
   private Static3D[] mMove;
62 62

  
......
101 101
      mScreen.glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
102 102
      }
103 103

  
104
///////////////////////////////////////////////////////////////////////////////////////////////////
105

  
106
   private Bitmap readBitmap(int id)
107
     {
108
     InputStream is = mView.getContext().getResources().openRawResource(id);
109
     Bitmap bitmap;
110
           
111
     try 
112
       {
113
       bitmap = BitmapFactory.decodeStream(is);
114
       } 
115
     finally 
116
       {
117
       try 
118
         {
119
         is.close();
120
         } 
121
       catch(IOException e) { }
122
       }
123
     
124
     return bitmap;
125
     }
126
   
127 104
///////////////////////////////////////////////////////////////////////////////////////////////////
128 105
   
129 106
   public void onDrawFrame(GL10 glUnused)
......
135 112
    
136 113
   public void onSurfaceChanged(GL10 glUnused, int width, int height)
137 114
     {
138
     if( (float)bmpHeight/(NUM*bmpWidth) > (float)height/width )
139
       {
140
       int w = (height*bmpWidth)/bmpHeight;
141
       float factor = (float)height/bmpHeight;
142
       mScale.set(factor,factor,factor);
115
     float horiRatio = (float)width / (NUM*mTexture[0].getWidth());
116
     float vertRatio = (float)height/ (    mTexture[0].getHeight());
117
     float factor    = horiRatio > vertRatio ? vertRatio : horiRatio;
143 118

  
144
       for(int i=NUM-1; i>=0; i--)
145
         {
146
         mMove[i].set((width-NUM*w)/2 +i*w ,0,0);
147
         }
148
       }
149
     else
150
       {
151
       int w = width/NUM;
152
       int h = (width*bmpHeight)/(bmpWidth*NUM);
153
       float factor = (float)width/(bmpWidth*NUM);
154
       mScale.set(factor,factor,factor);
155

  
156
       for(int i=NUM-1; i>=0; i--)
157
         {
158
         mMove[i].set(i*w,(height-h)/2,0);
159
         }
160
       }
119
     mScale.set( factor,factor,factor );
161 120

  
121
     for(int i=NUM-1; i>=0; i--) mMove[i].set((i-(NUM-1)/2.0f)*(width/NUM), 0, 0);
162 122

  
163 123
     mScreen.resize(width, height);
164 124
     }
......
167 127
    
168 128
   public void onSurfaceCreated(GL10 glUnused, EGLConfig config)
169 129
     {
170
     Bitmap bitmap0= readBitmap(R.raw.dog);
171
     Bitmap bitmap1= readBitmap(R.raw.face);
172
     Bitmap bitmap2= readBitmap(R.raw.cat);
173
      
174
     bmpHeight = bitmap0.getHeight();
175
     bmpWidth  = bitmap0.getWidth();
130
     Bitmap[] bmp = new Bitmap[NUM];
131

  
132
     for(int i=0; i<NUM; i++)
133
       {
134
       bmp[i] = readBitmap(bitmap[i]);
135
       }
136

  
137
     int bmpHeight = bmp[0].getHeight();
138
     int bmpWidth  = bmp[0].getWidth();
176 139

  
177 140
     if( mTexture==null )
178 141
       {
......
182 145
         mTexture[i] = new DistortedTexture(bmpWidth,bmpHeight);
183 146
       }
184 147

  
185
     mTexture[0].setTexture(bitmap0);
186
     mTexture[1].setTexture(bitmap1);
187
     mTexture[2].setTexture(bitmap2);
148
     for(int i=0; i<NUM; i++)
149
       {
150
       mTexture[i].setTexture(bmp[i]);
151
       }
188 152

  
189 153
     if( mMesh==null ) mMesh = new MeshFlat(30,30*bmpHeight/bmpWidth);
190 154

  
......
203 167
       android.util.Log.e("Renderer", ex.getMessage() );
204 168
       }
205 169
     }
170

  
171
///////////////////////////////////////////////////////////////////////////////////////////////////
172

  
173
   private Bitmap readBitmap(int id)
174
     {
175
     InputStream is = mView.getContext().getResources().openRawResource(id);
176
     Bitmap bitmap;
177

  
178
     try
179
       {
180
       bitmap = BitmapFactory.decodeStream(is);
181
       }
182
     finally
183
       {
184
       try
185
         {
186
         is.close();
187
         }
188
       catch(IOException e) { }
189
       }
190

  
191
     return bitmap;
192
     }
193

  
206 194
}
src/main/java/org/distorted/examples/differenteffects/DifferentEffectsRenderer.java
58 58
   private DistortedTexture mTexture;
59 59
   private MeshFlat mMesh;
60 60
   private DistortedScreen mScreen;
61
   private int bmpHeight, bmpWidth;
62 61
   private Static3D mScale;
63 62
   private Static3D[] mMove;
64 63

  
......
131 130
    
132 131
   public void onSurfaceChanged(GL10 glUnused, int width, int height)
133 132
     {
134
     if( (float)bmpHeight/(NUM*bmpWidth) > (float)height/width )
135
       {
136
       int w = (height*bmpWidth)/bmpHeight;
137
       float factor = (float)height/bmpHeight;
138
       mScale.set(factor,factor,factor);
139
       for(int i=NUM-1; i>=0; i--) mMove[i].set((width-NUM*w)/2 +i*w , 0, 0);
140
       }
141
     else
142
       {
143
       int w = width/NUM;
144
       int h = (width*bmpHeight)/(bmpWidth*NUM);
145
       float factor = (float)width/(bmpWidth*NUM);
146
       mScale.set(factor,factor,factor);
147
       for(int i=NUM-1; i>=0; i--) mMove[i].set(i*w, (height-h)/2, 0);
148
       }
149
       
133
     float horiRatio = (float)width / (NUM*mTexture.getWidth());
134
     float vertRatio = (float)height/ (    mTexture.getHeight());
135
     float factor    = horiRatio > vertRatio ? vertRatio : horiRatio;
136

  
137
     mScale.set( factor,factor,factor );
138

  
139
     for(int i=NUM-1; i>=0; i--) mMove[i].set((i-(NUM-1)/2.0f)*(width/NUM), 0, 0);
140

  
150 141
     mScreen.resize(width, height);
151 142
     }
152 143

  
......
170 161
       catch(IOException e) { }
171 162
       }
172 163
      
173
     bmpHeight = bitmap.getHeight();
174
     bmpWidth  = bitmap.getWidth();
164
     int bmpHeight = bitmap.getHeight();
165
     int bmpWidth  = bitmap.getWidth();
175 166

  
176 167
     if( mMesh==null ) mMesh = new MeshFlat(30,30*bmpHeight/bmpWidth);
177 168
     if( mTexture==null ) mTexture  = new DistortedTexture(bmpWidth,bmpHeight);
src/main/java/org/distorted/examples/earth/EarthRenderer.java
70 70
    private static final int   RADIUS_F= SIZE/15;
71 71
    private static final int   LEVEL   =      40;
72 72
    private static final float FOV     =   30.0f;
73
    private static final float NEAR    =    0.1f;
73
    private static final float NEAR    =   0.01f;
74 74
    private static final int   MAX_EFF =      20;
75 75
    private static final float SCALE   =   1.10f;
76 76

  
......
80 80
    private MeshBase mMesh;
81 81
    private DistortedScreen mScreen;
82 82
    private int mObjWidth, mObjHeight, mObjDepth;
83
    private Static3D mMove, mScaleFactor, mCenter;
83
    private Static3D mMove, mScaleFactor;
84 84

  
85 85
    private int mScrWidth, mScrHeight;
86 86
    private float mLevel;
......
109 109
      mRegionV    = new Static4D(0,0,0,RADIUS_V);
110 110
      mMove       = new Static3D(0,0,0);
111 111
      mScaleFactor= new Static3D(1,1,1);
112
      mCenter     = new Static3D(0,0,0);
113 112
      mPinch      = new Static2D(0.5f,0.0f);
114 113
      mSwirl      = new Static1D(45.0f);
115 114

  
115
      Static3D center = new Static3D(0,0,0);
116

  
116 117
      Dynamic3D scale = new Dynamic3D(0,0.5f);
117 118
      scale.add(mScaleFactor);
118 119

  
......
135 136
      mEffects = new DistortedEffects();
136 137
      mEffects.apply( new MatrixEffectMove(mMove) );
137 138
      mEffects.apply( new MatrixEffectScale(scale));
138
      mEffects.apply( new MatrixEffectQuaternion(quatInt1, mCenter) );
139
      mEffects.apply( new MatrixEffectQuaternion(quatInt2, mCenter) );
139
      mEffects.apply( new MatrixEffectQuaternion(quatInt1, center) );
140
      mEffects.apply( new MatrixEffectQuaternion(quatInt2, center) );
140 141

  
141 142
      mScreen = new DistortedScreen();
142 143
      mScreen.setProjection(FOV, NEAR);
......
159 160

  
160 161
      adjustFactor();
161 162

  
162
      mCenter.set( (float)mObjWidth/2, (float)mObjHeight/2, (float)mObjDepth/2 );
163 163
      mScreen.resize(width, height);
164 164
      }
165 165

  
......
167 167

  
168 168
    void setLevel(int level)
169 169
      {
170
      float N=3.0f;
170
      final float N=2.2f;
171 171

  
172 172
      // MAP: 0--> SCALE/N   50-->SCALE   100->SCALE*N
173 173
      mLevel = SCALE* (1.0f+  (level>=50 ? N-1 : (N-1)/N) * (level-50)/50.0f);
......
184 184

  
185 185
      float factor = xW>xH ? mLevel*xH : mLevel*xW;
186 186

  
187
      mMove.set( (mScrWidth-factor*mObjWidth)/2 , (mScrHeight-factor*mObjHeight)/2 , -factor*mObjDepth );
187
      mMove.set( 0, 0, -factor*mObjDepth );
188 188
      mScaleFactor.set(factor,factor,factor);
189 189
      }
190 190

  
src/main/java/org/distorted/examples/effects3d/Effects3DActivity.java
198 198
      {
199 199
      tr = (TableRow)mLay.getChildAt(row);
200 200

  
201
      for(int col=0; col<mNumCols; col++)
201
      if( tr!=null )
202 202
        {
203
        butt = (Button)tr.getVirtualChildAt(col);
204
        butt.setBackgroundColor(mObjectType==0 ? COLOR_ON : COLOR_INAC);
205
        mShape[row*mNumCols+col] = true;
203
        for(int col=0; col<mNumCols; col++)
204
          {
205
          butt = (Button)tr.getVirtualChildAt(col);
206
          butt.setBackgroundColor(mObjectType==0 ? COLOR_ON : COLOR_INAC);
207
          mShape[row*mNumCols+col] = true;
208
          }
206 209
        }
207 210
      }
208 211
    }
src/main/java/org/distorted/examples/effects3d/Effects3DRenderer.java
57 57
    private DistortedTexture mObjectTexture, mBackgroundTexture, mCenterTexture, mRegionTexture;
58 58
    private DistortedScreen mScreen;
59 59
    private DistortedNode mCenterNode, mRegionNode;
60
    private int mObjWidth, mObjHeight, mObjDepth;
60
    private int mObjWidth, mObjHeight;
61 61
    private Static3D mCenterPoint, mRegionPoint, mRegionScalePoint;
62 62
    private Static3D mRotateCen, mMoveObject, mScaleObject, mMoveCenter, mScaleCenter, mMoveRegion, mMoveBackground, mScaleBackground;
63 63
    private boolean mShowingCenter=false;
......
103 103

  
104 104
      mObjWidth = mObjectTexture.getWidth();
105 105
      mObjHeight= mObjectTexture.getHeight();
106
      mObjDepth = mObjectTexture.getDepth(mesh);
107 106

  
108 107
      mQuat1 = new Static4D(0,0,0,1);  // unity
109 108
      mQuat2 = new Static4D(0,0,0,1);  // quaternions
......
143 142

  
144 143
      resetMatrixEffects();
145 144

  
146
      // quite tricky: move the background exactly to the FAR plane! (see DistortedOutputSurface.setProjection() )
147 145
      backgroundEffects.apply(new MatrixEffectMove(mMoveBackground) );
148 146
      backgroundEffects.apply(new MatrixEffectScale(mScaleBackground) );
149 147
      }
......
154 152
      {
155 153
      Effects3DActivity2 act = (Effects3DActivity2)mView.getContext();
156 154
      DistortedEffects objectEffects= act.getEffects();
157
      Static3D rotateObj = new Static3D( (float)mObjWidth/2, (float)mObjHeight/2, (float)mObjDepth/2 );
155
      Static3D rotateObj = new Static3D( 0,0,0 );
158 156

  
159 157
      MatrixEffectQuaternion quat1obj = new MatrixEffectQuaternion(mQuat1,  rotateObj);
160 158
      MatrixEffectQuaternion quat2obj = new MatrixEffectQuaternion(mQuat2,  rotateObj);
......
253 251
      mRegionPoint.set(mFactorObj*act.getRegionX(),-mFactorObj*act.getRegionY(),0);
254 252
      mFactorReg = 2*mFactorObj*act.getRegionR()/regionSize;
255 253
      mRegionScalePoint.set(mFactorReg,mFactorReg,mFactorReg);
256
      mMoveObject.set( (width-mFactorObj*mObjWidth)/2 , (height-mFactorObj*mObjHeight)/2 , -mFactorObj*mObjDepth );
257 254
      mRotateCen.set(width/2,height/2, 0);
258 255
      mScaleObject.set(mFactorObj,mFactorObj,mFactorObj);
259
      mMoveCenter.set( (width -factorCen*centerSize-mFactorObj*mObjWidth )/2 ,
260
                       (height-factorCen*centerSize-mFactorObj*mObjHeight)/2 , 15 );
256
      mMoveCenter.set( 0,0,15);//(width -factorCen*centerSize-mFactorObj*mObjWidth )/2 ,
257
                    //   (height-factorCen*centerSize-mFactorObj*mObjHeight)/2 , 15 );
261 258
      mScaleCenter.set(factorCen,factorCen,factorCen);
262 259
      mMoveRegion.set( (width -mFactorObj*mObjWidth )/2 ,(height-mFactorObj*mObjHeight)/2 , 12 );
263 260

  
......
266 263
      float factorBackY = ((float)height)/backgroundSize;
267 264

  
268 265
      // quite tricky: move the background exactly to the FAR plane! (see DistortedOutputSurface.setProjection() )
269
      mMoveBackground.set( -width/2, -height/2, -0.9f*height*(1.0f-NEAR)/(2.0f*(float)Math.tan(FOV*Math.PI/360)) );
266
      mMoveBackground.set( 0, 0, -0.9f*height*(1.0f-NEAR)/(2.0f*(float)Math.tan(FOV*Math.PI/360)) );
270 267
      mScaleBackground.set( 2*factorBackX, 2*factorBackY, 1.0f );
271 268

  
272 269
      mScreen.resize(width, height);
src/main/java/org/distorted/examples/glow/GlowRenderer.java
25 25

  
26 26
import org.distorted.examples.R;
27 27
import org.distorted.library.effect.EffectQuality;
28
import org.distorted.library.effect.MatrixEffectMove;
29 28
import org.distorted.library.effect.MatrixEffectScale;
30 29
import org.distorted.library.effect.PostprocessEffectGlow;
31 30
import org.distorted.library.main.Distorted;
......
54 53
   private DistortedScreen mScreen;
55 54
   private PostprocessEffectGlow mGlow;
56 55
   private int mRootW, mRootH;
57
   private Static3D mMove, mScale;
56
   private Static3D mScale;
58 57
   private Static1D mRadius;
59 58
   private Static4D mColor;
60 59

  
......
67 66
      mRootW = LEAF_SIZE;
68 67
      mRootH = LEAF_SIZE;
69 68
      mLeaf  = new DistortedTexture(mRootW,mRootH);
70
      mMove  = new Static3D(0,0,0);
71 69
      mScale = new Static3D(1,1,1);
72 70
      mRadius= new Static1D(25);
73 71
      mColor = new Static4D(1.0f,0.0f,0.0f,0.5f); // half-transparent red
......
75 73
      mGlow  = new PostprocessEffectGlow(mRadius,mColor);
76 74

  
77 75
      DistortedEffects effects = new DistortedEffects();
78
      effects.apply(new MatrixEffectMove(mMove));
79 76
      effects.apply(new MatrixEffectScale(mScale));
80 77
      effects.apply(mGlow);
81 78

  
......
124 121
     float qw = (float)width /mRootW;
125 122
     float qh = (float)height/mRootH;
126 123
     float factor = 0.8f* (qw<qh ? qw:qh);
127
     int w = (int)(factor*mRootW);
128
     int h = (int)(factor*mRootH);
129 124

  
130
     mMove.set((width-w)/2 ,(height-h)/2, 0);
131 125
     mScale.set( factor,factor,factor );
132 126
     mScreen.resize(width, height);
133 127
     }
src/main/java/org/distorted/examples/inflate/InflateRenderer.java
23 23
import javax.microedition.khronos.opengles.GL10;
24 24

  
25 25
import org.distorted.library.effect.FragmentEffectAlpha;
26
import org.distorted.library.effect.MatrixEffectMove;
27 26
import org.distorted.library.effect.MatrixEffectQuaternion;
28 27
import org.distorted.library.effect.MatrixEffectScale;
29 28
import org.distorted.library.main.DistortedEffects;
......
50 49
    private DistortedEffects mEffects;
51 50
    private MeshBase mMesh;
52 51
    private DistortedScreen mScreen;
53
    private int mObjWidth, mObjHeight, mObjDepth;
54
    private Static3D mMove, mScale, mCenter;
52
    private int mObjWidth, mObjHeight;
53
    private Static3D mScale;
55 54
    private Static1D mAlpha;
56 55

  
57 56
    Static4D mQuat1, mQuat2;
......
65 64

  
66 65
      mAlpha = new Static1D(1.0f);
67 66

  
68
      mMove = new Static3D(0,0,0);
69 67
      mScale= new Static3D(1,1,1);
70
      mCenter=new Static3D(0,0,0);
68

  
69
      Static3D center=new Static3D(0,0,0);
71 70

  
72 71
      InflateActivity2 act = (InflateActivity2)v.getContext();
73 72

  
......
76 75

  
77 76
      mObjWidth = mTexture.getWidth();
78 77
      mObjHeight= mTexture.getHeight();
79
      mObjDepth = mTexture.getDepth(mMesh);
80 78

  
81 79
      mQuat1 = new Static4D(0,0,0,1);  // unity
82 80
      mQuat2 = new Static4D(0,0,0,1);  // quaternions
......
88 86
      quatInt2.add(mQuat2);
89 87

  
90 88
      mEffects = new DistortedEffects();
91
      mEffects.apply( new MatrixEffectMove(mMove) );
92 89
      mEffects.apply( new MatrixEffectScale(mScale));
93
      mEffects.apply( new MatrixEffectQuaternion(quatInt1, mCenter) );
94
      mEffects.apply( new MatrixEffectQuaternion(quatInt2, mCenter) );
90
      mEffects.apply( new MatrixEffectQuaternion(quatInt1, center) );
91
      mEffects.apply( new MatrixEffectQuaternion(quatInt2, center) );
95 92
      mEffects.apply( new FragmentEffectAlpha(mAlpha));
96 93

  
97 94
      mScreen = new DistortedScreen();
......
114 111

  
115 112
      mScreenMin = width<height ? width:height;
116 113
      float factor = ( width*mObjHeight > height*mObjWidth ) ? (SCALE*height)/mObjHeight :  (SCALE*width)/mObjWidth;
117
      mMove.set( (width-factor*mObjWidth)/2 , (height-factor*mObjHeight)/2 , -factor*mObjDepth/2 );
118 114
      mScale.set(factor,factor,factor);
119
      mCenter.set( (float)mObjWidth/2, (float)mObjHeight/2, (float)mObjDepth/2 );
120 115
      mScreen.resize(width, height);
121 116
      }
122 117

  
src/main/java/org/distorted/examples/mirror/MirrorRenderer.java
102 102
      {
103 103
      mX = pos;
104 104

  
105
      float headW = (HEAD_SCALE *mScreenH* mHeadW) / (mScreenW* mHeadH);
105
      float headWdivScreenW = mScreenW >0 ? (float)mHeadW/mScreenW : 0.0f;
106
      float left = headWdivScreenW -0.5f + MIRROR_MARGIN;
107
      float right= -left;
106 108

  
107
      mHeadPosition.set1(mX*(1.0f-2*MIRROR_MARGIN-headW)*mScreenW / 100.0f + MIRROR_MARGIN*mScreenW);
109
      mHeadPosition.set1( ((right-left)*(mX/100.0f) + left) * mScreenW );
108 110
      }
109 111
   
110 112
///////////////////////////////////////////////////////////////////////////////////////////////////
......
138 140
        if( mOffScreen1!=null ) mOffScreen1.markForDeletion();
139 141
        if( mOffScreen2!=null ) mOffScreen2.markForDeletion();
140 142

  
141
        mOffScreen1 = new DistortedFramebuffer(                     mScreenW,                     mScreenH, 1, DistortedFramebuffer.NO_DEPTH_NO_STENCIL );
143
        mOffScreen1 = new DistortedFramebuffer(                    mScreenW ,                    mScreenH , 1, DistortedFramebuffer.NO_DEPTH_NO_STENCIL );
142 144
        mOffScreen2 = new DistortedFramebuffer( (int)(MIRROR_SCALE*mScreenW), (int)(MIRROR_SCALE*mScreenH), 1, DistortedFramebuffer.NO_DEPTH_NO_STENCIL );
143 145

  
144
        mScaleMirror.set( (float)mScreenW/mMirrorW, (float)mScreenH/mMirrorH, 1.0f);
145
        mMoveOffscreen2.set( MIRROR_MOVE_H*mScreenW, MIRROR_MOVE_V*mScreenH*mMirrorW/mMirrorH, 0);
146

  
147 146
        float headScale = HEAD_SCALE *mScreenH/ mHeadH;
148 147
        mScaleHead.set(headScale,headScale,headScale);
149
        mHeadPosition.set2( mScreenH*MIRROR_MARGIN*mMirrorW/mMirrorH );
148

  
149
        float scaleW = (float)mScreenW/mMirrorW;
150
        float scaleH = (float)mScreenH/mMirrorH;
151

  
152
        mScaleMirror.set( scaleW, scaleH, 1.0f);
153

  
154
        mMoveOffscreen2.set( (MIRROR_MOVE_H-0.5f+0.5f*MIRROR_SCALE)*mScreenW, (MIRROR_MOVE_V-0.5f+0.5f*MIRROR_SCALE)*mScreenH*mMirrorW/mMirrorH, 0);
155
        mHeadPosition.set2( (0.5f*HEAD_SCALE - 0.5f + MIRROR_MARGIN*mMirrorW/mMirrorH)*mScreenH );
156

  
150 157
        setPosition(mX);
151 158

  
152 159
        mOffScreen1.attach( mTextureMirror, mEffectsMirror    , mQuad );
src/main/java/org/distorted/examples/movingglow/MovingGlowRenderer.java
66 66
   private PostprocessEffectGlow[] mGlow = new PostprocessEffectGlow[NUM_LEAVES];
67 67
   private int mRootW, mRootH;
68 68
   private int mGlowing;
69
   private Static3D mMove, mScale;
69
   private Static3D mScale;
70 70

  
71 71
///////////////////////////////////////////////////////////////////////////////////////////////////
72 72

  
......
83 83

  
84 84
      DistortedNode root = new DistortedNode(surface, new DistortedEffects(), mesh);
85 85
     
86
      Static3D moveVector = new Static3D(0.55f*LEAF_SIZE, (mRootH-LEAF_SIZE)/2, 0);
86
      Static3D moveVector = new Static3D(-1.45f*LEAF_SIZE, 0, 0);
87 87
      Static1D chromaLevel= new Static1D(0.5f);
88
      Static3D center     = new Static3D(mRootW/2, mRootH/2, 0);
88
      Static3D center     = new Static3D(0,0,0);
89 89
      Static3D axis       = new Static3D(0,0,1);
90 90

  
91 91
      MatrixEffectMove leafMove = new MatrixEffectMove(moveVector);
......
101 101
        root.attach(node);
102 102
        }
103 103

  
104
      mMove = new Static3D(0,0,0);
105 104
      mScale= new Static3D(1,1,1);
106 105

  
107 106
      Dynamic1D rot = new Dynamic1D(5000,0.0f);
......
110 109
      rot.add(new Static1D(360));
111 110

  
112 111
      DistortedEffects effects = root.getEffects();
113
      effects.apply(new MatrixEffectMove(mMove));
114 112
      effects.apply(new MatrixEffectScale(mScale));
115 113
      effects.apply( new MatrixEffectRotate(rot, axis, center) );
116 114

  
......
176 174
     float qw = (float)width /mRootW;
177 175
     float qh = (float)height/mRootH;
178 176
     float factor = 0.9f* (qw<qh ? qw:qh);
179
     int w = (int)(factor*mRootW);
180
     int h = (int)(factor*mRootH);
181 177

  
182
     mMove.set((width-w)/2 ,(height-h)/2, 0);
183 178
     mScale.set( factor,factor,factor );
184 179
     mScreen.resize(width, height);
185 180
     }
src/main/java/org/distorted/examples/multiblur/MultiblurRenderer.java
73 73
    private PostprocessEffectBlur mBlur;
74 74
    private int mDistance;
75 75
    private boolean[] mBlurStatus;
76
    private Static3D mMove, mScale, mCenter;
76
    private Static3D mScale;
77 77

  
78 78
    Static4D mQuat1, mQuat2;
79 79
    int mScreenMin;
......
121 121
      mBlurStatus[0] = true;
122 122
      effects[0].apply(mBlur);
123 123

  
124
      mMove   = new Static3D(0,0,0);
125 124
      mScale  = new Static3D(1,1,1);
126
      mCenter = new Static3D(0,0,0);
125
      Static3D center = new Static3D(0,0,0);
127 126

  
128
      MatrixEffectMove moveEffect = new MatrixEffectMove(mMove);
129 127
      MatrixEffectScale scaleEffect = new MatrixEffectScale(mScale);
130
      MatrixEffectQuaternion quatEffect1 = new MatrixEffectQuaternion(mQuat1, mCenter);
131
      MatrixEffectQuaternion quatEffect2 = new MatrixEffectQuaternion(mQuat2, mCenter);
128
      MatrixEffectQuaternion quatEffect1 = new MatrixEffectQuaternion(mQuat1, center);
129
      MatrixEffectQuaternion quatEffect2 = new MatrixEffectQuaternion(mQuat2, center);
132 130

  
133 131
      for(int i=0; i<NUM_OBJECTS; i++)
134 132
        {
135
        effects[i].apply(moveEffect);
136 133
        effects[i].apply(scaleEffect);
137 134
        effects[i].apply(quatEffect1);
138 135
        effects[i].apply(quatEffect2);
......
165 162
    
166 163
    public void onSurfaceChanged(GL10 glUnused, int width, int height) 
167 164
      {
168
      mScreenMin = width<height ? width:height;
169

  
170
    	float factor    = 0.15f*mScreenMin/OBJ_SIZE;
165
      mScreenMin  = width<height ? width:height;
166
    	float factor= 0.15f*mScreenMin/OBJ_SIZE;
171 167
    	mScale.set(factor,factor,factor);
172
      mCenter.set((float)OBJ_SIZE/2, (float)OBJ_SIZE/2, (float)OBJ_SIZE/2 );
173
      mMove.set( (width -factor*OBJ_SIZE)/2 ,(height-factor*OBJ_SIZE)/2 , -factor*OBJ_SIZE);
174 168
      computeMoveVectors();
175 169
      mScreen.resize(width, height);
176 170
      }
......
217 211

  
218 212
    private void computeMoveVectors()
219 213
      {
220
      float size= 0.026f*OBJ_SIZE*mDistance;
214
      float size= 0.020f*OBJ_SIZE*mDistance;
221 215

  
222 216
      for(int i=0; i<NUM_OBJECTS; i++)
223 217
        {
......
268 262
        {
269 263
        android.util.Log.e("renderer", "Error, number: "+number+" checked: "+checked );
270 264
        }
271

  
272
      //android.util.Log.d("renderer", "setting box "+number+" BLUR state to "+checked);
273 265
      }
274 266
}
src/main/java/org/distorted/examples/objecttree/ObjectTreeRenderer.java
28 28
import org.distorted.examples.R;
29 29

  
30 30
import org.distorted.library.effect.FragmentEffectChroma;
31
import org.distorted.library.effect.MatrixEffectMove;
32 31
import org.distorted.library.effect.MatrixEffectRotate;
33 32
import org.distorted.library.effect.MatrixEffectScale;
34 33
import org.distorted.library.effect.VertexEffectSink;
......
62 61
   private DistortedNode mRoot;
63 62
   private MeshFlat mMeshFlat;
64 63
   private MeshCubes mMeshCubes;
65
   private int lisaHeight, lisaWidth;
66 64
   private boolean mDepth;
67
   private Static3D mScale, mMove;
65
   private Static3D mScale;
68 66

  
69 67
///////////////////////////////////////////////////////////////////////////////////////////////////
70 68

  
......
73 71
      mView   = v;
74 72
      mDepth  = true;
75 73
      mScale  = new Static3D(1,1,1);
76
      mMove   = new Static3D(0,0,0);
77 74
      Dynamic1D chromaDyn = new Dynamic1D(5000,0.0f);
78 75
      chromaDyn.add(new Static1D(0.0f));
79 76
      chromaDyn.add(new Static1D(0.8f));
80 77

  
81 78
      mEffects= new DistortedEffects();
82
      mEffects.apply(new MatrixEffectMove(mMove));
83 79
      mEffects.apply(new MatrixEffectScale(mScale));
84 80
      mEffects.apply(new FragmentEffectChroma(chromaDyn, new Static3D(0,0,1)));
85 81

  
......
118 114
///////////////////////////////////////////////////////////////////////////////////////////////////
119 115
    
120 116
   public void onSurfaceChanged(GL10 glUnused, int width, int height)
121
      { 
122
      if( (float)lisaHeight/lisaWidth > (float)height/width )
123
        {
124
        int w = (height*lisaWidth)/lisaHeight;
125
        float factor = (float)height/lisaHeight;
126

  
127
        mMove.set((width-w)/2,0,0);
128
        mScale.set(factor,factor,factor);
129
        }
130
      else
131
        {
132
        int h = (width*lisaHeight)/lisaWidth;
133
        float factor = (float)width/lisaWidth;
117
      {
118
      float horiRatio = (float)width / mLisaTexture.getWidth();
119
      float vertRatio = (float)height/ mLisaTexture.getHeight();
120
      float factor    = horiRatio > vertRatio ? vertRatio : horiRatio;
134 121

  
135
        mMove.set(0,(height-h)/2,0);
136
        mScale.set(factor,factor,factor);
137
        }
138
      
122
      mScale.set( factor,factor,factor );
139 123
      mScreen.resize(width, height);
140 124
      }
141 125

  
......
170 154
        catch(IOException e) { }
171 155
        }  
172 156
      
173
      lisaWidth     = bitmap1.getWidth();
174
      lisaHeight    = bitmap1.getHeight();
157
      int lisaWidth     = bitmap1.getWidth();
158
      int lisaHeight    = bitmap1.getHeight();
175 159
      int gridWidth = bitmap2.getWidth();
176 160
      int gridHeight= bitmap2.getHeight();
177 161

  
......
200 184
      mScreen.attach(mRoot);
201 185

  
202 186
      float factor = lisaWidth/(2.0f*gridWidth);
203
      MatrixEffectMove move = new MatrixEffectMove( new Static3D((lisaWidth-factor*gridWidth)/2,(lisaHeight-factor*gridHeight)/2, gridWidth/(2.0f*GRID)));
204 187
      MatrixEffectScale scale = new MatrixEffectScale( new Static3D(factor,factor,factor) );
205
      gridEffects.apply(move);
206 188
      gridEffects.apply(scale);
207 189

  
208 190
      Dynamic1D rotDyn = new Dynamic1D(12000,0.0f);
209 191
      rotDyn.add(new Static1D(  0));
210 192
      rotDyn.add(new Static1D(360));
211 193
      rotDyn.setMode(Dynamic.MODE_JUMP);
212
      MatrixEffectRotate rotate = new MatrixEffectRotate(rotDyn, new Static3D(1,0,0), new Static3D(gridWidth/2,gridHeight/2,gridWidth/(2*GRID)));
194
      MatrixEffectRotate rotate = new MatrixEffectRotate(rotDyn, new Static3D(1,0,0), new Static3D(0,0,0));
213 195
      gridEffects.apply(rotate);
214 196

  
215 197
      Dynamic1D sinkDyn = new Dynamic1D(3000,0.0f);
src/main/java/org/distorted/examples/olimpic/OlimpicRenderer.java
60 60
   private MeshFlat mMesh;
61 61
   private int mScreenW, mScreenH;
62 62
   private int mPrevRendered, mCurrRendered;
63
   private Static3D mMove, mScale;
63
   private Static3D mScale;
64 64

  
65 65
   private DistortedNode[] mCircleNode = new DistortedNode[NUM_CIRCLES];
66 66
   private DistortedEffects[] mEffects = new DistortedEffects[NUM_LEAVES];
......
96 96
      mLeaf = new DistortedTexture(LEAF_SIZE,LEAF_SIZE);
97 97
      DistortedTexture surface = new DistortedTexture(3*LEAF_SIZE,3*LEAF_SIZE);
98 98
      mMesh = new MeshFlat(1,1);
99
      mMove = new Static3D(0,0,0);
100 99
      mScale= new Static3D(1,1,1);
101 100

  
102 101
      DistortedEffects effects = new DistortedEffects();
103
      effects.apply(new MatrixEffectMove(mMove));
104 102
      effects.apply(new MatrixEffectScale(mScale));
105 103

  
106 104
      mScreenW = 9*LEAF_SIZE;
107 105
      mScreenH = 9*LEAF_SIZE;
108
      mRoot = new DistortedNode(new DistortedTexture(mScreenW,mScreenH), effects, mMesh);
106
      DistortedTexture rootTexture = new DistortedTexture(mScreenW,mScreenH);
107
      mRoot = new DistortedNode(rootTexture, effects, mMesh);
109 108
     
110 109
      Dynamic1D rot = new Dynamic1D(5000,0.0f);
111 110
      rot.setMode(Dynamic1D.MODE_JUMP);
......
113 112
      rot.add(new Static1D(360));
114 113

  
115 114
      int[] colors    = new int[] {0,0,1,  0,0,0,  1,0,0,  1,1,0,  0,1,0}; // blue, black, red, yellow, green  
116
      int[] positions = new int[] {0,4*LEAF_SIZE,  3*LEAF_SIZE,4*LEAF_SIZE,  6*LEAF_SIZE,4*LEAF_SIZE,  3*LEAF_SIZE/2,3*LEAF_SIZE/2,  9*LEAF_SIZE/2,3*LEAF_SIZE/2};
115
      int[] positions = new int[] {-3*LEAF_SIZE  ,   LEAF_SIZE  ,
116
                                              0  ,   LEAF_SIZE  ,
117
                                    3*LEAF_SIZE  ,   LEAF_SIZE  ,
118
                                   -3*LEAF_SIZE/2,-3*LEAF_SIZE/2,
119
                                    3*LEAF_SIZE/2,-3*LEAF_SIZE/2 };
117 120
      
118
      Static3D center = new Static3D(3*LEAF_SIZE/2, 3*LEAF_SIZE/2, 0);
121
      Static3D center = new Static3D(0,0,0);
119 122
      Static3D axis   = new Static3D(0,0,1);
120
      Static3D moveVector = new Static3D(0,LEAF_SIZE,0);
123
      Static3D moveVector = new Static3D(-LEAF_SIZE,0,0);
121 124

  
122 125
      for(int j=0; j<NUM_LEAVES; j++)
123 126
        {
......
169 172
    
170 173
   public void onSurfaceChanged(GL10 glUnused, int width, int height)
171 174
     {
172
     if( (float)mScreenH/mScreenW > (float)height/width )
173
       {
174
       int w = (height*mScreenW)/mScreenH;
175
       float factor = (float)height/mScreenH;
176
       mMove.set((width-w)/2 ,0, 0);
177
       mScale.set(factor,factor,factor);
178
       }
179
     else
180
       {
181
       int h = (width*mScreenH)/mScreenW;
182
       float factor = (float)width/mScreenW;
183
       mMove.set(0,(height-h)/2,0);
184
       mScale.set(factor,factor,factor);
185
       }
186
      
175
     float horiRatio = (float)width / mScreenW;
176
     float vertRatio = (float)height/ mScreenH;
177
     float factor    = horiRatio > vertRatio ? vertRatio : horiRatio;
178

  
179
     mScale.set(factor,factor,factor);
187 180
     mScreen.resize(width, height);
188 181
     }
189 182

  
src/main/java/org/distorted/examples/postprocesstree/PostprocessTreeRenderer.java
56 56
   private DistortedTexture mLeaf;
57 57
   private DistortedScreen mScreen;
58 58
   private int mScreenW, mScreenH;
59
   private Static3D mMove, mScale;
59
   private Static3D mScale;
60 60
   private Static1D mRadius;
61 61

  
62 62
///////////////////////////////////////////////////////////////////////////////////////////////////
......
79 79
      mLeaf = new DistortedTexture(LEAF_SIZE,LEAF_SIZE);
80 80

  
81 81
      MeshFlat mesh = new MeshFlat(1,1);
82
      mMove = new Static3D(0,0,0);
83 82
      mScale= new Static3D(1,1,1);
84 83

  
85 84
      DistortedEffects rootEffects  = new DistortedEffects();
......
89 88

  
90 89
      DistortedNode root = new DistortedNode(new DistortedTexture(mScreenW,mScreenH), rootEffects, mesh);
91 90

  
92
      rootEffects.apply(new MatrixEffectMove(mMove));
93 91
      rootEffects.apply(new MatrixEffectScale(mScale));
94 92
      rootEffects.apply(blurEffect);
95 93

  
......
98 96
      rotate.add(new Static1D(  0));
99 97
      rotate.add(new Static1D(360));
100 98

  
101
      Static3D outerCenter = new Static3D(OUTER*LEAF_SIZE/2, OUTER*LEAF_SIZE/2, 0);
102
      Static3D innerCenter = new Static3D(INNER*LEAF_SIZE/2, INNER*LEAF_SIZE/2, 0);
103

  
99
      Static3D center = new Static3D(0,0,0);
104 100
      Static3D axis   = new Static3D(0,0,1);
105
      Static3D innerMoveVector = new Static3D(            0, (INNER-1)*LEAF_SIZE/2, 0);
106
      Static3D outerMoveVector = new Static3D(3*LEAF_SIZE/2, (OUTER-1)*LEAF_SIZE/2, 0);
101
      Static3D innerMoveVector = new Static3D( (1-INNER)*LEAF_SIZE/2, 0, 0);
102
      Static3D outerMoveVector = new Static3D( (4-OUTER)*LEAF_SIZE/2, 0, 0);
107 103

  
108 104
      for(int j=0; j<NUM_LEAVES; j++)
109 105
        {
110 106
        outerLeafEffects[j] = new DistortedEffects();
111
        outerLeafEffects[j].apply( new MatrixEffectRotate(new Static1D(j*(360/NUM_LEAVES)), axis, outerCenter) );
107
        outerLeafEffects[j].apply( new MatrixEffectRotate(new Static1D(j*(360/NUM_LEAVES)), axis, center) );
112 108
        outerLeafEffects[j].apply(new MatrixEffectMove(outerMoveVector));
113 109

  
114 110
        root.attach(mLeaf, outerLeafEffects[j], mesh);
115 111
        }
116 112

  
117
      innerEffects.apply( new MatrixEffectMove(new Static3D( (OUTER-INNER)*LEAF_SIZE/2,(OUTER-INNER)*LEAF_SIZE/2, 0)) );
118
      innerEffects.apply( new MatrixEffectRotate(rotate, axis, innerCenter) );
113
      innerEffects.apply( new MatrixEffectRotate(rotate, axis, center) );
119 114
      innerEffects.apply( new FragmentEffectChroma(new Static1D(0.5f), new Static3D(1,0,0) ) );
120 115
      innerEffects.apply(blurEffect);
121 116

  
......
125 120
      for(int j=0; j<NUM_LEAVES; j++)
126 121
        {
127 122
        innerLeafEffects[j] = new DistortedEffects();
128
        innerLeafEffects[j].apply( new MatrixEffectRotate(new Static1D(j*(360/NUM_LEAVES)), axis, innerCenter) );
123
        innerLeafEffects[j].apply( new MatrixEffectRotate(new Static1D(j*(360/NUM_LEAVES)), axis, center) );
129 124
        innerLeafEffects[j].apply(new MatrixEffectMove(innerMoveVector));
130 125

  
131 126
        innerNode.attach( mLeaf, innerLeafEffects[j], mesh );
......
155 150
    
156 151
   public void onSurfaceChanged(GL10 glUnused, int width, int height)
157 152
     {
158
     float factor;
159

  
160
     if( (float)mScreenH/mScreenW > (float)height/width )
161
       {
162
       int w = (height*mScreenW)/mScreenH;
163
       factor = (float)height/mScreenH;
164
       mMove.set((width-w)/2 ,0, 0);
165
       }
166
     else
167
       {
168
       int h = (width*mScreenH)/mScreenW;
169
       factor = (float)width/mScreenW;
170
       mMove.set(0,(height-h)/2,0);
171
       }
153
     float horiRatio = (float)width / mScreenW;
154
     float vertRatio = (float)height/ mScreenH;
155
     float factor    = horiRatio > vertRatio ? vertRatio : horiRatio;
172 156

  
173 157
     mScale.set(factor,factor,factor);
174

  
175 158
     mScreen.resize(width, height);
176 159
     }
177 160

  
src/main/java/org/distorted/examples/quaternion/QuaternionRenderer.java
28 28

  
29 29
import org.distorted.examples.R;
30 30

  
31
import org.distorted.library.effect.MatrixEffectMove;
32 31
import org.distorted.library.effect.MatrixEffectQuaternion;
33 32
import org.distorted.library.effect.MatrixEffectScale;
34 33
import org.distorted.library.main.DistortedEffects;
35 34
import org.distorted.library.main.DistortedScreen;
36 35
import org.distorted.library.main.DistortedTexture;
37
import org.distorted.library.mesh.MeshBase;
38 36
import org.distorted.library.mesh.MeshCubes;
39 37
import org.distorted.library.type.Dynamic;
40 38
import org.distorted.library.type.DynamicQuat;
......
54 52

  
55 53
  private GLSurfaceView mView;
56 54
  private DistortedTexture mTexture;
57
  private MeshBase mMesh;
58 55
  private DistortedScreen mScreen;
59
  private Static3D mMove, mScale, mCenter;
56
  private Static3D mScale;
60 57

  
61 58
///////////////////////////////////////////////////////////////////////////////////////////////////
62 59

  
......
64 61
    {
65 62
    mView    = v;
66 63
    mTexture = new DistortedTexture(1,1);
67
    mMesh    = new MeshCubes(1,1,1);
68 64

  
69 65
    DistortedEffects effects = new DistortedEffects();
70 66
    DynamicQuat rot = new DynamicQuat();
......
88 84
    rot.setDuration(8000);
89 85
    rot.setMode(Dynamic.MODE_LOOP);
90 86

  
91
    mMove   = new Static3D(0,0,0);
92 87
    mScale  = new Static3D(1,1,1);
93
    mCenter = new Static3D(0,0,0);
94 88

  
95
    effects.apply( new MatrixEffectMove(mMove));
96 89
    effects.apply(new MatrixEffectScale(mScale));
97
    effects.apply( new MatrixEffectQuaternion(rot,mCenter) );
90
    effects.apply( new MatrixEffectQuaternion(rot,new Static3D(0,0,0)) );
98 91

  
99 92
    mScreen = new DistortedScreen();
100
    mScreen.attach(mTexture,effects,mMesh);
93
    mScreen.attach(mTexture,effects,new MeshCubes(1,1,1));
101 94
    }
102 95

  
103 96
///////////////////////////////////////////////////////////////////////////////////////////////////
......
113 106
    {
114 107
    float w = mTexture.getWidth();
115 108
    float h = mTexture.getHeight();
116
    float d = mTexture.getDepth(mMesh);
117

  
118 109
    float factor = 0.5f*(width>height ? height/h:width/w);
119 110

  
120
    mCenter.set(w/2,h/2,d/2);
121
    mMove.set( (width-factor*w)/2 , (height-factor*h)/2 , -factor*d/2 );
122 111
    mScale.set(factor,factor,factor);
123

  
124 112
    mScreen.resize(width, height);
125 113
    }
126 114

  
src/main/java/org/distorted/examples/rubik/RubikRenderer.java
49 49
    private GLSurfaceView mView;
50 50
    private DistortedTexture mTexture;
51 51
    private DistortedScreen mScreen;
52
    private Static3D mMove, mScale, mCenter;
52
    private Static3D mScale;
53 53
    private MeshCubes[][][] mCubes;
54 54
    private DistortedEffects[][][] mEffects;
55 55

  
......
72 72
      mEffects = new DistortedEffects[CUBE_SIZE][CUBE_SIZE][CUBE_SIZE];
73 73
      Static3D[][][] cubeVectors = new Static3D[CUBE_SIZE][CUBE_SIZE][CUBE_SIZE];
74 74

  
75
      mMove  = new Static3D(0,0,0);
76 75
      mScale = new Static3D(1,1,1);
77
      mCenter= new Static3D(0,0,0);
76
      Static3D center= new Static3D(0,0,0);
78 77

  
79
      MatrixEffectMove       move  = new MatrixEffectMove(mMove);
80 78
      MatrixEffectScale      scale = new MatrixEffectScale(mScale);
81
      MatrixEffectQuaternion quat1 = new MatrixEffectQuaternion(mQuat1, mCenter);
82
      MatrixEffectQuaternion quat2 = new MatrixEffectQuaternion(mQuat2, mCenter);
79
      MatrixEffectQuaternion quat1 = new MatrixEffectQuaternion(mQuat1, center);
80
      MatrixEffectQuaternion quat2 = new MatrixEffectQuaternion(mQuat2, center);
83 81

  
84 82
      // 3x2 bitmap = 6 squares:
85 83
      //
......
120 118

  
121 119
            mEffects[x][y][z] = new DistortedEffects();
122 120

  
123
            mEffects[x][y][z].apply(move);
124 121
            mEffects[x][y][z].apply(scale);
125 122
            mEffects[x][y][z].apply(quat1);
126 123
            mEffects[x][y][z].apply(quat2);
......
143 140

  
144 141
      float w = mTexture.getWidth();
145 142
      float h = mTexture.getHeight();
146
      float d = mTexture.getDepth(mCubes[0][0][0]);
147

  
148 143
      float factor = 0.6f*(width>height ? height/h:width/w)/CUBE_SIZE;
149 144

  
150
      mCenter.set(w/2,h/2,d/2);
151
      mMove.set( (width-factor*w)/2 , (height-factor*h)/2 , -factor*d/2 );
152 145
      mScale.set(factor,factor,factor);
153

  
154 146
      mScreen.resize(width, height);
155 147
      }
156 148

  
src/main/java/org/distorted/examples/starwars/StarWarsRenderer.java
200 200
    
201 201
///////////////////////////////////////////////////////////////////////////////////////////////////
202 202

  
203
  private void setupScreen(int w, int h)
203
  private void setupScreen(int scrW, int scrH)
204 204
    {
205
    double angleA = (90.0f - FOV_ANGLE/2)*Math.PI/180;
206
    double angleB = (90.0f - FOV_ANGLE/2 +CRAWL_ANGLE)*Math.PI/180;
205
    double angleA = (90.0f - FOV_ANGLE/2              ) * Math.PI/180;
206
    double angleB = (90.0f - FOV_ANGLE/2 + CRAWL_ANGLE) * Math.PI/180;
207 207

  
208 208
    if( mCrawlBackgroundTexture!=null ) mCrawlBackgroundTexture.markForDeletion();
209
    mCrawlBackgroundTexture = new DistortedTexture(w,(int)(h*Math.sin(angleA)/Math.sin(angleB)));
210
       
209
    mCrawlBackgroundTexture = new DistortedTexture(scrW,(int)(scrH*Math.sin(angleA)/Math.sin(angleB)));
210

  
211 211
    int randomA, randomX, randomY, randomTime;
212 212
    float randomS, randomAlpha1, randomAlpha2;
213 213
       
......
217 217

  
218 218
    for(int i=0; i<NUM_STARS; i++)
219 219
      {
220
      randomX = mRnd.nextInt(w);
221
      randomY = mRnd.nextInt(h);
220
      randomX = mRnd.nextInt(scrW) - scrW/2;
221
      randomY = mRnd.nextInt(scrH) - scrH/2;
222 222
      randomS = 0.2f+ 0.8f*mRnd.nextFloat();
223 223
      randomA = (int)(180*mRnd.nextFloat());
224 224
      randomAlpha1 = 0.2f + 0.8f*mRnd.nextFloat();
......
239 239
      mScreen.attach(mStarTexture, mStarEffects[i], mQuad);
240 240
      }
241 241
      
242
    float scale = (0.5f*w/mGFFATexture.getWidth());
242
    float scale = (0.5f*scrW/mGFFATexture.getWidth());
243 243
    
244 244
    Dynamic1D di = new Dynamic1D(6000,0.5f);
245 245
    di.add(new Static1D(1.0f));
246 246
    di.add(new Static1D(1.0f));
247 247
    di.add(new Static1D(0.0f));
248 248
    
249
    mGFFAEffects.apply( new MatrixEffectMove(new Static3D(w/5,2*h/3,0)) );
249
    mGFFAEffects.apply( new MatrixEffectMove(new Static3D(-scrW/3 + mGFFATexture.getWidth()/2 ,scrH/6,0)) );
250 250
    mGFFAEffects.apply( new MatrixEffectScale(scale) );
251 251
    mGFFAEffects.apply( new FragmentEffectAlpha(di) );
252 252
      
......
382 382
        mGFFATexture.markForDeletion();
383 383

  
384 384
        int screenW=mScreen.getWidth();
385
        int screenH=mScreen.getHeight();
386
        
387 385
        int logoW = mLogoTexture.getWidth();
388
        int logoH = mLogoTexture.getHeight();
389
      
390 386
        int initSize= (int)(3.0f*screenW/logoW);
391 387
        int finaSize= (int)(0.1f*screenW/logoW);
392 388
      
......
394 390
        di.add(new Static3D(initSize,initSize,1));
395 391
        di.add(new Static3D(finaSize,finaSize,1));
396 392

  
397
        mLogoEffects.apply( new MatrixEffectMove(new Static3D(screenW/2,screenH/2,0)) );
398 393
        mLogoEffects.apply( new MatrixEffectScale(di) );
399
        mLogoEffects.apply( new MatrixEffectMove(new Static3D(-logoW/2,-logoH/2,0)) );
400
      
394

  
401 395
        mScreen.attach(mLogoTexture, mLogoEffects,mQuad);
402 396
        mLogoEffects.registerForMessages(this);
403 397
        }
......
409 403
        int crawlW = mCrawlTexture.getWidth();
410 404
        int crawlH = mCrawlTexture.getHeight();
411 405
        int screenW= mScreen.getWidth();
406
        int screenH= mScreen.getHeight();
407
        int backW  = mCrawlBackgroundTexture.getWidth();
412 408
        int backH  = mCrawlBackgroundTexture.getHeight();
413
        float scale= (float)screenW/crawlW;
409
        float scale= (float)backW/crawlW;
414 410

  
415
        mCrawlBackgroundEffects.apply( new MatrixEffectRotate(new Static1D(CRAWL_ANGLE), new Static3D(1,0,0), new Static3D(screenW/2,0,0)) );
411
        mCrawlBackgroundEffects.apply( new MatrixEffectMove(new Static3D( 0, (backH-screenH)/2, 0)) );
412
        mCrawlBackgroundEffects.apply( new MatrixEffectRotate(new Static1D(CRAWL_ANGLE), new Static3D(1,0,0), new Static3D(0,-backH/2,0)) );
416 413

  
417 414
        final int transpDist = 5;
418 415
        Static3D center = new Static3D( screenW/2 , transpDist*backH , 0 );
......
420 417
        mCrawlBackgroundEffects.apply( new FragmentEffectAlpha(new Static1D(1-transpDist*0.6f), center, region, true) );
421 418

  
422 419
        Dynamic3D di = new Dynamic3D(70000,0.5f);
423
        di.add(new Static3D(screenW/2,-scale*crawlH/2        , 0));
424
        di.add(new Static3D(screenW/2,+scale*crawlH/2 + backH, 0));
420
        di.add(new Static3D(0, -(scale*crawlH+backH)/2, 0));
421
        di.add(new Static3D(0, +(scale*crawlH+backH)/2, 0));
425 422

  
426 423
        mCrawlEffects.apply( new MatrixEffectMove(di) );
427 424
        mCrawlEffects.apply( new MatrixEffectScale(new Static3D(scale,scale,scale)) );
428
        mCrawlEffects.apply( new MatrixEffectMove(new Static3D(-crawlW/2,-crawlH/2,0)) );
429
        
425

  
430 426
        mBackground = mScreen.attach(mCrawlBackgroundTexture, mCrawlBackgroundEffects,mQuad);
431 427
        mBackground.attach(mCrawlTexture, mCrawlEffects,mQuad);
432 428
        mBackground.glDisable(GLES31.GL_DEPTH_TEST);
src/main/java/org/distorted/examples/stencil/StencilRenderer.java
56 56
    private DistortedScreen mScreen;
57 57
    private DistortedTexture mCubeTex, mFloorTex, mFBOTex;
58 58
    private DistortedNode mCube1Node, mCube2Node, mFloorNode, mFBONode;
59
    private Static3D mMove, mScale, mRotCenter, mFBOScale;
59
    private Static3D mScale, mFBOScale;
60 60

  
61 61
///////////////////////////////////////////////////////////////////////////////////////////////////
62 62

  
......
89 89
      MeshBase cube = new MeshCubes(1,1,1);
90 90
      MeshBase quad = new MeshQuad();
91 91

  
92
      mMove       = new Static3D(0,0,0);
93 92
      mScale      = new Static3D(1,1,1);
94
      mRotCenter  = new Static3D(0,0,0);
95 93
      mFBOScale   = new Static3D(1,1,1);
96 94

  
97 95
      mCubeTex   = new DistortedTexture(1,1);
......
137 135
      setScreen(true);
138 136

  
139 137
      float cw = mCubeTex.getWidth();
140
      float ch = mCubeTex.getHeight();
141

  
142
      float fw = mFloorTex.getWidth();
143
      float fh = mFloorTex.getHeight();
144 138

  
145 139
      Static3D axisX = new Static3D(1,0,0);
146 140
      Static3D axisZ = new Static3D(0,0,1);
......
150 144
      rotDyn.add(new Static1D(  0));
151 145
      rotDyn.add(new Static1D(360));
152 146

  
147
      Static3D rotCenter  = new Static3D(0,0,0);
148

  
153 149
      MatrixEffectScale  scale = new MatrixEffectScale(mScale);
154
      MatrixEffectMove   move1 = new MatrixEffectMove( new Static3D( (fw-cw)/2, (fh-ch)/2, 0) );
155
      MatrixEffectMove   move2 = new MatrixEffectMove( mMove );
156
      MatrixEffectRotate rotaX = new MatrixEffectRotate(new Static1D(-60.0f), axisX, mRotCenter);
157
      MatrixEffectRotate rotaZ = new MatrixEffectRotate(rotDyn, axisZ, mRotCenter);
150
      MatrixEffectMove   move1 = new MatrixEffectMove( new Static3D( 0, 0, cw/2) );
151
      MatrixEffectRotate rotaX = new MatrixEffectRotate(new Static1D(-60.0f), axisX, rotCenter);
152
      MatrixEffectRotate rotaZ = new MatrixEffectRotate(rotDyn, axisZ, rotCenter);
158 153

  
159 154
      /////////////////////////////////////////////////////////////////////////////////////////////////////
160 155
      // First move the cube and its reflection to the middle of the floor. Then scale the floor, the cube
......
162 157
      // middle of the screen.
163 158
      /////////////////////////////////////////////////////////////////////////////////////////////////////
164 159
      // The cube
165
      cube1Effects.apply( move2 );
166 160
      cube1Effects.apply( rotaX );
167 161
      cube1Effects.apply( rotaZ );
168 162
      cube1Effects.apply( scale );
169 163
      cube1Effects.apply( move1 );
170 164
      /////////////////////////////////////////////////////////////////////////////////////////////////////
171 165
      // Floor
172
      floorEffects.apply( move2 );
173 166
      floorEffects.apply( rotaX );
174 167
      floorEffects.apply( rotaZ );
175 168
      floorEffects.apply( scale );
176 169
      /////////////////////////////////////////////////////////////////////////////////////////////////////
177 170
      // Reflection
178
      cube2Effects.apply( move2 );
179 171
      cube2Effects.apply( rotaX );
180 172
      cube2Effects.apply( rotaZ );
181 173
      cube2Effects.apply( scale );
182
      cube2Effects.apply( move1 );
183 174
      cube2Effects.apply( new MatrixEffectScale(new Static3D(1,1,-1)) );
175
      cube2Effects.apply( move1 );
184 176
      cube2Effects.apply( new FragmentEffectBrightness(new Static1D(0.5f)) );
185 177

  
186 178
      /////////////////////////////////////////////////////////////////////////////////////////////////////
......
202 194
      float cw = mCubeTex.getWidth();
203 195
      float ch = mCubeTex.getHeight();
204 196

  
205
      float fw = mFloorTex.getWidth();
206
      float fh = mFloorTex.getHeight();
207

  
208 197
      float bw = mFBOTex.getWidth();
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff