Detail Mapping: Unterschied zwischen den Versionen
DGLBot (Diskussion | Beiträge) K (Bot: konvertiere/korrigiere <BR>) |
DGLBot (Diskussion | Beiträge) K (Der Ausdruck ''<pascal>(.*?)</pascal>'' wurde ersetzt mit ''<source lang="pascal">$1</source>''.) |
||
Zeile 17: | Zeile 17: | ||
== Implementation == | == Implementation == | ||
− | <pascal> | + | <source lang="pascal"> |
// Detailtextur auf Textureinheit 1 aktiveren | // Detailtextur auf Textureinheit 1 aktiveren | ||
glClientActiveTexture(GL_TEXTURE1); | glClientActiveTexture(GL_TEXTURE1); | ||
Zeile 40: | Zeile 40: | ||
// ... | // ... | ||
end; | end; | ||
− | </ | + | </source> |
== Siehe Auch == | == Siehe Auch == | ||
[[glBindTexture]], [[glClientActiveTexture]], [[glMultiTexCoord]] | [[glBindTexture]], [[glClientActiveTexture]], [[glMultiTexCoord]] |
Version vom 10. März 2009, 19:04 Uhr
Inhaltsverzeichnis
Was ist Detailmapping
Oftmals hat man in einer Szene Objekte auf denen eine recht grobe Textur haftet, und die daher feine Details missen lässt, was im echten Leben bei vielen Materialien jedoch sichtbar ist. Eine Möglichkeit Details in diese Textur zu bringen, wäre eben diese Textur sehr viel hochauflösender zu machen und die Details direkt in dieser abzulegen. Diese Methode hat jedoch den Nachteil dass man so sehr viel mehr Speicher braucht und die Details (z.B. kleine Risse in Gestein, Grasmuster auf Grastextur) fest sind für jedes Objekt das diese Textur nutzt.
Und genau da setzt Detailtexturing an : Da moderne Grafikkarten allesamt über mehrere Textureinheiten (siehe Multitexturing) verfügen, legt man in vergleichsweise hoher Wiederholung (z.B. Texturkoordinaten der Grundtextur * 16) eine Graustufentextur über die Grundtextur in der die Details dieser Oberfläche hinterlegt sind. Dies klappt deshalb, weil Details von Materialien wie z.B. Holz, Stein, Gras filigran und wiederholbar sind.
Eine besondere Form des Detailmappings sind sogenannte Decals.
Beispiel
Besonders bei der Darstellung von Gelände wird Detailtexturing genutzt. Denn hier hat man meist eine recht grob aufgelöste Terraintextur (Basistextur) die (siehe rechter Bildabschnitt) jedoch so gut wie keine Details erkennen lässt (man ist ja oft auf Texturgrößen <= 2k^n beschränkt, da lassen sich kaum Details in der Basistextur ablegen). Über diese legt man dann mittels Multitexturing in recht hoher Wiederholung die Graustufen-Detailtextur um so Details zu simulieren (siehe linker Bildabschnitt). Der Unterschied ist frapierend, kostet allerdings kaum Leistung. Besonders wenn der Nutzer das Terrain aus nächster Nähe betrachtet gibt es riesige Unterschiede.
Implementation
// Detailtextur auf Textureinheit 1 aktiveren
glClientActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, DetailTexture);
// Basistextur auf Textureinheit 0 aktiveren
glClientActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, BaseTexture);
// ...
// Alle Schnittpunkte des Objektes renderm
for v := 0 to High(VertexData) do
begin
// ...
// Texturkoordinate für die Detailtextur
glMultiTexCoord2f(GL_TEXTURE1, Vertex[v].s*16, Vertex[v].t*16);
// Texturkoordinate für die Basistextur
glMultiTexCoord2f(GL_TEXTURE0, Vertex[v].s, Vertex[v].t);
// ...
end;