Textur-Synthese: Einfache Texturen erzeugen

Update: Montag, 22. April

Home / TECHNIK / Programmierung

Auf dieser Seite findest du eine Sammlung mit sehr simplen Beispielen zur Texturerzeugung, also prozedurale Texturen.

Die Algorithmen sind in C/C++ bzw. ANSI-C geschrieben und sollen demonstrieren, wie Texturen durch Programmcode generiert werden können. Die unterschiedlichen Verfahren stehen in mehreren Sektionen, in denen kleine, handliche Funktionen oder kurze Beispiele mit Quellcode (Snippets) die Operationen beschreiben.

Viel Spaß bei der Grafikprogrammierung!

 

Simple Operationen mit x- und y-Koordinaten

  • Sehr einfach zu implementieren und sehr schnell zur Laufzeit.
  • Das Verfahren kann mit vielen verschiedenen Farb- bzw. Pixelformaten benutzt werden, wie z.B. RGB565 oder ARGB8888.
  • Sehr simple Texturen, wenig Konfigurationsmöglichkeiten durch Parameter, aber auch relativ wenig Einsatzmöglichkeiten.
  • Ideal für schnelle Debug-Sessions oder Programmtests in der Grafikwelt.

Alle Bildpixel werden Zeilen- und Spaltenweise duchlaufen. Für jede Position x,y wird ein Farbwert für den Pixel berechnet, ohne Berücksichtigung der einzelnen Farbkanäle (ARGB / Alpha, Red, Green, Blue).

Die folgende Funktion zeigt das Prinzip:

// ptr points to a memory buffer of size width * height * sizeof(unsigned int)
static void genXY(unsigned int *ptr, int width, int height)
{
int x,y;
for (y = 0; y < height; ++y)
{
for (x = 0; x < width; ++x)
{
*ptr++ = x * y << 2; // set pixel color
}
}
}

Einige Beispiel Operationen und die entsprechenden Bildresultate:

Beispiel Textur - Multiplikation: x*y (Auflösung 762x256)
Beispiel Textur - Multiplikation: x*y

Beispiel Textur - Addition: x+y

Beispiel Textur - Addition: x+y

Beispiel Textur - XOR Operation: x^y

Beispiel Textur - XOR Operation: x^y

Es ist außerdem möglich mit diesem Verfahren einfache Animation zu erzeugen. Dies kann z.B. mit Hilfe einer statischen Variable i geschehen, die nach jedem gezeichneten Frame inkrementiert wird. Bei der Berechnung eines Pixel wird i als Eingabeparameter zusätzlich zu x und y benutzt, wie anhand der untenstehenden Macros demonstriert wird:

// some macros used to create simple animations
#define RENDER_XMULY(x,y,i)   ( ((x*y) + i) << 2        )
#define RENDER_XORY(x,y,i)    ( ((x^y) + i) << 16       )
#define RENDER_XANDY(x,y,i)   ( ((x+y) + i) << 3        )
#define RENDER_COMPL(x,y,i)   ( x*x*x - y*y - i*x + i*y )

 

Gefällt dir dieser Artikel zur Texturerzeugung mit wenigen Codezeilen? Hast du Anregungen, Vorschläge oder einen Fehler gefunden? Schreibe doch einen Kommentar...

Kommentare 1

niloo (2016-10-13)
Vielen Dank für diesen Artikel. Kurz, bündig und hilfreich

 

Neuen Kommentar schreiben: