Une manière simple serait de prendre en compte que random() renvoie une valeur aléatoire dans une plage. Si vous lui donnez une valeur faible, vous aurez une valeur aléatoire faible. Si vous utilisez cette valeur comme couleur, plus la valeur est basse, plus vous êtes proche du noir, ce qui pourrait bien fonctionner dans votre cas.
Si vous avez un caractère aléatoire à 255, vous augmentez les changements de ayant des pixels lumineux, sinon (avec de faibles valeurs aléatoires), les pixels seront sombres:
//noise image
PImage noise;
//amount of noise image image 0 = 0%, 255 = 100%
int noiseAmt = 255;
void setup(){
noise = createImage(width,height,RGB);
}
void draw(){
//decrease noise over time
noiseAmt--;
if(noiseAmt < 0) noiseAmt = 255;
//apply noise based on noise amount
noiseImage();
//render image
image(noise,0,0);
}
void noiseImage(){
int numPixels = noise.pixels.length;
for(int i = 0 ; i < numPixels; i++){
//random(noiseAmt) is the key - low values = darker pixels
noise.pixels[i] = color(random(noiseAmt));
}
noise.updatePixels();
}
Pour obtenir un coup de cela, voici un version légèrement modifiée du code qui utilise les touches fléchées UP/DOWN
pour contrôler le bruit:
//noise image
PImage noise;
//amount of noise image image 0 = 0%, 255 = 100%
int noiseAmt = 127;
void setup() {
noise = createImage(width, height, RGB);
}
void draw() {
//apply noise based on noise amount
noiseImage();
//render image
image(noise, 0, 0);
}
void noiseImage() {
int numPixels = noise.pixels.length;
for (int i = 0; i < numPixels; i++) {
//random(noiseAmt) is the key - low values = darker pixels
noise.pixels[i] = color(random(noiseAmt));
}
noise.updatePixels();
}
void keyPressed(){
if(keyCode == UP) noiseAmt += 5;
if(keyCode == DOWN) noiseAmt -= 5;
noiseAmt = constrain(noiseAmt,0,255);
println("noiseAmt: " + noiseAmt);
}
Retour à la question de temps, vous pouvez jeter un oeil this answer qui couvre le suivi du temps en utilisant millis()
. La seule partie supplémentaire est la cartographie du temps de fondu à la quantité de bruit, ce qui serait un certain ratio. Cela pourrait être plus facile si nous cartographions le temps passé en tant que valeur normalisée (de 0.0 à 1.0) qui peut facilement passer de 0.0 à 255.0 simplement en multipliant par 255:
//noise image
PImage noise;
//amount of noise image image 0 = 0%, 255 = 100%
int noiseAmt = 255;
int timestamp,fadeTime = 10000;//fade to black in 10s
void setup(){
noise = createImage(width,height,RGB);
timestamp = millis();
}
void draw(){
//decrease noise over time
int now = millis();
//if the difference between an initial timestamp and the current time is less than 10s
if(now - timestamp <= fadeTime){
//compute the ratio between the time difference and total fadeTime which will be from 0.0 to 1.0
//subtract this difference from 1.0 to flip the ratio direction from 0.0 -> 1.0 to 1.0 -> 0.0
float fadeRatio = 1.0 - ((float)(now-timestamp)/fadeTime);
//this ratio multiplied to 255 will be
noiseAmt = (int)(fadeRatio * 255);
}
//apply noise based on noise amount
noiseImage();
//render image
image(noise,0,0);
}
void noiseImage(){
int numPixels = noise.pixels.length;
for(int i = 0 ; i < numPixels; i++){
//random(noiseAmt) is the key - low values = darker pixels
noise.pixels[i] = color(random(noiseAmt));
}
noise.updatePixels();
}
traitement a des fonctions très pratiques pour faire face aux mapping et constraining nombre varie:
//noise image
PImage noise;
//amount of noise image image 0 = 0%, 255 = 100%
int noiseAmt = 255;
int timestamp,fadeTime = 10000;//fade to black in 10s
void setup(){
noise = createImage(width,height,RGB);
timestamp = millis();
}
void draw(){
//decrease noise over time
int now = millis();
//if the difference between an initial timestamp and the current time is less than 10s
noiseAmt = (int)map(now - timestamp,0,fadeTime,255,0);
noiseAmt = constrain(noiseAmt,0,255);
//apply noise based on noise amount
int numPixels = noise.pixels.length;
for(int i = 0 ; i < numPixels; i++){
//random(noiseAmt) is the key - low values = darker pixels
noise.pixels[i] = color(random(noiseAmt));
}
noise.updatePixels();
//render image
image(noise,0,0);
}
Notez le fadeTime
est réglé sur 10s (10000 millisecondes). N'hésitez pas à bricoler avec la valeur fadeTime
.
Merci beaucoup pour ça! Désolé de devoir continuer à demander - comment je ferais exactement ce processus, mais au cours d'un certain temps, en le reliant à la 'millis()' if-déclarations que j'ai mentionné ci-dessus? – elf
Jetez un oeil à la réponse ci-dessus. C'est supposer que vous voulez fondre au fil du temps, par opposition à passer de 100% de bruit, à 50% après 2 secondes, puis soudainement à 0% après 10 secondes. –
OUI, maintenant je l'ai. merci à @KevinWorkman! – elf