P3D running extremely slow

Guys pls help I don’t know why this code runs really slow.

//SEQUENCES OF MOVING CIRCLES
float xPosition = 0;
float yPosition;
float aPosition = 0;
float bPosition;
float onePosition = 0;
float twoPosition;
float threePosition = 0;
float fourPosition;
float fivePosition = 0;
float sixPosition;
float sevenPosition = 0;
float eightPosition;
float ninePosition = 0;
float tenPosition;
float elevenPosition = 0;
float twelvePosition;
float thirteenPosition = 0;
float fourteenPosition;
float fifteenPosition = 0;
float sixteenPosition;
float seventeenPosition = 0;
float eighteenPosition;
float nineteenPosition = 0;
float tweentyPosition;
float tweentyonePosition = 0;
float tweentytwoPosition;

//ANIMATED GIF
PImage[] gifone = new PImage[67];
int gifoneX = -100, gifoneY = 0;

void setup () {
fullScreen (P3D);
frameRate(50);
smooth();
noStroke ();

//sequences of moving circles
bPosition = 100;
yPosition = 150;
twoPosition = 200;
fourPosition = 250;
sixPosition = 300;
eightPosition = 350;
tenPosition = 400;
twelvePosition = 450;
fourteenPosition = 500;
eighteenPosition = 550;
tweentyPosition = 600;
tweentytwoPosition = 650;

gifone[0] = loadImage( “0.gif” );
gifone[1] = loadImage( “1.gif” );
gifone[2] = loadImage( “2.gif” );
gifone[3] = loadImage( “3.gif” );
gifone[4] = loadImage( “4.gif” );
gifone[5] = loadImage( “5.gif” );
gifone[6] = loadImage( “6.gif” );
gifone[7] = loadImage( “7.gif” );
gifone[8] = loadImage( “8.gif” );
gifone[9] = loadImage( “9.gif” );
gifone[10] = loadImage( “10.gif” );
gifone[11] = loadImage( “11.gif” );
gifone[12] = loadImage( “12.gif” );
gifone[13] = loadImage( “13.gif” );
gifone[14] = loadImage( “14.gif” );
gifone[15] = loadImage( “15.gif” );
gifone[16] = loadImage( “16.gif” );
gifone[17] = loadImage( “17.gif” );
gifone[18] = loadImage( “18.gif” );
gifone[19] = loadImage( “19.gif” );
gifone[20] = loadImage( “20.gif” );
gifone[21] = loadImage( “21.gif” );
gifone[22] = loadImage( “22.gif” );
gifone[23] = loadImage( “23.gif” );
gifone[24] = loadImage( “24.gif” );
gifone[25] = loadImage( “25.gif” );
gifone[26] = loadImage( “26.gif” );
gifone[27] = loadImage( “27.gif” );
gifone[28] = loadImage( “28.gif” );
gifone[29] = loadImage( “29.gif” );
gifone[30] = loadImage( “30.gif” );
gifone[31] = loadImage( “31.gif” );
gifone[32] = loadImage( “32.gif” );
gifone[33] = loadImage( “33.gif” );
gifone[34] = loadImage( “34.gif” );
gifone[35] = loadImage( “35.gif” );
gifone[36] = loadImage( “36.gif” );
gifone[37] = loadImage( “37.gif” );
gifone[38] = loadImage( “38.gif” );
gifone[39] = loadImage( “39.gif” );
gifone[40] = loadImage( “40.gif” );
gifone[41] = loadImage( “41.gif” );
gifone[42] = loadImage( “42.gif” );
gifone[43] = loadImage( “43.gif” );
gifone[44] = loadImage( “44.gif” );
gifone[45] = loadImage( “45.gif” );
gifone[46] = loadImage( “46.gif” );
gifone[47] = loadImage( “47.gif” );
gifone[48] = loadImage( “48.gif” );
gifone[49] = loadImage( “49.gif” );
gifone[50] = loadImage( “50.gif” );
gifone[51] = loadImage( “51.gif” );
gifone[52] = loadImage( “52.gif” );
gifone[53] = loadImage( “53.gif” );
gifone[54] = loadImage( “54.gif” );
gifone[55] = loadImage( “55.gif” );
gifone[56] = loadImage( “56.gif” );
gifone[57] = loadImage( “57.gif” );
gifone[58] = loadImage( “58.gif” );
gifone[59] = loadImage( “59.gif” );
gifone[60] = loadImage( “60.gif” );
gifone[61] = loadImage( “61.gif” );
gifone[62] = loadImage( “62.gif” );
gifone[63] = loadImage( “63.gif” );
gifone[64] = loadImage( “64.gif” );
gifone[65] = loadImage( “65.gif” );
gifone[66] = loadImage( “66.gif” );
}

void mousePressed () {
noLoop ();
}
void mouseReleased () {
loop ();
}
void draw () {
background(255);

//animated gif
image( gifone[frameCount%67], gifoneX, gifoneY);
gifoneX = gifoneX + 5;
if ( gifoneX > width + 10) {
gifoneX = -250;
}

loop();
//sequences of circles
//ab
fill (0, 20, 220);
ellipse(aPosition, bPosition, 50, 50);
aPosition +=10;
//xy
fill (0, 20, 220);
ellipse(xPosition, yPosition, 50, 50);
xPosition +=20;
//12
fill (0, 20, 220);
ellipse(onePosition, twoPosition, 50, 50);
onePosition +=30;
//34
fill (0, 20, 220);
ellipse(threePosition, fourPosition, 50, 50);
threePosition +=40;
//56
fill (0, 20, 220);
ellipse(fivePosition, sixPosition, 50, 50);
fivePosition +=50;
//78
fill (0, 20, 220);
ellipse(sevenPosition, eightPosition, 50, 50);
sevenPosition +=60;
//910
fill (0, 20, 220);
ellipse(ninePosition, tenPosition, 50, 50);
ninePosition +=70;
//1112
fill (0, 20, 220);
ellipse(elevenPosition, twelvePosition, 50, 50);
elevenPosition +=70;
//1314
fill (0, 20, 220);
ellipse(thirteenPosition, fourteenPosition, 50, 50);
thirteenPosition +=80;
//1516
fill (0, 20, 220);
ellipse(fifteenPosition, sixteenPosition, 50, 50);
fifteenPosition +=90;
//1718
fill (0, 20, 220);
ellipse(seventeenPosition, eighteenPosition, 50, 50);
seventeenPosition +=100;
//1920
fill (0, 20, 220);
ellipse(nineteenPosition, tweentyPosition, 50, 50);
nineteenPosition +=110;
//2122
fill (0, 20, 220);
ellipse(tweentyonePosition, tweentytwoPosition, 50, 50);
tweentyonePosition +=120;

loop ();
//interactive spheres
//sphere1
translate(150, height/2, 0);
rotateX(mouseY * 0.05);
rotateY(mouseX * 0.05);
fill(mouseX * 2, 0, 160);
sphereDetail(mouseX / 1);
sphere(30);
noStroke();
directionalLight(250, 230, 255, -1, 0, 0);

//sphere 2
translate(200, height/2, 0);
rotateX(mouseY * 0.05);
rotateY(mouseX * 0.05);
fill(mouseX * 2, 0, 160);
sphereDetail(mouseX / 4);
sphere(20);
noStroke();
directionalLight(250, 230, 255, -1, 0, 0);

//sphere 3
translate(300, height/2, 0);
rotateX(mouseY * 0.05);
rotateY(mouseX * 0.05);
fill(mouseX * 2, 0, 160);
sphereDetail(mouseX / 4);
sphere(30);
noStroke();
directionalLight(250, 230, 255, -1, 0, 0);

//sphere 4
translate(400, height/2, 0);
rotateX(mouseY * 0.05);
rotateY(mouseX * 0.05);
fill(mouseX * 2, 0, 160);
sphereDetail(mouseX / 4);
sphere(40);
noStroke();
directionalLight(250, 230, 255, -1, 0, 0);

//sphere 5
translate(500, height/2, 0);
rotateX(mouseY * 0.05);
rotateY(mouseX * 0.05);
fill(mouseX * 2, 0, 160);
sphereDetail(mouseX / 4);
sphere(50);
noStroke();
directionalLight(250, 230, 255, -1, 0, 0);

//sphere 6
translate(600, height/2, 0);
rotateX(mouseY * 0.05);
rotateY(mouseX * 0.05);
fill(mouseX * 2, 0, 160);
sphereDetail(mouseX / 4);
sphere(60);
noStroke();
directionalLight(250, 230, 255, -1, 0, 0);

//sphere 7
translate(700, height/2, 0);
rotateX(mouseY * 0.05);
rotateY(mouseX * 0.05);
fill(mouseX * 2, 0, 160);
sphereDetail(mouseX / 4);
sphere(70);
noStroke();
directionalLight(250, 230, 255, -1, 0, 0);

}

much too high

should maximum be around 23 imho

you can say

float mySphereDetail = map (mouseX, 0,width, 1, 30); 
sphereDetail(mySphereDetail);

Translate

you have several blocks with translate()

you can isolate them with

pushMatrix(); 
translate();
...
...

popMatrix();

otherwise the translate add up and your stuff ends up much more far to the right than you expect

Chrisir

Thanks! I’ll attempt that

I’ve imported sound into the sketch and suddenly it runs smoothly now. Here’s the new code.

import processing.sound.*;
SoundFile file;

//SEQUENCES OF MOVING CIRCLES
//Name variable ‘xPosition’ with the value 0
float xPosition = 0;
float yPosition;
float aPosition = 0;
float bPosition;
float onePosition = 0;
float twoPosition;
float threePosition = 0;
float fourPosition;
float fivePosition = 0;
float sixPosition;
float sevenPosition = 0;
float eightPosition;
float ninePosition = 0;
float tenPosition;
float elevenPosition = 0;
float twelvePosition;
float thirteenPosition = 0;
float fourteenPosition;
float fifteenPosition = 0;
float sixteenPosition;
float seventeenPosition = 0;
float eighteenPosition;
float nineteenPosition = 0;
float tweentyPosition;
float tweentyonePosition = 0;
float tweentytwoPosition;

//ANIMATED GIFS
PImage[] gifone = new PImage[67];
int gifoneX = -1500, gifoneY = -100;

//SOUND, name variable ‘L’ for duration
float L;

//MORPH
//set up 2 arrays to store the vertices of 2 shapes (circle+square)
ArrayList circle = new ArrayList();
ArrayList square = new ArrayList();

//set up arraylist for a 3rd set of vertices
ArrayList morph = new ArrayList();

//the boolean variable will control if we are morphing to a circle or square
boolean state = false;

//set up lef and right eyes
PVector leftEye;
PVector rightEye;

void setup () {
//set up location for eyes: fraeleft+right eye vector at (45,45) (55,40)
leftEye = new PVector(width*.45, height*.40);
rightEye = new PVector(width*.55, height*.40);

//set up sound
file = new SoundFile (this, “sound.mp3”);
file.play(); //play video
file.amp(1); //set ampitude at 1
L=file.duration(); //show video duration below
println (L); // write to the console area
//other general setup
fullScreen (P3D);
frameRate(20);
smooth();
noStroke ();

//set up xy coordinator for sequences of moving circles
bPosition = 100;
yPosition = 150;
twoPosition = 200;
fourPosition = 250;
sixPosition = 300;
eightPosition = 350;
tenPosition = 400;
twelvePosition = 450;
fourteenPosition = 500;
eighteenPosition = 550;
tweentyPosition = 600;
tweentytwoPosition = 650;

//load images to create gif
gifone[0] = loadImage( “0.gif” );
gifone[1] = loadImage( “1.gif” );
gifone[2] = loadImage( “2.gif” );
gifone[3] = loadImage( “3.gif” );
gifone[4] = loadImage( “4.gif” );
gifone[5] = loadImage( “5.gif” );
gifone[6] = loadImage( “6.gif” );
gifone[7] = loadImage( “7.gif” );
gifone[8] = loadImage( “8.gif” );
gifone[9] = loadImage( “9.gif” );
gifone[10] = loadImage( “10.gif” );
gifone[11] = loadImage( “11.gif” );
gifone[12] = loadImage( “12.gif” );
gifone[13] = loadImage( “13.gif” );
gifone[14] = loadImage( “14.gif” );
gifone[15] = loadImage( “15.gif” );
gifone[16] = loadImage( “16.gif” );
gifone[17] = loadImage( “17.gif” );
gifone[18] = loadImage( “18.gif” );
gifone[19] = loadImage( “19.gif” );
gifone[20] = loadImage( “20.gif” );
gifone[21] = loadImage( “21.gif” );
gifone[22] = loadImage( “22.gif” );
gifone[23] = loadImage( “23.gif” );
gifone[24] = loadImage( “24.gif” );
gifone[25] = loadImage( “25.gif” );
gifone[26] = loadImage( “26.gif” );
gifone[27] = loadImage( “27.gif” );
gifone[28] = loadImage( “28.gif” );
gifone[29] = loadImage( “29.gif” );
gifone[30] = loadImage( “30.gif” );
gifone[31] = loadImage( “31.gif” );
gifone[32] = loadImage( “32.gif” );
gifone[33] = loadImage( “33.gif” );
gifone[34] = loadImage( “34.gif” );
gifone[35] = loadImage( “35.gif” );
gifone[36] = loadImage( “36.gif” );
gifone[37] = loadImage( “37.gif” );
gifone[38] = loadImage( “38.gif” );
gifone[39] = loadImage( “39.gif” );
gifone[40] = loadImage( “40.gif” );
gifone[41] = loadImage( “41.gif” );
gifone[42] = loadImage( “42.gif” );
gifone[43] = loadImage( “43.gif” );
gifone[44] = loadImage( “44.gif” );
gifone[45] = loadImage( “45.gif” );
gifone[46] = loadImage( “46.gif” );
gifone[47] = loadImage( “47.gif” );
gifone[48] = loadImage( “48.gif” );
gifone[49] = loadImage( “49.gif” );
gifone[50] = loadImage( “50.gif” );
gifone[51] = loadImage( “51.gif” );
gifone[52] = loadImage( “52.gif” );
gifone[53] = loadImage( “53.gif” );
gifone[54] = loadImage( “54.gif” );
gifone[55] = loadImage( “55.gif” );
gifone[56] = loadImage( “56.gif” );
gifone[57] = loadImage( “57.gif” );
gifone[58] = loadImage( “58.gif” );
gifone[59] = loadImage( “59.gif” );
gifone[60] = loadImage( “60.gif” );
gifone[61] = loadImage( “61.gif” );
gifone[62] = loadImage( “62.gif” );
gifone[63] = loadImage( “63.gif” );
gifone[64] = loadImage( “64.gif” );
gifone[65] = loadImage( “65.gif” );
gifone[66] = loadImage( “66.gif” );

//MORPH
//// create a circle using vectors pointing from center
for (int angle = 0; angle < 360; angle += 9) {
PVector v = PVector.fromAngle(radians(angle-135));
v.mult(500); //adjust the size of the morphing shape
circle.add(v); //add circle
morph.add(new PVector()); //add morph
}

// A square is a bunch of vertices along straight lines
// Top of square
for (int x = -50; x < 50; x += 10) {
square.add(new PVector(x, -50));
}
// Right side
for (int y = -50; y < 50; y += 10) {
square.add(new PVector(50, y));
}
// Bottom
for (int x = 50; x > -50; x -= 10) {
square.add(new PVector(x, 50));
}
// Left side
for (int y = 50; y > -50; y -= 10) {
square.add(new PVector(-50, y));
}
}

void draw () {
background(255); //set white background
//eyes, move the eyes using cursor
PVector mouseVector = new PVector(mouseX, mouseY);
//set the magnitude of this vector to the value of 10 for both eyes
PVector leftPupil = leftEye.copy().add(mouseVector.copy().sub(leftEye).setMag(10));
PVector rightPupil = rightEye.copy().add(mouseVector.copy().sub(rightEye).setMag(10));

fill(255);
stroke(3);
//adjust left and right eyes
ellipse(leftEye.x, leftEye.y, 100, 100); //outer shape size
ellipse(rightEye.x, rightEye.y, 100, 100);

fill(0);
ellipse(leftPupil.x, leftPupil.y, 20, 20); //pupil size
ellipse(rightPupil.x, rightPupil.y, 20, 20);

//morph
float totalDistance = 0;

// Look at each vertex
for (int i = 0; i < circle.size(); i++) { //value 1 is set to 0, i is less than circle size, i = i+1
PVector v1;
// lerping to the circle and square
if (state) {
v1 = circle.get(i);
} else {
v1 = square.get(i);
}
// Get the vertex we will draw
PVector v2 = morph.get(i);
// Lerp to the target
v2.lerp(v1, 0.1);
// Check how far we are from target
totalDistance += PVector.dist(v1, v2);
}

// If all the vertices are close, switch shape
if (totalDistance < 0.1) {
state = !state;
}

// Draw relative to center
translate(width/2, height/2);
strokeWeight(2);
// Draw a polygon that makes up all the vertices
beginShape();
noFill();
stroke(2);
for (PVector v : morph) {
vertex(v.x, v.y);
}
endShape(CLOSE);

noStroke ();
//ANIMATED GIF, 67 frames will be displayed for the gif
image( gifone[frameCount%67], gifoneX, gifoneY);
gifoneX = gifoneX + 4;
if ( gifoneX > width + 10) {
gifoneX = -250; //I want slow down the gif to make the gif disappear at 60 sec
}

//sequences of circles
//ab
fill (0, 20, 220);
ellipse(aPosition, bPosition, 50, 50);
aPosition +=1;
//xy
fill (0, 20, 220);
ellipse(xPosition, yPosition, 50, 50);
xPosition +=2;
//12
fill (0, 20, 220);
ellipse(onePosition, twoPosition, 50, 50);
onePosition +=3;
//34
fill (0, 20, 220);
ellipse(threePosition, fourPosition, 50, 50);
threePosition +=4;
//56
fill (0, 20, 220);
ellipse(fivePosition, sixPosition, 50, 50);
fivePosition +=5;
//78
fill (0, 20, 220);
ellipse(sevenPosition, eightPosition, 50, 50);
sevenPosition +=6;
//910
fill (0, 20, 220);
ellipse(ninePosition, tenPosition, 50, 50);
ninePosition +=7;
//1112
fill (0, 20, 220);
ellipse(elevenPosition, twelvePosition, 50, 50);
elevenPosition +=8;
//1314
fill (0, 20, 220);
ellipse(thirteenPosition, fourteenPosition, 50, 50);
thirteenPosition +=9;
//1516
fill (0, 20, 220);
ellipse(fifteenPosition, sixteenPosition, 50, 50);
fifteenPosition +=10;
//1718
fill (0, 20, 220);
ellipse(seventeenPosition, eighteenPosition, 50, 50);
seventeenPosition +=11;
//1920
fill (0, 20, 220);
ellipse(nineteenPosition, tweentyPosition, 50, 50);
nineteenPosition +=12;
//2122
fill (0, 20, 220);
ellipse(tweentyonePosition, tweentytwoPosition, 50, 50);
tweentyonePosition += 13;

//interactive spheres
//sphere1
translate(0, 950, 0);
rotateX(mouseY * 0.05);
rotateY(mouseX * 0.05);
fill(mouseX * 2, 0, 160);
sphereDetail(mouseX / 10); //for rendering the sphere
sphere(30);
noStroke();
directionalLight(250, 230, 500, -1, 100, 0);

//sphere 2
translate(200, height/2, 0);
rotateX(mouseY * 0.05);
rotateY(mouseX * 0.05);
fill(mouseX * 2, 0, 160);

sphere(20);
noStroke();
directionalLight(250, 230, 500, -1, 100, 0);

//sphere 3
translate(300, height/2, 0);
rotateX(mouseY * 0.05);
rotateY(mouseX * 0.05);
fill(mouseX * 2, 0, 160);

sphere(30);
noStroke();
directionalLight(250, 230, 500, -1, 100, 0);

//sphere 4
translate(400, height/2, 0);
rotateX(mouseY * 0.05);
rotateY(mouseX * 0.05);
fill(mouseX * 2, 0, 160);

sphere(40);
noStroke();
directionalLight(250, 230, 500, -1, 100, 0);

//sphere 5
translate(500, height/2, 0);
rotateX(mouseY * 0.05);
rotateY(mouseX * 0.05);
fill(mouseX * 2, 0, 160);

sphere(50);
noStroke();
directionalLight(250, 230, 500, -1, 100, 0);

//sphere 6
translate(600, height/2, 0);
rotateX(mouseY * 0.05);
rotateY(mouseX * 0.05);
fill(mouseX * 2, 0, 160);

sphere(60);
noStroke();
directionalLight(250, 230, 500, -1, 100, 0);

//sphere 7
translate(700, height/2, 0);
rotateX(mouseY * 0.05);
rotateY(mouseX * 0.05);
fill(mouseX * 2, 0, 160);

sphere(70);
noStroke();
directionalLight(250, 230, 500, -1, 100, 0);
}

Hello,

Please format your code as per:
https://discourse.processing.org/faq#format-your-code

There are plenty of examples of what it should look like in the forum.

:)