2017-05-28 2 views
1

J'essaie donc de créer un arrière-plan "nuageux" aléatoire avec un traitement qui change avec le temps. Ceci est fait en générant aléatoirement une luminosité pour un groupe de pixels. Malheureusement, je peux seulement l'obtenir pour rendre une fois et pas encore. Le code est ci-dessousTraitement d'un changement d'écran avec fonction de bruit

float increment = 0.02; 

void setup() { 
    size(800,200); 
    noLoop(); 
} 

void draw() { 
    background(0); 

    // Optional: adjust noise detail here 
    // noiseDetail(8,0.65f); 

    loadPixels(); 

    float xoff = 0.0; // Start xoff at 0 

    // For every x,y coordinate in a 2D space, calculate a noise value and produce a brightness value 
    for (int x = 0; x < width; x++) { 
    xoff += increment; // Increment xoff 
    float yoff = 0.0; // For every xoff, start yoff at 0 
    for (int y = 0; y < height; y++) { 
     yoff += increment; // Increment yoff 

     // Calculate noise and scale by 255 
     float bright = noise(xoff,yoff)*255; 

     // Try using this line instead 
     //float bright = random(0,255); 

     // Set each pixel onscreen to a grayscale value 
     pixels[x+y*width] = color(bright); 
    } 
    } 

    updatePixels(); 
} 

Répondre

1

Tout d'abord, vous appelez la fonction noLoop(), ce qui empêche le traitement d'appeler la fonction draw() 60 fois par seconde. Mais même après vous être débarrassé de cela, vous verrez toujours la même chose à chaque image. C'est parce que vous passez exactement les mêmes paramètres dans la fonction noise() chaque image. Donc, la réponse courte à votre question est que vous devez changer les paramètres que vous passez dans la fonction noise() au fil du temps. Comment vous faites cela dépend exactement de ce que vous voulez faire. Vous pouvez simplement déplacer l'ensemble dans une certaine direction, ou vous pouvez modifier les décalages internes. Il y a une tonne de choses différentes que vous pourriez faire, mais la réponse de base est que vous devez transmettre des valeurs différentes à chaque image.

La meilleure façon de démontrer ce dont je parle est de déplacer cette ligne de la fonction draw() et au sommet de l'esquisse:

float xoff = 0.0; 

Maintenant, le décalage est préservé entre les images et vous verrez le tout bouger. Vous devrez jouer avec pour obtenir l'effet exact que vous allez pour.

+0

Merci, C'était très utile –