Project

General

Profile

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

examples / src / main / java / org / distorted / examples / vertex3d / Vertex3DActivity.java @ 08f92d82

1
///////////////////////////////////////////////////////////////////////////////////////////////////
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.vertex3d;
21

    
22
import android.app.Activity;
23
import android.opengl.GLSurfaceView;
24
import android.os.Bundle;
25
import android.view.View;
26
import android.widget.LinearLayout;
27
import android.widget.SeekBar;
28
import android.widget.SeekBar.OnSeekBarChangeListener;
29
import android.widget.TextView;
30

    
31
import org.distorted.examples.R;
32
import org.distorted.library.Distorted;
33
import org.distorted.library.EffectNames;
34

    
35
///////////////////////////////////////////////////////////////////////////////////////////////////
36

    
37
public class Vertex3DActivity extends Activity implements OnSeekBarChangeListener
38
{
39
    private SeekBar bar;
40
    private TextView textDeform, textDistort, textSink, textSwirl;
41
    private int moveX, moveY, moveZ;
42
    private int scaleX, scaleY, scaleZ;
43
    private int rotateX, rotateY, rotateZ, rotateA;
44
    private int shearX, shearY, shearZ;
45
    
46
    private int maxX, maxY, maxZ;
47
    
48
    private float fmoveX, fmoveY, fmoveZ;
49
    private float fscaleX, fscaleY, fscaleZ;
50
    private float frotateX, frotateY, frotateZ, frotateA;
51
    private float fshearX, fshearY, fshearZ;
52
    
53
    private EffectNames[] effects = new EffectNames[4];
54
    
55
///////////////////////////////////////////////////////////////////////////////////////////////////
56
    
57
    @Override
58
    protected void onCreate(Bundle icicle) 
59
      {
60
      super.onCreate(icicle);
61
      setContentView(R.layout.vertex3dlayout);
62
      Default(null);
63
      }
64

    
65
///////////////////////////////////////////////////////////////////////////////////////////////////
66

    
67
    public void Default(View view)
68
      {
69
      effects[0] = EffectNames.DEFORM;
70
      effects[1] = EffectNames.DISTORT;
71
      effects[2] = EffectNames.SINK;
72
      effects[3] = EffectNames.SWIRL;
73
    
74
      moveX = 50;
75
      moveY = 50;
76
      moveZ = 50;
77
      
78
      scaleX = 50;
79
      scaleY = 50;
80
      scaleZ = 50;
81
      
82
      rotateX = 100;
83
      rotateY =  50;
84
      rotateZ =  50;
85
      rotateA =  50;
86
      
87
      shearX = 50;
88
      shearY = 50;
89
      shearZ = 50;
90
      
91
      addViews();
92
      }
93
    
94
///////////////////////////////////////////////////////////////////////////////////////////////////
95
    
96
    private void addViews()
97
      {
98
      LinearLayout layout = (LinearLayout)findViewById(R.id.vertex3dlayout);
99
    
100
      layout.removeAllViews();
101
      
102
      View deform = getLayoutInflater().inflate(R.layout.vertex3ddeform , null);
103
      View distort= getLayoutInflater().inflate(R.layout.vertex3ddistort, null);
104
      View sink   = getLayoutInflater().inflate(R.layout.vertex3dsink   , null);
105
      View swirl  = getLayoutInflater().inflate(R.layout.vertex3dswirl  , null);
106
     
107
      for( int i=effects.length-1 ; i>=0 ; i-- )
108
        {
109
        switch(effects[i])
110
          {
111
          case DEFORM : layout.addView(deform , 0); break;
112
          case DISTORT: layout.addView(distort, 0); break;
113
          case SINK   : layout.addView(sink   , 0); break;
114
          case SWIRL  : layout.addView(swirl  , 0); break;
115
          }
116
        }
117
      
118
      textDeform = (TextView)findViewById(R.id.vertex3ddeformText);
119
      textDistort= (TextView)findViewById(R.id.vertex3ddistortText);
120
      textSink   = (TextView)findViewById(R.id.vertex3dsinkText);
121
      textSwirl  = (TextView)findViewById(R.id.vertex3dswirlText);
122
     
123
      setDeformText();
124
      setDistortText();
125
      setSinkText();
126
      setSwirlText();
127
      
128
      setBar(R.id.vertex3ddeformBar1, moveX);
129
      setBar(R.id.vertex3ddeformBar2, moveY);
130
      setBar(R.id.vertex3ddeformBar3, moveZ);
131
      
132
      setBar(R.id.vertex3ddistortBar1, scaleX);
133
      setBar(R.id.vertex3ddistortBar2, scaleY);
134
      setBar(R.id.vertex3ddistortBar3, scaleZ);
135
      
136
      setBar(R.id.vertex3dsinkBar1, rotateX);
137
      setBar(R.id.vertex3dsinkBar2, rotateY);
138
      setBar(R.id.vertex3dsinkBar3, rotateZ);
139

    
140
      setBar(R.id.vertex3dswirlBar1, shearX);
141
      setBar(R.id.vertex3dswirlBar2, shearY);
142
      setBar(R.id.vertex3dswirlBar3, shearZ);
143
      
144
      Vertex3DRenderer.setOrder(effects);
145
      }
146

    
147
///////////////////////////////////////////////////////////////////////////////////////////////////
148

    
149
    private void moveUp(EffectNames name)
150
      {
151
      int len = effects.length-1;
152
      int index = -1;
153

    
154
      for(int i=0; i<=len; i++)
155
        {
156
        if( effects[i]==name )
157
          {
158
          index=i;
159
          break;
160
          }
161
        }
162

    
163
      if( index==0 )
164
        {
165
        for(int i=0; i<len; i++)
166
          effects[i] = effects[i+1];
167

    
168
        effects[len] = name;
169
        }
170
      else if( index>0 )
171
        {
172
        effects[index]   = effects[index-1];
173
        effects[index-1] = name;
174
        }
175

    
176
      addViews();
177
      }
178

    
179
///////////////////////////////////////////////////////////////////////////////////////////////////
180

    
181
    public void ButtonDeform(View v)
182
      {
183
      moveUp(EffectNames.DEFORM);
184
      }
185

    
186
///////////////////////////////////////////////////////////////////////////////////////////////////
187

    
188
    public void ButtonDistort(View v)
189
      {
190
      moveUp(EffectNames.DISTORT);
191
      }
192

    
193
///////////////////////////////////////////////////////////////////////////////////////////////////
194

    
195
    public void ButtonSink(View v)
196
      {
197
      moveUp(EffectNames.SINK);
198
      }
199

    
200
///////////////////////////////////////////////////////////////////////////////////////////////////
201

    
202
    public void ButtonSwirl(View v)
203
      {
204
      moveUp(EffectNames.SWIRL);
205
      }
206

    
207
///////////////////////////////////////////////////////////////////////////////////////////////////
208

    
209
    private void setBar(int id, int value)
210
      {
211
      bar = (SeekBar)findViewById(id);
212
      bar.setOnSeekBarChangeListener(this);
213
      bar.setProgress(value);
214
      }
215

    
216
///////////////////////////////////////////////////////////////////////////////////////////////////
217

    
218
    private void computeDeform()
219
      {
220
      fmoveX = (moveX-50)*maxX/50.0f;
221
      fmoveY = (moveY-50)*maxY/50.0f;
222
      fmoveZ = (moveZ-50)*maxZ/50.0f;
223

    
224
      Vertex3DRenderer.setDeform( fmoveX, fmoveY, fmoveZ);
225
      }
226

    
227
///////////////////////////////////////////////////////////////////////////////////////////////////
228

    
229
    private void setDeformText()
230
      {
231
      fmoveX = ((int)(100*fmoveX))/100.0f;
232
      fmoveY = ((int)(100*fmoveY))/100.0f;
233
      fmoveZ = ((int)(100*fmoveZ))/100.0f;
234

    
235
      textDeform.setText("deform("+fmoveX+" , "+fmoveY+" , "+fmoveZ+")");
236
      }
237

    
238
///////////////////////////////////////////////////////////////////////////////////////////////////
239

    
240
    private void computeDistort()
241
      {
242
      fscaleX = (scaleX>50 ? 0.18f : 0.018f)*(scaleX-50)+1;
243
      fscaleY = (scaleY>50 ? 0.18f : 0.018f)*(scaleY-50)+1;
244
      fscaleZ = (scaleZ>50 ? 0.18f : 0.018f)*(scaleZ-50)+1;
245

    
246
      Vertex3DRenderer.setDistort(fscaleX, fscaleY, fscaleZ);
247
      }
248

    
249
///////////////////////////////////////////////////////////////////////////////////////////////////
250

    
251
    private void setDistortText()
252
      {
253
      fscaleX = ((int)(100*fscaleX))/100.0f;
254
      fscaleY = ((int)(100*fscaleY))/100.0f;
255
      fscaleZ = ((int)(100*fscaleZ))/100.0f;
256

    
257
      textDistort.setText("distort("+fscaleX+" , "+fscaleY+" , "+fscaleZ+")");
258
      }
259

    
260
///////////////////////////////////////////////////////////////////////////////////////////////////
261

    
262
    private void computeSink()
263
      {
264
      frotateX = (rotateX-50)/50.0f;
265
      frotateY = (rotateY-50)/50.0f;
266
      frotateZ = (rotateZ-50)/50.0f;
267

    
268
      Vertex3DRenderer.setSink( frotateA, frotateX, frotateY, frotateZ );
269
      }
270

    
271
///////////////////////////////////////////////////////////////////////////////////////////////////
272

    
273
    private void setSinkText()
274
      {
275
      frotateX = ((int)(100*frotateX))/100.0f;
276
      frotateY = ((int)(100*frotateY))/100.0f;
277
      frotateZ = ((int)(100*frotateZ))/100.0f;
278

    
279
      frotateA = ((rotateA-50)*180)/50;
280

    
281
      textSink.setText("sink( "+frotateA+" ("+frotateX+","+frotateY+","+frotateZ+") )");
282
      }
283

    
284
///////////////////////////////////////////////////////////////////////////////////////////////////
285

    
286
    private void computeSwirl()
287
      {
288
      fshearX = (shearX-50)/25.0f;
289
      fshearY = (shearY-50)/25.0f;
290
      fshearZ = (shearZ-50)/25.0f;
291

    
292
      Vertex3DRenderer.setSwirl( fshearX, fshearY, fshearZ );
293
      }
294
    
295
///////////////////////////////////////////////////////////////////////////////////////////////////
296

    
297
    private void setSwirlText()
298
      {
299
      fshearX = ((int)(100*fshearX))/100.0f;
300
      fshearY = ((int)(100*fshearY))/100.0f;
301
      fshearZ = ((int)(100*fshearZ))/100.0f;
302
      
303
      textSwirl.setText("swirl("+fshearX+" , "+fshearY+" , "+fshearZ+")");
304
      }
305
   
306
///////////////////////////////////////////////////////////////////////////////////////////////////
307
    
308
    @Override
309
    protected void onPause() 
310
      {
311
      GLSurfaceView mView = (GLSurfaceView) this.findViewById(R.id.vertex3dSurfaceView);
312
      mView.onPause(); 
313
      super.onPause();
314
      }
315

    
316
///////////////////////////////////////////////////////////////////////////////////////////////////
317
    
318
    @Override
319
    protected void onResume() 
320
      {
321
      super.onResume();
322
      GLSurfaceView mView = (GLSurfaceView) this.findViewById(R.id.vertex3dSurfaceView);
323
      mView.onResume();
324
      }
325

    
326
///////////////////////////////////////////////////////////////////////////////////////////////////
327
    
328
    @Override
329
    public void onWindowFocusChanged(boolean hasFocus) 
330
      {
331
      super.onWindowFocusChanged(hasFocus);
332
  
333
      GLSurfaceView mView = (GLSurfaceView) this.findViewById(R.id.vertex3dSurfaceView);
334
      
335
      maxX = mView.getWidth();
336
      maxY = mView.getHeight();
337
      maxZ = (maxX+maxY)/2;
338
      }
339

    
340
///////////////////////////////////////////////////////////////////////////////////////////////////
341
    
342
    @Override
343
    protected void onDestroy() 
344
      {
345
      Distorted.onDestroy();  
346
      super.onDestroy();
347
      }
348
    
349
///////////////////////////////////////////////////////////////////////////////////////////////////
350
    
351
    public void onProgressChanged(SeekBar bar, int progress, boolean fromUser) 
352
      {
353
      switch (bar.getId()) 
354
        {
355
        case R.id.vertex3ddeformBar1  : moveX = progress; computeDeform()  ; setDeformText()  ; break;
356
        case R.id.vertex3ddeformBar2  : moveY = progress; computeDeform()  ; setDeformText()  ; break;
357
        case R.id.vertex3ddeformBar3  : moveZ = progress; computeDeform()  ; setDeformText()  ; break;
358
        
359
        case R.id.vertex3ddistortBar1 : scaleX= progress; computeDistort() ; setDistortText() ; break;
360
        case R.id.vertex3ddistortBar2 : scaleY= progress; computeDistort() ; setDistortText() ; break;
361
        case R.id.vertex3ddistortBar3 : scaleZ= progress; computeDistort() ; setDistortText() ; break;
362
        
363
        case R.id.vertex3dsinkBar1    : rotateX=progress; computeSink()    ; setSinkText()    ; break;
364
        case R.id.vertex3dsinkBar2    : rotateY=progress; computeSink()    ; setSinkText()    ; break;
365
        case R.id.vertex3dsinkBar3    : rotateZ=progress; computeSink()    ; setSinkText()    ; break;
366

    
367
        case R.id.vertex3dswirlBar1   : shearX= progress; computeSwirl()   ; setSwirlText()   ; break;
368
        case R.id.vertex3dswirlBar2   : shearY= progress; computeSwirl()   ; setSwirlText()   ; break;
369
        case R.id.vertex3dswirlBar3   : shearZ= progress; computeSwirl()   ; setSwirlText()   ; break;
370
        }
371
      }
372

    
373
///////////////////////////////////////////////////////////////////////////////////////////////////
374

    
375
    public void onStartTrackingTouch(SeekBar bar) { }
376
    
377
///////////////////////////////////////////////////////////////////////////////////////////////////
378

    
379
    public void onStopTrackingTouch(SeekBar bar)  { }
380
    
381
}
(1-1/3)