Revision dd19d6e0
Added by Leszek Koltunski over 5 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.