Project

General

Profile

Download (13.5 KB) Statistics
| Branch: | Revision:

examples / src / main / java / org / distorted / examples / effects3d / Effects3DActivity2.java @ 676c14da

1 348dbeea Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
2
// Copyright 2016 Leszek Koltunski                                                               //
3
//                                                                                               //
4
// This file is part of Distorted.                                                               //
5
//                                                                                               //
6
// Distorted is free software: you can redistribute it and/or modify                             //
7
// it under the terms of the GNU General Public License as published by                          //
8
// the Free Software Foundation, either version 2 of the License, or                             //
9
// (at your option) any later version.                                                           //
10
//                                                                                               //
11
// Distorted is distributed in the hope that it will be useful,                                  //
12
// but WITHOUT ANY WARRANTY; without even the implied warranty of                                //
13
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                                 //
14
// GNU General Public License for more details.                                                  //
15
//                                                                                               //
16
// You should have received a copy of the GNU General Public License                             //
17
// along with Distorted.  If not, see <http://www.gnu.org/licenses/>.                            //
18
///////////////////////////////////////////////////////////////////////////////////////////////////
19
20
package org.distorted.examples.effects3d;
21
22
import android.graphics.Bitmap;
23
import android.graphics.BitmapFactory;
24
import android.graphics.Canvas;
25
import android.graphics.Paint;
26
import android.opengl.GLSurfaceView;
27
import android.os.Bundle;
28
import android.support.design.widget.TabLayout;
29
import android.support.v4.view.ViewPager;
30 c2c45d0a Leszek Koltunski
import android.support.v7.app.AppCompatActivity;
31 348dbeea Leszek Koltunski
import android.view.View;
32
import android.widget.CheckBox;
33
34
import org.distorted.examples.R;
35
import org.distorted.library.effect.EffectType;
36
import org.distorted.library.main.Distorted;
37
import org.distorted.library.main.DistortedEffects;
38
import org.distorted.library.main.DistortedTexture;
39 107e4b72 Leszek Koltunski
import org.distorted.library.mesh.MeshCubes;
40
import org.distorted.library.mesh.MeshFlat;
41 57d7fdba Leszek Koltunski
import org.distorted.library.mesh.MeshBase;
42 24624a1a Leszek Koltunski
import org.distorted.library.mesh.MeshQuad;
43
import org.distorted.library.mesh.MeshSphere;
44 348dbeea Leszek Koltunski
45
import java.io.IOException;
46
import java.io.InputStream;
47
48
///////////////////////////////////////////////////////////////////////////////////////////////////
49
50 c2c45d0a Leszek Koltunski
public class Effects3DActivity2 extends AppCompatActivity
51 348dbeea Leszek Koltunski
  {
52 65f622c1 Leszek Koltunski
  public static final int NUM_TABS = 4;
53 06c636a5 Leszek Koltunski
54 348dbeea Leszek Koltunski
  private int mNumCols;
55
  private int mNumRows;
56
  private int mNumSlic;
57
  private int mObjectType;
58
  private int mBitmapID;
59
  private String mString;
60
61
  private DistortedTexture mTexture;
62 57d7fdba Leszek Koltunski
  private MeshBase mMesh;
63 348dbeea Leszek Koltunski
  private Bitmap mBitmap;
64
65
  private float mCenterX, mCenterY, mCenterZ;
66 9e7b6dbd Leszek Koltunski
  private float mRegionX, mRegionY, mRegionZ, mRegionR;
67 348dbeea Leszek Koltunski
  private DistortedEffects mEffects;
68
  private ViewPager mViewPager;
69
  private Effects3DTabViewPager mPager;
70
71 0372f32c Leszek Koltunski
  private boolean mShowCenter;
72
  private boolean mShowRegion;
73
  private boolean mShowNormal;
74
  private boolean mUseOIT    ;
75 348dbeea Leszek Koltunski
76 06c636a5 Leszek Koltunski
  private Effects3DTab[] mTab;
77
78 348dbeea Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
79
80
  @Override
81
  protected void onCreate(Bundle savedState)
82
    {
83
    super.onCreate(savedState);
84
85 d9c55dbe Leszek Koltunski
    setTheme(R.style.CustomActivityThemeNoActionBar);
86
87 06c636a5 Leszek Koltunski
    mTab = new Effects3DTab[NUM_TABS];
88
89 348dbeea Leszek Koltunski
    Bundle b = getIntent().getExtras();
90
91
    mObjectType = b.getInt("type");
92
    mNumCols    = b.getInt("cols");
93
    mNumRows    = b.getInt("rows");
94
    mNumSlic    = b.getInt("slices");
95
    mBitmapID   = b.getInt("bitmap");
96
    mString     = b.getString("string");
97
98 f86c9fb5 Leszek Koltunski
    mShowCenter = false;
99
    mShowRegion = false;
100
    mShowNormal = false;
101 0372f32c Leszek Koltunski
    mUseOIT     = false;
102
103 24624a1a Leszek Koltunski
    switch(mObjectType)
104
      {
105
      case 0: mMesh = new MeshCubes(mNumCols, mString, mNumSlic);
106
              break;
107
      case 1: mMesh = new MeshFlat(mNumCols,mNumRows);
108
              break;
109
      case 2: mMesh = new MeshSphere(mNumRows);
110
              break;
111
      case 3: mMesh = new MeshQuad();
112
              break;
113
      }
114 348dbeea Leszek Koltunski
115
    mMesh.setShowNormals(mShowNormal);
116
    mTexture= new DistortedTexture(mNumCols,mNumRows);
117
    mEffects= new DistortedEffects();
118
119
    final View view = getLayoutInflater().inflate(R.layout.effects3dlayout, null);
120
121
    setContentView(view);
122
123
    mViewPager = findViewById(R.id.effects3d_viewpager);
124 d5522531 Leszek Koltunski
    mViewPager.setOffscreenPageLimit( NUM_TABS-1 );
125 c2c45d0a Leszek Koltunski
    mPager = new Effects3DTabViewPager(this, getSupportFragmentManager() );
126 348dbeea Leszek Koltunski
    mViewPager.setAdapter(mPager);
127
    TabLayout tabLayout = findViewById(R.id.effects3d_sliding_tabs);
128
    tabLayout.setupWithViewPager(mViewPager);
129
130
    resetData();
131
    }
132
133
///////////////////////////////////////////////////////////////////////////////////////////////////
134
135
  public DistortedTexture getTexture()
136
    {
137
    return mTexture;
138
    }
139
140
///////////////////////////////////////////////////////////////////////////////////////////////////
141
142 57d7fdba Leszek Koltunski
  public MeshBase getMesh()
143 348dbeea Leszek Koltunski
    {
144
    return mMesh;
145
    }
146
147
///////////////////////////////////////////////////////////////////////////////////////////////////
148
149
  public Bitmap getBitmap()
150
    {
151
    if( mBitmap==null )
152
      {
153
      if( mBitmapID!=-1)
154
        {
155
        InputStream is = getResources().openRawResource(mBitmapID);
156
157
        try
158
          {
159
          mBitmap = BitmapFactory.decodeStream(is);
160
          }
161
        finally
162
          {
163
          try
164
            {
165
            is.close();
166
            }
167
          catch(IOException e) { }
168
          }
169
        }
170
      else
171
        {
172
        final int W = 64*mNumCols;
173
        final int H = 64*mNumRows;
174
175
        Paint paint = new Paint();
176
        mBitmap = Bitmap.createBitmap(W,H, Bitmap.Config.ARGB_8888);
177
        Canvas canvas = new Canvas(mBitmap);
178
179
        paint.setAntiAlias(true);
180
        paint.setTextAlign(Paint.Align.CENTER);
181
        paint.setColor(0xff008800);
182
        paint.setStyle(Paint.Style.FILL);
183
        canvas.drawRect(0, 0, W, H, paint);
184
        paint.setColor(0xffffffff);
185
186
        for(int i=0; i<=mNumCols ; i++ ) canvas.drawRect(W*i/mNumCols-1, 0, W*i/mNumCols + 1, H, paint);
187
        for(int i=0; i<=mNumRows ; i++ ) canvas.drawRect( 0, H*i/mNumRows-1, W,  H*i/mNumRows+1, paint);
188
        }
189
      }
190
191
    return mBitmap;
192
    }
193
194
///////////////////////////////////////////////////////////////////////////////////////////////////
195
196 9e7b6dbd Leszek Koltunski
  public void setRegion(float x, float y, float z, float r)
197 348dbeea Leszek Koltunski
    {
198
    mRegionX = x;
199
    mRegionY =-y;
200 9e7b6dbd Leszek Koltunski
    mRegionZ = z;
201 348dbeea Leszek Koltunski
    mRegionR = r;
202
203
    Effects3DSurfaceView view = findViewById(R.id.effects3dSurfaceView);
204 9e7b6dbd Leszek Koltunski
    view.getRenderer().setRegion(mRegionX, mRegionY, mRegionZ, mRegionR);
205 348dbeea Leszek Koltunski
    }
206
207
///////////////////////////////////////////////////////////////////////////////////////////////////
208
209
  public void setCenter(float x, float y, float z)
210
    {
211
    mCenterX = x;
212
    mCenterY = y;
213
    mCenterZ = z;
214
215
    Effects3DSurfaceView view = findViewById(R.id.effects3dSurfaceView);
216
    view.getRenderer().setCenter( mCenterX, mCenterY, mCenterZ );
217
    }
218
219
///////////////////////////////////////////////////////////////////////////////////////////////////
220
221
  public float getCenterX()
222
    {
223
    return mCenterX;
224
    }
225
226
///////////////////////////////////////////////////////////////////////////////////////////////////
227
228
  public float getCenterY()
229
    {
230
    return mCenterY;
231
    }
232
233
///////////////////////////////////////////////////////////////////////////////////////////////////
234
235
  public float getRegionX()
236
    {
237
    return mRegionX;
238
    }
239
240
///////////////////////////////////////////////////////////////////////////////////////////////////
241
242
  public float getRegionY()
243
    {
244
    return mRegionY;
245
    }
246
247 9e7b6dbd Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
248
249
  public float getRegionZ()
250
    {
251
    return mRegionZ;
252
    }
253
254 348dbeea Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
255
256
  public float getRegionR()
257
    {
258
    return mRegionR;
259
    }
260
261
///////////////////////////////////////////////////////////////////////////////////////////////////
262
263
  public int getWidth()
264
    {
265
    return mTexture==null ? 0: mTexture.getWidth();
266
    }
267
268
///////////////////////////////////////////////////////////////////////////////////////////////////
269
270
  public int getHeight()
271
    {
272
    return mTexture==null ? 0: mTexture.getHeight();
273
    }
274
275
///////////////////////////////////////////////////////////////////////////////////////////////////
276
277
  public int getDepth()
278
    {
279
    return mTexture==null ? 0: mTexture.getDepth(mMesh);
280
    }
281
282
///////////////////////////////////////////////////////////////////////////////////////////////////
283
284
  public int getScreenWidth()
285
    {
286 65f622c1 Leszek Koltunski
    Effects3DRenderer r = ((Effects3DSurfaceView)findViewById(R.id.effects3dSurfaceView)).getRenderer();
287
    return r.getWidth();
288 348dbeea Leszek Koltunski
    }
289
290
///////////////////////////////////////////////////////////////////////////////////////////////////
291
292
  void resetData()
293
    {
294
    mCenterX = 0.5f*getWidth();
295
    mCenterY = 0.5f*getHeight();
296
    mRegionX = 0;
297
    mRegionY = 0;
298 9e7b6dbd Leszek Koltunski
    mRegionZ = 0;
299 348dbeea Leszek Koltunski
    mRegionR = getWidth()/2;
300
301
    Effects3DSurfaceView view = findViewById(R.id.effects3dSurfaceView);
302
    Effects3DRenderer renderer= view.getRenderer();
303
304
    renderer.setCenter( mCenterX, mCenterY, mCenterZ );
305 9e7b6dbd Leszek Koltunski
    renderer.setRegion( mRegionX, mRegionY, mRegionZ, mRegionR );
306 348dbeea Leszek Koltunski
    }
307
308
///////////////////////////////////////////////////////////////////////////////////////////////////
309 65f622c1 Leszek Koltunski
310
  void resetMatrixEffects()
311
    {
312
    Effects3DSurfaceView view = findViewById(R.id.effects3dSurfaceView);
313
    Effects3DRenderer renderer= view.getRenderer();
314
315
    renderer.resetMatrixEffects();
316
    }
317
318 348dbeea Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
319
320
  public DistortedEffects getEffects()
321
    {
322
    return mEffects;
323
    }
324
325
///////////////////////////////////////////////////////////////////////////////////////////////////
326
327
  public void newEffect(View v)
328
    {
329 06c636a5 Leszek Koltunski
    int pos = mViewPager.getCurrentItem();
330
331
    if( pos>=0 && pos<NUM_TABS ) mTab[pos].newEffect();
332 348dbeea Leszek Koltunski
    }
333
334
///////////////////////////////////////////////////////////////////////////////////////////////////
335
336
  public void removeAll(View v)
337
    {
338 06c636a5 Leszek Koltunski
    int pos = mViewPager.getCurrentItem();
339
340
    if( pos>=0 && pos<NUM_TABS ) mTab[pos].removeAll();
341 348dbeea Leszek Koltunski
    }
342
343
///////////////////////////////////////////////////////////////////////////////////////////////////
344
345
  public void remove(View v)
346
    {
347 06c636a5 Leszek Koltunski
    int pos = mViewPager.getCurrentItem();
348
349
    if( pos>=0 && pos<NUM_TABS ) mTab[pos].remove(v);
350
    }
351
352
///////////////////////////////////////////////////////////////////////////////////////////////////
353
354
  void setTab(int pos, Effects3DTab tab)
355
    {
356
    if( pos>=0 && pos<NUM_TABS ) mTab[pos] = tab;
357 348dbeea Leszek Koltunski
    }
358
359
///////////////////////////////////////////////////////////////////////////////////////////////////
360
361
  boolean getShowCenter()
362
    {
363
    return mShowCenter;
364
    }
365
366
///////////////////////////////////////////////////////////////////////////////////////////////////
367
368
  boolean getShowRegion()
369
    {
370
    return mShowRegion;
371
    }
372
373
///////////////////////////////////////////////////////////////////////////////////////////////////
374
375
  public void showCenter(View view)
376
    {
377
    CheckBox box = (CheckBox)view;
378
    mShowCenter = box.isChecked();
379
380
    Effects3DSurfaceView sv = findViewById(R.id.effects3dSurfaceView);
381
    sv.getRenderer().showRegionAndCenter(mShowRegion,mShowCenter);
382
    }
383
384
///////////////////////////////////////////////////////////////////////////////////////////////////
385
386
  public void showRegion(View view)
387
    {
388
    CheckBox box = (CheckBox)view;
389
    mShowRegion = box.isChecked();
390
391
    Effects3DSurfaceView sv = findViewById(R.id.effects3dSurfaceView);
392
    sv.getRenderer().showRegionAndCenter(mShowRegion,mShowCenter);
393
    }
394
395
///////////////////////////////////////////////////////////////////////////////////////////////////
396
397
  public void showNormal(View view)
398
    {
399
    CheckBox box = (CheckBox)view;
400
    mShowNormal = box.isChecked();
401
402
    if ( mMesh!=null )
403
      {
404
      mMesh.setShowNormals(mShowNormal);
405
      }
406
    }
407
408
///////////////////////////////////////////////////////////////////////////////////////////////////
409
410
  public void triggerOIT(View view)
411
    {
412
    CheckBox box = (CheckBox)view;
413
    mUseOIT = box.isChecked();
414
415
    Effects3DSurfaceView sv = findViewById(R.id.effects3dSurfaceView);
416
    sv.getRenderer().useOIT(mUseOIT);
417
    }
418
419
///////////////////////////////////////////////////////////////////////////////////////////////////
420
// Overrides
421
///////////////////////////////////////////////////////////////////////////////////////////////////
422
423
  @Override
424
  protected void onPause()
425
    {
426
    GLSurfaceView mView = findViewById(R.id.effects3dSurfaceView);
427
    if( mView!=null ) mView.onPause();
428
429
    Distorted.onPause();
430
    super.onPause();
431
    }
432
433
///////////////////////////////////////////////////////////////////////////////////////////////////
434
    
435
  @Override
436
  protected void onResume()
437
    {
438
    super.onResume();
439
    GLSurfaceView mView = findViewById(R.id.effects3dSurfaceView);
440
    if( mView!=null ) mView.onResume();
441
    }
442
443
///////////////////////////////////////////////////////////////////////////////////////////////////
444
    
445
  @Override
446
  protected void onDestroy()
447
    {
448
    Distorted.onDestroy();
449
    super.onDestroy();
450
    }
451
452
  }