Revision 44771819
Added by Leszek Koltunski about 7 years ago
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
Further improve Olimpic. This seems to expose some Node bugs.