MipMaps: Unterschied zwischen den Versionen
Doj (Diskussion | Beiträge) |
Doj (Diskussion | Beiträge) () |
||
Zeile 1: | Zeile 1: | ||
Mipmapping, ist eine Technik welche die Darstellungsqualität von Bildern (Texturen) verbessert, wenn diese kleiner als in der ursprünglichen Größe dargestellt werden (bezogen auf die Auflösung des Bildes in Pixeln). Als angenehmer Nebeneffekt wird normalerweise auch weniger Rechenzeit benötigt, wenn ein Bild mit Hilfe von MipMaps verkleinert dargestellt wird. Dies wird jedoch durch einen vergrößerten Speicherplatzverbrauch zum Ablegen der MipMaps im Speicher (entweder Hauptspeicher oder Grafikkartenspeicher) <i>erkauft</i>. | Mipmapping, ist eine Technik welche die Darstellungsqualität von Bildern (Texturen) verbessert, wenn diese kleiner als in der ursprünglichen Größe dargestellt werden (bezogen auf die Auflösung des Bildes in Pixeln). Als angenehmer Nebeneffekt wird normalerweise auch weniger Rechenzeit benötigt, wenn ein Bild mit Hilfe von MipMaps verkleinert dargestellt wird. Dies wird jedoch durch einen vergrößerten Speicherplatzverbrauch zum Ablegen der MipMaps im Speicher (entweder Hauptspeicher oder Grafikkartenspeicher) <i>erkauft</i>. | ||
+ | |||
+ | Wird ein Bild ohne MipMaps verkleinert dargestellt, dann erscheint dieses Bild (besonders bei einer Animation) oft unruhig, da sich die einzelnen Pixel oft verändern. Den Effekt kann man mit Rauschen oder Krisseln beschreiben und ist in der Regel unerwünscht. Es rührt daher, dass durch die Verkleinerung ausgehend vom Orginalbild die Frequenzen der Zeilen und Spalten nicht korrekt behandelt werden. | ||
+ | |||
+ | ==Beispiel== | ||
+ | |||
+ | Dies ist das Bild in der orginalen Größe von 256x256 Pixeln: [[Bild:Sf256.jpg|San Francisco Skyline]] | ||
+ | |||
+ | Soll nun dieses Bild in 64x64 Pixeln dargestellt werden, so wird normalerweise einfach nur jede 4 horizontale Zeile und jede 4 vertikale Spalte angezeigt: [[Bild:Sf64u.jpg]] Man kann erkennen, dass das Resultat sehr <i>pixelig</i> aussieht (Für Menschen ohne 200% Sehschärfe vielleicht mit einer Bildschirm Lupe etwas nachhelfen :-). Technisch gesprochen wurden die <i>hohen Frequenzen</i> des orginalen Bildes nicht vor dem verkleinern gefiltert, wodurch das Ergebnis durch Aliasing verfälscht wird. | ||
+ | |||
+ | Beim Mipmapping werden nun verschiedene Versionen des orginalen Bildes im Speicher abgelegt, welche in der Regel jeweils um den Faktor 2 verkleinert sind. Die kleineren Bilder werden dabei jeweils korrekt <i>Frequenz gefiltert</i> verkleinert. Die einzelnen Verkleinerungsstufen nennt man dann <b>MipMaps</b>. Bei unserem Beispielbild würde folgende Bilder im Speicher abgelegt: | ||
+ | |||
+ | [[Bild:Sf256.jpg]] 256x256 | ||
+ | |||
+ | [[Bild:Sf128.jpg]] 128x128 | ||
+ | |||
+ | [[Bild:Sf64.jpg]] 64x64 | ||
+ | |||
+ | [[Bild:Sf32.jpg]] 32x32 | ||
+ | |||
+ | [[Bild:Sf16.jpg]] 16x16 | ||
+ | |||
+ | [[Bild:Sf8.jpg]] 8x8 | ||
+ | |||
+ | (sowie die Größen 4x4, 2x2 und 1x1 Pixel) | ||
+ | |||
+ | Vergleicht man nun das Bild mit 64x64 Pixeln mit dem obigen (nicht korrekt) verkleinertem, so fällt auf, dass die zweite Version wesentlich <i>glatter</i> aussieht. Dies sind die oben erwähnt die nicht mehr vorhandenen zu hohen Frequenzen. | ||
+ | |||
+ | ==OpenGL Funktionen== | ||
+ | |||
+ | MipMaps können mit Hilfe der Funktion gluBuild1DMipmaps und gluBuild2DMipmaps einfach erzeugt werden. Die MipMaps werden von der Funktion automatisch erzeugt und im Kontext der aktuellen mit glBindTexture gebundenen Texture aktiviert. Man kann die einzelnen <i>Stufen</i> der MipMap auch manuell erzeugen und an OpenGL übergeben, dazu ist der zweite Parameter (level) von glTexImage1D, glTexImage2D, glTexImage3D zu benutzen. |
Version vom 15. September 2004, 00:45 Uhr
Mipmapping, ist eine Technik welche die Darstellungsqualität von Bildern (Texturen) verbessert, wenn diese kleiner als in der ursprünglichen Größe dargestellt werden (bezogen auf die Auflösung des Bildes in Pixeln). Als angenehmer Nebeneffekt wird normalerweise auch weniger Rechenzeit benötigt, wenn ein Bild mit Hilfe von MipMaps verkleinert dargestellt wird. Dies wird jedoch durch einen vergrößerten Speicherplatzverbrauch zum Ablegen der MipMaps im Speicher (entweder Hauptspeicher oder Grafikkartenspeicher) erkauft.
Wird ein Bild ohne MipMaps verkleinert dargestellt, dann erscheint dieses Bild (besonders bei einer Animation) oft unruhig, da sich die einzelnen Pixel oft verändern. Den Effekt kann man mit Rauschen oder Krisseln beschreiben und ist in der Regel unerwünscht. Es rührt daher, dass durch die Verkleinerung ausgehend vom Orginalbild die Frequenzen der Zeilen und Spalten nicht korrekt behandelt werden.
Beispiel
Dies ist das Bild in der orginalen Größe von 256x256 Pixeln:
Soll nun dieses Bild in 64x64 Pixeln dargestellt werden, so wird normalerweise einfach nur jede 4 horizontale Zeile und jede 4 vertikale Spalte angezeigt: Man kann erkennen, dass das Resultat sehr pixelig aussieht (Für Menschen ohne 200% Sehschärfe vielleicht mit einer Bildschirm Lupe etwas nachhelfen :-). Technisch gesprochen wurden die hohen Frequenzen des orginalen Bildes nicht vor dem verkleinern gefiltert, wodurch das Ergebnis durch Aliasing verfälscht wird.
Beim Mipmapping werden nun verschiedene Versionen des orginalen Bildes im Speicher abgelegt, welche in der Regel jeweils um den Faktor 2 verkleinert sind. Die kleineren Bilder werden dabei jeweils korrekt Frequenz gefiltert verkleinert. Die einzelnen Verkleinerungsstufen nennt man dann MipMaps. Bei unserem Beispielbild würde folgende Bilder im Speicher abgelegt:
(sowie die Größen 4x4, 2x2 und 1x1 Pixel)
Vergleicht man nun das Bild mit 64x64 Pixeln mit dem obigen (nicht korrekt) verkleinertem, so fällt auf, dass die zweite Version wesentlich glatter aussieht. Dies sind die oben erwähnt die nicht mehr vorhandenen zu hohen Frequenzen.
OpenGL Funktionen
MipMaps können mit Hilfe der Funktion gluBuild1DMipmaps und gluBuild2DMipmaps einfach erzeugt werden. Die MipMaps werden von der Funktion automatisch erzeugt und im Kontext der aktuellen mit glBindTexture gebundenen Texture aktiviert. Man kann die einzelnen Stufen der MipMap auch manuell erzeugen und an OpenGL übergeben, dazu ist der zweite Parameter (level) von glTexImage1D, glTexImage2D, glTexImage3D zu benutzen.