Rotazione dei 3 assi

final float GAP=PI/6;
final float asseMin=-PI-GAP,
            asseMax=+PI+GAP;

int   maxX, maxY;
int   Xc, Yc;
float dim1, dim12, dim2;
float asseX, asseY;

void setup()
{
   size(500, 500, P3D);
   frameRate(30);
   noStroke();

   maxX=width; maxY=height;
   Xc=width/2; Yc=height/2;

   dim1=0.75*width;
   dim12=dim1/2;
   dim2=0.025*width;
   
   noLoop();
}

void mouseMoved()
{
   asseY = +map(mouseX, 0, maxX-1, asseMin, asseMax);
   asseX = -map(mouseY, 0, maxY-1, asseMin, asseMax);

   redraw();
}

void draw()
{
   background(255);

   translate(Xc, Yc);
   rotateX(asseX);
   rotateY(asseY);

   fill(125, 0, 0); box(dim1, dim2, dim2);
   translate(dim12, 0);
   fill(255, 0, 0); sphere(dim2);
   translate(-dim12, 0);
   fill(0, 125, 0); box(dim2, dim1, dim2);
   translate(0, -dim12);
   fill(0, 255, 0); sphere(dim2);
   translate(0, dim12);
   fill(0, 0, 125); box(dim2, dim2, dim1);
   translate(0, 0, dim12);
   fill(0, 0, 255); sphere(dim2);
}