Computergrafik-Uebung

Texturierung 2

?

Verwenden Sie als Hilfsmittel zum Laden eines Bildes die Funktion readPNMimage(). Damit können Sie Bilder im sogenannten PNM Format laden. Sie benötigen dafür die folgenden Quelltext-Dateien: defs.h ddsbase.h ddsbase.cpp

Ãœbersetzen des Moduls ddsbase.cpp:

g++ -c ddsbase.cpp

Dies erzeugt eine Objektdatei ddsbase.o, welche zusätzlich zum Hauptprogramm gebunden werden muss.

Beispielcode:

#include "ddsbase.h"

unsigned char *image;
unsigned int width,height,components;

int main()
{
   if (!(image=readPNMimage("image.pnm",
                            &width,&height,&components))) ERRORMSG();

   return(0);
}

Graustufenbilder im PNM Format haben die Endung .pgm, RGB-Bilder haben die Endung .ppm.

Ein PPM Beispielbild mit 8×8 Pixeln und 8-Bit RGB Farbwerten:

P3
8 8
255

255 255 255  255 255 255  0 0 127      0 0 127      0 0 127      0 0 127      255 255 255  255 255 255
255 255 255  0 0 127      0 0 127      0 0 127      0 0 127      0 0 127      0 0 127      255 255 255
0 0 127      0 0 127      255 255 255  255 255 255  255 255 255  255 255 255  0 0 127      0 0 127
0 0 127      0 0 127      255 255 255  255 255 255  255 255 255  255 255 255  0 0 127      0 0 127
0 0 127      0 0 127      255 255 255  255 255 255  255 255 255  255 255 255  0 0 127      0 0 127
255 255 255  0 0 127      0 0 127      255 255 255  255 255 255  0 0 127      0 0 127      255 255 255
255 255 255  255 255 255  0 0 127      255 255 255  255 255 255  0 0 127      255 255 255  255 255 255
0 0 127      0 0 127      0 0 127      255 255 255  255 255 255  0 0 127      0 0 127      0 0 127

Mehr über dieses Bildformat erfahren Sie auf netpbm.sourceforge.net.

Das Bildverarbeitungsprogramm Gimp kann das PNM Bildformat laden und z.B. von .jpg oder .png nach .ppm konvertieren.

Hilfe zur Installation von Gimp:

  • Ubuntu: sudo apt-get install gimp
  • OpenSuse: sudo zypper install gimp

Skalieren Sie mit Gimp eine Textur auf eine 2er-Potenz, d.h. 256×256.

Alternative: Das “convert” Tool von ImageMagick auf der Kommandozeile benutzen:

convert texture.png -geometry 256x256! texture.ppm

Hilfe zur Installation von ImageMagick:

  • Ubuntu: sudo apt-get install imagemagick
  • OpenSuse: sudo zypper install imagemagick

Laden Sie Ihre Textur in den Haupt- und anschließend in den Grafikspeicher und texturieren Sie damit die tesselierte Geometrie, indem Sie die Textur auf die Grundfläche der Geometrie abbilden. Die Textur soll die Grundfarbe der Vertices modulieren (Texturmodus GL_MODULATE).

Spezifizieren Sie die Texturkoordinaten als zusätzliches Vertex-Attribut, d.h. als Texturkoordinatenarray und verwenden Sie lineare Abbildungsfunktionen $s=f_s(x)$ und $t=f_t(y)$, um die Abbildung des Funktionsdefinitionsbereiches [−100,100]x[−100,100] auf das Einheitsquadrat der Texturkoordinaten [0,1]x[0,1] zu erreichen. Am Beispiel der s-Texturkoordinate:

$\displaystyle{ s=f_s(x) = ax+b }$
$\displaystyle{ f_s(-100)=0, f_s(100)=1 }$
$\displaystyle{ \rightarrow a=\frac{1}{200}, b=0.5 }$
Wave wo checker Wave w checker

Schalten Sie zwischen den Modi GL_NEAREST/GL_LINEAR und GL_REPEAT/GL_CLAMP hin und her.

Wave wr checker Wave wrl checker

Verzerren Sie die Textur durch Änderung der Abbildungsfunktionen $f_s$ und $f_t$, z.B.:

$\displaystyle{ f_s=ax+b + csin(df_t), c=0.1, d=20 }$
Wave wr checker Wave wrd checker

Schalten Sie Mipmapping ein!

Q Sehen Sie den Unterschied?

Kommt darauf an…

Options: