Revision dd19d6e0
Added by Leszek Koltunski over 4 years ago
src/main/java/org/distorted/examples/meshjoin/MeshJoinRenderer.java | ||
---|---|---|
24 | 24 |
import android.graphics.Paint; |
25 | 25 |
import android.opengl.GLSurfaceView; |
26 | 26 |
|
27 |
import org.distorted.library.effect.EffectType; |
|
27 | 28 |
import org.distorted.library.effect.MatrixEffectQuaternion; |
28 | 29 |
import org.distorted.library.effect.MatrixEffectScale; |
30 |
import org.distorted.library.effect.VertexEffectMove; |
|
31 |
import org.distorted.library.effect.VertexEffectRotate; |
|
32 |
import org.distorted.library.effect.VertexEffectScale; |
|
29 | 33 |
import org.distorted.library.effect.VertexEffectSink; |
30 | 34 |
import org.distorted.library.main.DistortedEffects; |
31 | 35 |
import org.distorted.library.main.DistortedLibrary; |
... | ... | |
100 | 104 |
public void onSurfaceChanged(GL10 glUnused, int width, int height) |
101 | 105 |
{ |
102 | 106 |
final float SCALE = 0.7f; |
103 |
mScreenMin = width<height ? width:height;
|
|
107 |
mScreenMin = Math.min(width, height);
|
|
104 | 108 |
float factor = SCALE*mScreenMin; |
105 | 109 |
mScale.set(factor,factor,factor); |
106 | 110 |
mScreen.resize(width, height); |
... | ... | |
118 | 122 |
mScreen.detachAll(); |
119 | 123 |
mScreen.attach(mTexture,mEffects,mMesh); |
120 | 124 |
|
121 |
VertexEffectSink.enable();
|
|
125 |
DistortedLibrary.setMax(EffectType.VERTEX, 7);
|
|
122 | 126 |
|
123 | 127 |
try |
124 | 128 |
{ |
... | ... | |
185 | 189 |
final float angleFaces = (float)((180/Math.PI)*(2*Math.asin(SQ3/3))); // angle between two faces of a tetrahedron |
186 | 190 |
final int MESHES=4; |
187 | 191 |
|
192 |
int association = 1; |
|
188 | 193 |
MeshBase[] meshes = new MeshTriangles[MESHES]; |
189 |
for(int i=0; i<MESHES; i++) meshes[i] = new MeshTriangles(10); |
|
190 |
/* |
|
191 |
MatrixEffect[] effects0 = new MatrixEffect[3]; |
|
192 |
effects0[0] = new MatrixEffectScale( new Static3D(1,SQ3/2,1) ); |
|
193 |
effects0[1] = new MatrixEffectRotate( new Static1D(90), new Static3D(1,0,0), new Static3D(0,0,0) ); |
|
194 |
effects0[2] = new MatrixEffectMove( new Static3D(0,-SQ3*SQ2/12,SQ3/12) ); |
|
195 |
|
|
196 |
meshes[0].apply(effects0); |
|
197 |
|
|
198 |
Static1D angle = new Static1D(angleFaces); |
|
199 |
Static3D axis = new Static3D(-1,0,0); |
|
200 |
Static3D center= new Static3D(0,-SQ3*SQ2/12,-SQ3/6); |
|
201 |
|
|
202 |
MatrixEffect[] effects1 = new MatrixEffect[5]; |
|
203 |
effects1[0] = effects0[0]; |
|
204 |
effects1[1] = effects0[1]; |
|
205 |
effects1[2] = effects0[2]; |
|
206 |
effects1[3] = new MatrixEffectRotate( new Static1D(180), new Static3D(0,0,1), center ); |
|
207 |
effects1[4] = new MatrixEffectRotate( angle, axis, center ); |
|
208 |
meshes[1].apply(effects1); |
|
209 |
|
|
210 |
axis.set(0.5f,0,-SQ3/2); |
|
211 |
center.set2(SQ3/3); |
|
212 |
meshes[2].apply(effects1); |
|
213 |
|
|
214 |
axis.set2(SQ3/2); |
|
215 |
meshes[3].apply(effects1); |
|
216 |
*/ |
|
217 |
Static4D[] textureMaps = new Static4D[MESHES]; |
|
218 | 194 |
|
219 |
for(int i=0; i<MESHES; i++) textureMaps[i] = new Static4D(i*0.25f,0.0f,0.25f,1.0f); |
|
195 |
for(int i=0; i<MESHES; i++) |
|
196 |
{ |
|
197 |
meshes[i] = new MeshTriangles(10); |
|
198 |
meshes[i].setEffectAssociation(0,association); |
|
199 |
association <<= 1; |
|
200 |
} |
|
220 | 201 |
|
202 |
Static4D[] textureMaps = new Static4D[MESHES]; |
|
203 |
for(int i=0; i<MESHES; i++) textureMaps[i] = new Static4D(i*0.25f,0.0f,0.25f,1.0f); |
|
221 | 204 |
MeshBase result = new MeshJoined(meshes); |
222 | 205 |
result.setTextureMap(textureMaps); |
223 | 206 |
|
207 |
Static1D angle = new Static1D(angleFaces); |
|
208 |
Static3D axis1 = new Static3D( -1, 0, 0); |
|
209 |
Static3D axis2 = new Static3D(0.5f, 0, -SQ3/2); |
|
210 |
Static3D axis3 = new Static3D(0.5f, 0, +SQ3/2); |
|
211 |
Static3D center1= new Static3D(0,-SQ3*SQ2/12,-SQ3/6); |
|
212 |
Static3D center2= new Static3D(0,-SQ3*SQ2/12,+SQ3/3); |
|
213 |
|
|
214 |
VertexEffectScale effect1 = new VertexEffectScale ( new Static3D(1,SQ3/2,1) ); |
|
215 |
VertexEffectRotate effect2 = new VertexEffectRotate( new Static1D(90), new Static3D(1,0,0), new Static3D(0,0,0) ); |
|
216 |
VertexEffectMove effect3 = new VertexEffectMove ( new Static3D(0,-SQ3*SQ2/12,SQ3/12) ); |
|
217 |
VertexEffectRotate effect4 = new VertexEffectRotate( new Static1D(180), new Static3D(0,0,1), center1 ); |
|
218 |
VertexEffectRotate effect5 = new VertexEffectRotate( angle, axis1, center1 ); |
|
219 |
VertexEffectRotate effect6 = new VertexEffectRotate( angle, axis2, center2 ); |
|
220 |
VertexEffectRotate effect7 = new VertexEffectRotate( angle, axis3, center2 ); |
|
221 |
|
|
222 |
effect1.setMeshAssociation(15); // apply to all 4 meshes |
|
223 |
effect2.setMeshAssociation(15); // apply to all 4 meshes |
|
224 |
effect3.setMeshAssociation(15); // apply to all 4 meshes |
|
225 |
effect4.setMeshAssociation(14); // apply to mesh[1], [2] and [3] |
|
226 |
effect5.setMeshAssociation( 2); // apply only to mesh[1] |
|
227 |
effect6.setMeshAssociation( 0); // apply onlt to mesh[2] |
|
228 |
effect7.setMeshAssociation( 0); // apply only to mesh[3] |
|
229 |
|
|
230 |
result.apply(effect1); |
|
231 |
result.apply(effect2); |
|
232 |
result.apply(effect3); |
|
233 |
result.apply(effect4); |
|
234 |
result.apply(effect5); |
|
235 |
result.apply(effect6); |
|
236 |
result.apply(effect7); |
|
237 |
|
|
224 | 238 |
return result; |
225 | 239 |
} |
226 | 240 |
} |
Also available in: Unified diff
Some progress with 'MeshJoin' app.