Bon.
J'ai repris tout le sketch depuis le début en laissant tomber le côté "orienté objet" pour quelque chose de beaucoup plus accessible (pour moi surtout). Ca marche plutôt bien, sauf je n'obtiens que des changements trop rapides et brusques alors que je cherche à avoir des mouvements doux.
Quelqu'un pourrait-il m'aider, s'il vous plaît?
Merci beaucoup,
Ars Robota
int nbr=100; float n=0.00; float d=0.04; float x, y; float s, grayCol; float xoff; void setup() { size(400,400); smooth(); frameRate(30); } void draw() { for(int j=0;j<50;j++) { background(255); n+=d; for(int i=0;i<nbr;i++) { x=noise(xoff+n)*width/2+width/4; y=noise(xoff-n)*height/2+height/4; s=random(1, 20); grayCol=noise(xoff)*128; xoff+=0.1; noStroke(); fill(grayCol, grayCol); ellipse(x, y, s, s); float wh=s*1.5; noFill(); stroke(grayCol, grayCol); ellipse(x, y, wh, wh); } } }
Dernière modification par Ars Robota (2010-08-02 22:39:59)
Hors ligne
Salut tout le monde,
J'ai réussi à me débrouiller pour obtenir ce que je voulais, même si les interpolations entre chaque position-clef sont trop linéaire... Il fallait juste ajouter une boucle supplémentaire en-dehors de la boucle for principale.
Voici le code, si ça peut en aider d'autres...
int nbr=50; float n=0.00; float d=0.01; float[] y=new float[nbr]; float[] x=new float[nbr]; float[] s=new float[nbr]; float[] grayCol=new float[nbr]; float[] targetX=new float[100]; float[] targetY=new float[100]; float[] targetS=new float[nbr]; float[] targetCol=new float[nbr]; float xoff, yoff; float[] ease=new float[nbr]; float easing=0.01; int j=1; float expo=2.0; void setup() { size(400,400,P3D); frameRate(30); smooth(); } void draw() { background(255); n+=d; j++; if(j==1) { for(int k=0;k<nbr;k++) { targetX[k]=noise(xoff)*width; targetY[k]=noise(yoff)*height; targetS[k]=random(1, 30); targetCol[k]=noise(xoff)*64; xoff+=0.8; yoff+=0.2; ease[k]=random(0.005,0.05); } } else if(j==30) { j=0; } for(int i=0;i<nbr;i++) { float dx=targetX[i]-x[i]; float dy=targetY[i]-y[i]; x[i]+=dx*ease[i]; y[i]+=dy*ease[i]; println(dx); float ds=targetS[i]-s[i]; if(abs(ds)>1) { s[i]+=ds*ease[i]; } float dCol=targetCol[i]-grayCol[i]; if(abs(dCol)>1) { grayCol[i]+=dCol*ease[i]; } noStroke(); fill(grayCol[i], grayCol[i]); ellipse(x[i], y[i], s[i], s[i]); float wh=s[i]*1.5; noFill(); stroke(grayCol[i], grayCol[i]); ellipse(x[i], y[i], wh, wh); } }
Merci encore pour votre aide!
Hors ligne