Textur-Synthese: Random-Texturen

Update: Dienstag, 19. März

Home / TECHNIK / Programmierung

Auf dieser Seite findest du verschiedene Beispiele um Random-Texturen zu generieren. Dabei werden Speicherbereiche mit (pseudo-)zufälligen Werten gefüllt.

 

Random-Textures - Texturen mittels Zufallsgenerator

  • Ein einfaches Beispiel zum Erzeugen von zufälligen Texturen.
  • Die Random-Funktion ist entscheidend für die Verteilung und die "Zufälligkeit" der Pixel.
  • Zufallstexturen werden oft als Ausgangstexturen für die weitere Textursynthese verwendet.

Beispiel 1: rand() aus der stdlib

Zufallstextur mit rand

Beispiel 2: LFSR-Logik als Random-Funktion

Zufallstextur mit LFSR

Beispiel-Quelltext:

// ptr points to a memory buffer of size width * height * sizeof(unsigned int)
static void genRandom1(unsigned int *ptr, int width, int height)
{
  int x,y;
  unsigned int a,r,g,b;
  for (y = 0; y < height; ++y) 
  {
    for (x = 0; x < width; ++x) 
    {
      // This example uses three calls of rand(). You should better use one 
      // call to generate 24 random bits in one step.
      r = rand() & 0xff;
      g = rand() & 0xff;
      b = rand() & 0xff;
      a = 0xff;
      *ptr++ = (r << 24) | (g << 16) | (b << 8) | a;   // set color of RGBA8888 pixel
    }
  }
}
// returns 16 random bits
unsigned int rand_lfsr()
{
  static unsigned short lfsr = 0xaffecafe;
  static unsigned bit;
  bit  = ((lfsr >> 0) ^ (lfsr >> 2) ^ (lfsr >> 3) ^ (lfsr >> 5) ) & 1;
  lfsr =  (lfsr >> 1) | (bit << 15);
  return lfsr;
}
// ptr points to a memory buffer of size width * height * sizeof(unsigned int)
static void genRandom2(unsigned int *ptr, int width, int height)
{
  int x,y;
  for (y = 0; y < height; ++y) 
  {
    for (x = 0; x < width; ++x) 
    {
      *ptr++ = (rand_lfsr()<<16) | rand_lfsr();	// 32 random bits for an RGBA8888 pixel
    }
  }
}

 

Gefällt dir dieser Artikel zur Generierung von zufälligen Texturen? Hast du Anregungen, Vorschläge oder einen Fehler im Sourcecode gefunden? Schreibe doch einen Kommentar...

Kommentare 0

 

Neuen Kommentar schreiben: