//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
final int numVertici = 8,
numFacce = 6;
Faccia facce[]=new Faccia[numFacce];
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
final int CHIARO = 255;
final int SCURO = 0;
final int TRASP = 127;
final color COLORE = color(SCURO, CHIARO, SCURO, TRASP);
final color TRATTO = color(CHIARO/2);
final color SFONDO = color(CHIARO);
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
final int DIM = 125;
final float deltaR = PI/200;
float angoloR=0,
WIDTH2 ,
HEIGHT2;
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Punto vertici[]= {
new Punto( 1, 1, 1), // 0
new Punto( 1, 1,-1), // 1
new Punto( 1,-1, 1), // 2
new Punto( 1,-1,-1), // 3
new Punto(-1, 1, 1), // 4
new Punto(-1, 1,-1), // 5
new Punto(-1,-1, 1), // 6
new Punto(-1,-1,-1) // 7
};
int quadrato[][]={
{ 0, 1, 3, 2 }, // 0
{ 1, 5, 7, 3 }, // 1
{ 5, 4, 6, 7 }, // 2
{ 4, 0, 2, 6 }, // 3
{ 2, 3, 7, 6 }, // 4
{ 5, 1, 0, 4 } // 5
};
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Faccia nuovaFaccia(int x)
{
return new Faccia(
vertici[quadrato[x][0]],
vertici[quadrato[x][1]],
vertici[quadrato[x][2]],
vertici[quadrato[x][3]],
COLORE
);
}
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void setup()
{
size(500, 500, P3D);
stroke(TRATTO);
lights();
WIDTH2 =width/2;
HEIGHT2=height/2;
creaFacce();
}
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void draw()
{
background(SFONDO);
angoloR += deltaR;
if(angoloR > TWO_PI)
angoloR -= TWO_PI;
pushMatrix();
translate(WIDTH2, HEIGHT2);
rotateX(-map(mouseY, 0, width, 0, TWO_PI));
rotateY(angoloR);
scale(DIM);
for(int i=0; i<numFacce; i++)
{
if(facce[i]!=null)
facce[i].draw();
}
popMatrix();
visControllo();
}
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
class Punto
{
float x, y, z;
Punto(float nx, float ny, float nz)
{
x=nx; y=ny;
z=nz;
}
}
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
class Faccia
{
Punto p1, p2, p3, p4;
color c;
Faccia(Punto np1, Punto np2, Punto np3, Punto np4, color nc)
{
p1=np1; p2=np2; p3=np3; p4=np4;
c=nc;
}
void draw()
{
fill(c);
beginShape(QUADS);
vertex(p1.x, p1.y, p1.z);
vertex(p2.x, p2.y, p2.z);
vertex(p3.x, p3.y, p3.z);
vertex(p4.x, p4.y, p4.z);
endShape();
}
}
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
final int dimCONTR = 20;
int posControlli[][]=
{
{ 10, 30 , 10+dimCONTR, 30+dimCONTR },
{ 30, 30 , 30+dimCONTR, 30+dimCONTR },
{ 50, 30 , 50+dimCONTR, 30+dimCONTR },
{ 70, 30 , 70+dimCONTR, 30+dimCONTR },
{ 30, 50 , 30+dimCONTR, 50+dimCONTR },
{ 30, 10 , 30+dimCONTR, 10+dimCONTR }
};
void visControllo()
{
for(int i=0; i < numFacce; i++)
{
if(facce[i]==null) fill(SFONDO);
else fill(COLORE);
rect(posControlli[i][0], posControlli[i][1], dimCONTR, dimCONTR);
}
}
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void mousePressed()
{
int X=mouseX;
int Y=mouseY;
for(int i=0; i < numFacce; i++)
{
if(X > posControlli[i][0] && X < posControlli[i][2] &&
Y > posControlli[i][1] && Y < posControlli[i][3])
{
if(facce[i]==null) facce[i]=nuovaFaccia(i);
else facce[i]=null;
return;
}
}
creaFacce();
}
void creaFacce()
{
for(int i=0; i < numFacce; i++)
{
switch((int)random(3))
{
case 0:
case 1: facce[i]=nuovaFaccia(i); break;
case 2: facce[i]=null; break;
}
}
}
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++