Заполните прямоугольник с шумом и дублируйте в сетке - PullRequest
1 голос
/ 08 октября 2019

Я пытаюсь заполнить сетку дубликатами одного прямоугольника, заполненного белым шумом.

Я могу создать сетку с прямоугольником, но не могу заполнить их шумом. Я могу создать белый шум, но не могу заполнить сетку им. Ниже попытка создать оригинал. Теперь я хотел бы продублировать это, например, в сетке 3x3

void setup(){

    size(900,900);
    background(0);
    stroke(255);
    noFill();
    noiseDetail(5);
    println(pixelWidth, pixelHeight);
}

void draw(){
    background(0);
    float scale = 0.01;
    int w = 300;
    int h = 300;

    loadPixels();
    for(int x = 0; x<w;x++){
      for(int y = 0; y<h;y++){
        float col = 255*noise(scale*x,scale*y,30*scale*frameCount);
        pixels[x + y*900] = color(col);
      }
    }
    updatePixels();
}

В результате получается прямоугольник размером 300x300, заполненный шумом. Мне бы хотелось, чтобы в сетке было 9 таких же одинаковых белых шумов.

1 Ответ

0 голосов
/ 08 октября 2019

Я рекомендую написать функцию, которая отображает плитку шума в PGraphics объект:

PGraphics CreateTile(int w, int h, float scale)
{
    PGraphics pg = createGraphics(w, h, JAVA2D);

    pg.beginDraw();
    for(int x = 0; x<w;x++){
      for(int y = 0; y<h;y++){
        float col = 255*noise(scale * x, scale * y, 30 * scale * frameCount);
        pg.set(x, y, color(col));
      }
    }
    pg.endDraw();

    return pg;
}

Затем вы можете размещать плитку так часто, как вы хотите:

void draw(){
    background(0);

    int w = 300;
    int h = 300;
    PGraphics pg = CreateTile(w, h, 0.01);

    for (int i = 0; i < 3; ++i) { 
        for (int j = 0; j < 3; ++j) {
            image(pg, w*i, h*j);
        }
    }
}

...