2017-05-28 40 views
1

所以我想创建随着时间的变化处理随机“多云”的背景。这是通过随机生成一组像素的亮度完成的。不幸的是,我只能让它渲染一次,然后不再。代码如下处理改变屏幕与噪声功能

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(); 
} 

回答

1

首先,你要调用的函数noLoop(),防止处理从调用draw()功能每秒60次。

但即使摆脱了这一点,你仍然会看到每一帧相同的东西。这是因为你每帧都会将相同的参数传递给noise()函数。

因此,您的问题的简短答案是,您需要随时间改变您传递给noise()函数的参数。你如何做到这一点取决于你想要做什么。你可以把整个事情往某个方向移动,或者你可以修改内部偏移量。你可以做很多不同的事情,但基本的答案是你需要在每个框架中传递不同的值。

证明什么,我说的是最快的方法是将这一行了draw()功能和草图的顶部:

float xoff = 0.0; 

现在偏移帧之间将被保留,并你会看到整个事情上升。你必须使用它才能获得准确的效果。

+0

谢谢,这是非常有帮助的 –