Project

General

Profile

« Previous | Next » 

Revision 44771819

Added by Leszek Koltunski about 7 years ago

Further improve Olimpic. This seems to expose some Node bugs.

View differences:

src/main/java/org/distorted/examples/olimpic/OlimpicRenderer.java
38 38
import org.distorted.library.Distorted;
39 39
import org.distorted.library.DistortedTexture;
40 40

  
41
import android.content.Context;
42 41
import android.graphics.Bitmap;
43 42
import android.graphics.BitmapFactory;
44 43
import android.opengl.GLES30;
......
56 55
   private DistortedNode mRoot;
57 56
   private DistortedTexture mLeaf;
58 57
   private DistortedScreen mScreen;
58
   private MeshFlat mMesh;
59 59
   private int mScreenW, mScreenH;
60 60
   private int mPrevRendered, mCurrRendered;
61 61

  
62
   private DistortedNode[] mCircleNode = new DistortedNode[NUM_CIRCLES];
63
   private DistortedEffects[] mEffects = new DistortedEffects[NUM_LEAVES];
64

  
62 65
///////////////////////////////////////////////////////////////////////////////////////////////////
63 66

  
64
   void pressed(int color, int number)
67
   void pressed(int color, int number, boolean checked)
65 68
     {
66
     android.util.Log.d("Olimpic","Color: "+color+" number:"+number+" pressed!");
69
     android.util.Log.d("Olimpic","Color: "+color+" number:"+number+" checked: "+checked);
70

  
71
     if( color>=0 && color<NUM_CIRCLES )
72
       {
73
       if( number==0 )
74
         {
75
         if( checked ) mRoot.attach(mCircleNode[color]);
76
         else          mRoot.detach(mCircleNode[color]);
77
         }
78
       else if( number>0 && number<=NUM_LEAVES )
79
         {
80
         if( checked ) mCircleNode[color].attach( mLeaf, mEffects[number-1], mMesh);
81
         else          mCircleNode[color].detach(mEffects[number-1]);
82
         }
83
       }
67 84
     }
68 85

  
69 86
///////////////////////////////////////////////////////////////////////////////////////////////////
......
76 93
      mCurrRendered = 0;
77 94

  
78 95
      mLeaf = new DistortedTexture(LEAF_SIZE,LEAF_SIZE);
79
      MeshFlat mesh = new MeshFlat(1,1);
96
      DistortedTexture surface = new DistortedTexture(3*LEAF_SIZE,3*LEAF_SIZE);
97
      mMesh = new MeshFlat(1,1);
80 98
      DistortedEffects effects = new DistortedEffects();
81 99

  
82 100
      mScreenW = 9*LEAF_SIZE;
83 101
      mScreenH = 9*LEAF_SIZE;
84
      mRoot = new DistortedNode(new DistortedTexture(mScreenW,mScreenH), effects, mesh);
102
      mRoot = new DistortedNode(new DistortedTexture(mScreenW,mScreenH), effects, mMesh);
85 103
     
86 104
      Dynamic1D rot = new Dynamic1D(5000,0.0f);
87 105
      rot.setMode(Dynamic1D.MODE_JUMP);
88 106
      rot.add(new Static1D(  0));
89 107
      rot.add(new Static1D(360));
90
      
91
      DistortedNode[] mCircleNode = new DistortedNode[NUM_CIRCLES];
92
    
108

  
93 109
      int[] colors    = new int[] {0,0,1,  0,0,0,  1,0,0,  1,1,0,  0,1,0}; // blue, black, red, yellow, green  
94 110
      int[] positions = new int[] {0,2*LEAF_SIZE,  3*LEAF_SIZE,2*LEAF_SIZE,  6*LEAF_SIZE,2*LEAF_SIZE,  3*LEAF_SIZE/2,9*LEAF_SIZE/2,  9*LEAF_SIZE/2,9*LEAF_SIZE/2};
95 111
      
......
97 113
      Static3D axis   = new Static3D(0,0,1);
98 114
      Static3D moveVector = new Static3D(0,LEAF_SIZE,0);
99 115

  
100
      for(int i=0; i<NUM_CIRCLES; i++)
116
      for(int j=0; j<NUM_LEAVES; j++)
101 117
        {
102
        if( i<=1 )
103
          {
104
          effects = new DistortedEffects();
105
          mCircleNode[i] = new DistortedNode(new DistortedTexture(3*LEAF_SIZE,3*LEAF_SIZE), effects, mesh);
106
        
107
          for(int j=0; j<NUM_LEAVES-i; j++)
108
            {
109
            effects = new DistortedEffects();
110
            mCircleNode[i].attach(mLeaf, effects, mesh);
111
            effects.rotate( new Static1D(j*(360/NUM_LEAVES)), axis, center );
112
            effects.move(moveVector);
113
            }
114
          }
115
        else
116
          {
117
          mCircleNode[i] = new DistortedNode(mCircleNode[0], Distorted.CLONE_SURFACE |Distorted.CLONE_CHILDREN);
118
          }
118
        mEffects[j] = new DistortedEffects();
119
        mEffects[j].rotate( new Static1D(j*(360/NUM_LEAVES)), axis, center );
120
        mEffects[j].move(moveVector);
121
        }
119 122

  
120
        mRoot.attach(mCircleNode[i]);
121
        effects = mCircleNode[i].getEffects();
123
      for(int i=0; i<NUM_CIRCLES; i++)
124
        {
125
        effects = new DistortedEffects();
122 126
        effects.move( new Static3D(positions[2*i], positions[2*i+1], 0) );
123 127
        effects.rotate( rot, axis, center );
124 128
        effects.chroma( new Static1D(0.5f), new Static3D(colors[3*i],colors[3*i+1], colors[3*i+2]) );
129

  
130
        mCircleNode[i] = new DistortedNode( surface, effects, mMesh);
131
        mRoot.attach(mCircleNode[i]);
132

  
133
        for(int j=0; j<NUM_LEAVES; j++) mCircleNode[i].attach(mLeaf, mEffects[j], mMesh);
125 134
        }
126 135

  
127 136
      mScreen = new DistortedScreen();

Also available in: Unified diff