• Keine Ergebnisse gefunden

  Wie kommt man zu den Texturkoordinaten an jedem Vertex?

N/A
N/A
Protected

Academic year: 2021

Aktie "  Wie kommt man zu den Texturkoordinaten an jedem Vertex? "

Copied!
16
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

G. Zachmann Computer-Graphik 2 - SS 08 Texturen 66

C G C C G

Parametrisierung

C

  Wie kommt man zu den Texturkoordinaten an jedem Vertex?

  Triviale Texturierung eines Terrains:

 3D-Koordinaten nach unten projzieren

 Achtung: dies ist nicht notwendig eine "gute" Texturierung!

C G C C G C

  Idee: 2-stufiger Prozess [Bier & Sloan, 1986]

  Lege (konzeptionell) einen "kanonisch" parametrisierbaren Hüllkörper um das ganze Objekt

1. Projiziere Vertices (nicht notw. Vertex-Koord.!) auf diesen Hüllkörper

2. Verwende die Texturkoordinaten des projizierten Punktes auf dem Hüllkörper

v 1

kanonische

"Projektor"

(2)

G. Zachmann Computer-Graphik 2 - SS 08 Texturen 68

C G C C G

Einige Hüllkörper und deren Parametrisierung

C

  Ebene:

 Projiziere Punkt (x,y,z) auf Ebene

→ (x,y)

 (u,v) = ( s x x + t x , s y y + t y )

  Verallgemeinerung:

 Definiere 2 beliebige Ebenen E 1 und E 2

 u := dist( P, E 1 ) v := dist( P, E 2 )

 Dieses Feature bietet OpenGL

C G C C G

Beispiel

C

  Erzeuge Höhenlinien mittels dieser Technik:

 1D-Textur

 u := dist( P, E

1

)

(3)

G. Zachmann Computer-Graphik 2 - SS 08 Texturen 70

C G C C G C

  Zylinder-Parametrisierung:

 Konvertiere kartesische Koord. (x,y,z) in zylindrische Koord.

 

  Beachte "Naht" bei (θ=0 & 2π)

z

(0, 0) (0.5, 0)

(0, 0.5)

(1, 1)

(0, 1) (1, 0)

( 1, 0.5)

ө

(r sin Θ, r cos Θ, z) (u, v) = (Θ/2π, z)

C G C C G C

  Kugel-Parametrisierung:

 Stelle Punkt in sphärischen Koord. dar

 

  Beachte: Singularität bei Nord- und Südpol!

(u, v ) = (θ/2π, φ/π + 1)

ө

φ (0, 0.5)

(4)

G. Zachmann Computer-Graphik 2 - SS 08 Texturen 73

C G C C G C

  Hier gibt es 2 Varianten:

1. 

2. 

f (u, v) =

 

sin(πv ) cos(2πu) sin(πv ) sin(2πu)

cos(πv )

 

f (u, v ) =

 

2v 1 cos(2πu)

2v 1 sin(2πu) 2v 1

 

C G C C G

Was soll man projizieren?

C

  Bisher: einfach die Koordinaten (x,y,z) des Vertex auf den (gedachten) Hüllkörper projiziert

  Verallgemeinerung: statt dessen kann man genauso gut (oder schlecht) andere Attribute des Vertex projizieren, z.B.

  Normale

 Vektor vom Zentrum des Objektes durch den Vertex

 Reflektierter Viewing-Vektor

 …

(5)

G. Zachmann Computer-Graphik 2 - SS 08 Texturen 75

C G C C G C

  Beispiele:

planar

cylindrical

C G C C G

Automatische Erzeugung von Textur-Koordinaten in OpenGL

C

  glEnable( GL_TEXTURE_GEN_S ); // S, T, R, Q

  glTexGeni( GL_S, GL_TEXTURE_GEN_MODE , mode );

  mode =

GL_OBJECT_LINEAR : Texturkoord. = Distanz des Vertex von einer Ebene; die Ebene wird spezifiziert mit

glGenTexfv( GL_S, GL_OBJECT_PLANE, v ) GL_EYE_LINEAR : benutze Vertex-Koord. nach MODEL_VIEW GL_SPHERE_MAP : für Environment-Mapping (später) GL_NORMAL_MAP

GL_REFLECTION_MAP

(6)

G. Zachmann Computer-Graphik 2 - SS 08 Texturen 77

C G C C G

Beispiel

C

glEnable( GL_TEXTURE_GEN_S );

glTexGeni( GL_S,

GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR );

glTexGenfv( GL_S,

GL_OBJECT_PLANE, xPlane );

C G C C G C

  Parametrisierung parametrischer Flächen ist oft "kanonisch":

(7)

G. Zachmann Computer-Graphik 2 - SS 08 Texturen 79

C G C C G

Probleme bei der Parametrisierung

C

  Verzerrungen: Größe & Form

  Folge: Relatives over- bzw. under-sampling

  Beispiele:

Mesh Einbettung Verzerrung

C G C C G

Seams (Textursprünge)

C

  Ziel: Verringern der Verzerrung

  Idee: Aufschneiden des Netzes entlang gewisser Kanten

  Ergibt „doppelte“ Kanten, auch

„seams“ genannt

  Unvermeidlich bei nicht-planarer

Topologie 1

2 3 4

Seam

Seam

(8)

G. Zachmann Computer-Graphik 2 - SS 08 Texturen 81

C G C C G C

  Idee 1 [Piponi 2000]:

 Das Objekt entlang nur einer zusammenhängenden Kante so

aufschneiden, daß eine topologische Scheibe entsteht

 Dieses aufgeschnittene Netz dann in die Ebene einbetten

C G C C G C

  Probleme:

 Es gibt immer noch Verzerrungen

 Mehrfaches "Einschneiden" ergibt stark "zerfranstes" eingebettetes Gitter

(9)

G. Zachmann Computer-Graphik 2 - SS 08 Texturen 83

C G C C G C

  Idee 2:

 Zerschneide Fläche in einzelne Patches

 Karte (map) = einzelnes Parametergebiet im Texture-Space für ein Patch

 Textur-Atlas = Vereinigung dieser Patches mit ihren jeweiligen Parametrisierungen

  Problemstellung:

 Wähle Kompromiß zwischen Seams und Verzerrung

 „Verstecke“ Schnitte in wenig sichtbaren Regionen

 Möglichst kompakte Anordnung der Texturpatches (ein sog. Packing-Problem)

C G C C G C

  Beispiel

(10)

G. Zachmann Computer-Graphik 2 - SS 08 Texturen 85

C G C C G C

C G C C G

Verzerrung oder Seams?

C

in ein Patch aufschneiden in Dreiecke

zerschneiden

Seams V er zer rung

(11)

G. Zachmann Computer-Graphik 2 - SS 08 Texturen 88

C G C C G

Cube Maps [Greene '86, Voorhies '94]

C

  Ω = Einheits-Würfel:

 Sechs quadratische Textur-Bitmaps

 3D Texturkoordinaten:

 Größte Komponente von (s,t,r) wählt die Karte aus, Schnittpunkt liefert (u,v) innerhalb der Karte

  Rasterisierung

 Interpolation von (s,t,r) in 3D

 Projektion auf Würfel

 Texture look-up in 2D

  Vorteile: rel. uniform, OpenGL

  Nachteil: man benötigt 6 Bilder

glTexCoord3f( s, t, r );

glVertex3f( x, y, z );

(-1,-1,-1) (-1, -1,1)

(1, -1, -1)

(1,-1, -1) (1,1,1)

C G C C G

Beispiele

C

(12)

G. Zachmann Computer-Graphik 2 - SS 08 Texturen 90

C G C C G C

  Weitere Anwendung: man kann eine Cube-Map auch sehr gut verwenden, um irgendeine Funktion der Richtung zu speichern!

(vorberechnet als LUT)

  Beispiel: Normierung eines Vektors

 Jedes Cube-Map-Texel (s,t,r) speichert in RGB den Vektor

 Jetzt kann man beliebige Texturkoordinaten mittels glTexCoord3f() angeben, und bekommt den normierten Vektor

  Achtung: bei dieser Technik sollte man (meistens) jegliche Filterung ausschalten!

(s, t, r )

! (s, t, r ) !

C G C C G

Cube-Maps in OpenGL

C

glBindTexture( GL_TEXTURE_CUBE_MAP );

glTexImage( GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGB, w, h, 0, GL_RGB, GL_UNSIGNED_BYTE, image );

glTexParameter( GL_TEXTURE_CUBE_MAP, ... );

...

glEnable( GL_TEXTURE_CUBE_MAP );

glBindTexture( GL_TEXTURE_CUBE_MAP );

glBegin( GL_... );

glTexCoord3f( s, t, r );

glVertex3f( ... );

(13)

G. Zachmann Computer-Graphik 2 - SS 08 Texturen 92

C G C C G

Textur-Atlas vs. Cube-Map

C

  Seams

  Dreiecke innerhalb der Patches

  nur für ein Dreiecksnetz

  Mip-Mapping schwierig

  verschwendete Texel

  Sampling-Artefakte an den Rändern der Patches

  Keine seams

  Dreiecke in mehreren Patches

  für viele Dreiecksnetze

  Mip-Mapping okay

  alle Texel benutzt

  Keine Ränder, keine Sampling- Artefakte

C G C C G C

Textur Patch A von

Textur Patch B von

  seams

  Dreiecke innerhalb der Patches

  nur für ein Dreiecksnetz

  Mip-Mapping schwierig

  verschwendete Texel

  keine seams

  Dreiecke in mehreren Patches

  für viele Dreiecksnetze

  Mip-Mapping okay

  alle Texel benutzt

(14)

G. Zachmann Computer-Graphik 2 - SS 08 Texturen 94

C G C C G C

Textur Patch A von

Textur Patch B von

  seams

  Dreiecke innerhalb der Patches

  nur für ein Dreiecksnetz

  Mip-Mapping schwierig

  verschwendete Texel

  Sampling-Artefakte an den Rändern der Patches

  keine seams

  Dreiecke in mehreren Patches

  für viele Dreiecksnetze

  Mip-Mapping okay

  alle Texel benutzt

  keine Ränder, keine Sampling- Artefakte

C G C C G C

  seams

  Dreiecke innerhalb der Patches

  nur für ein Dreiecksnetz

  Mip-Mapping schwierig

  verschwendete Texel

  keine seams

  Dreiecke in mehreren Patches

  für viele Dreiecksnetze

  Mip-Mapping okay

  alle Texel benutzt

(15)

G. Zachmann Computer-Graphik 2 - SS 08 Texturen 96

C G C C G C

  seams

  Dreiecke innerhalb der Patches

  nur für ein Dreiecksnetz

  Mip-Mapping schwierig

  verschwendete Texel

  Sampling-Artefakte an den Rändern der Patches

  keine seams

  Dreiecke in mehreren Patches

  für viele Dreiecksnetze

  Mip-Mapping okay

  alle Texel benutzt

  keine Ränder, keine Sampling- Artefakte

C G C C G C

  seams

  Dreiecke innerhalb der Patches

  nur für ein Dreiecksnetz

  Mip-Mapping schwierig

  verschwendete Texel

  keine seams

  Dreiecke in mehreren Patches

  für viele Dreiecksnetze

  Mip-Mapping okay

  alle Texel benutzt

(16)

G. Zachmann Computer-Graphik 2 - SS 08 Texturen 98

C G C C G

Polycube-Maps

C

  Polycube statt eines einzelnen Würfels

  An Geometrie und Topologie angepaßt

C G C C G

Beispiele

C

Referenzen

ÄHNLICHE DOKUMENTE

Die Punkte A(3|5) und C(7|1) sind Eckpunkte von Dreiecken AB

Zwischen je zwei Positionen von Liniensegmenten gibt es eine optimale Bewegung von einem der folgenden Typen:.. maximal zwei Rotationen und eine geradlinige

Es gibt aber keinen Kongruenzsatz WWW, weil zwei Dreiecke eben ähnlich sind, wenn sie in allen Winkeln

Winkelpunkte der Dreiecke. £Lfnäff‚befg‚riscizel1lrug "IF Geflenseltlge Dll‘60tlonswmkel— Convergenz der Meridiane Betsimmte Punkte. in Pariser Fuss. wie. Candel Pyr..

Bei diesem Dreieck sind auch die beiden Winkel an der längsten (oder kürzesten) Seite gleich groß. Sind bei einem Dreieck alle Seiten gleich lang, nennt

Es ist die Fläche und eine Seite der

1) Wenn man eine Seiten und einen Winkel eines recht- winkligen Dreieckes kennt, kann man die fehlenden Seiten berechnen.. 2) Wenn man zwei Seiten eines rechtwinkligen Dreieckes

Der Inkreis wird konstruiert, indem vom Inkreismittelpunkt eine Senkrechte auf eine der Dreiecksseiten gezeichnet wird.. Die Senkrechte ist der Radius