2012-05-13 7 views
12

Was ist der Unterschied zwischen einer U V Texturkoordinate und einer S T Texturkoordinate?Unterschied zwischen U V und S T Texturkoordinaten

Ich weiß, dass U V und S T in OpenGL verwendet werden.

Ich weiß auch, dass S T auch in Java verwendet werden.

+2

"Ich weiß, dass U V und S T in OpenGL verwendet werden" Es gibt keinen Platz in der OpenGL-Spezifikation, dass * jemals * auf UV bezieht. –

+1

@ NicolBolas Es gibt zum Beispiel Gleichung 8.7 in der OpenGL 4.3 Spezifikation. – kusma

Antwort

17

Sie bedeuten das Gleiche, es ist nur eine andere Namenskonvention.

U = S = x dimension 
V = T = y dimension 
+0

Tatsächlich verwenden Sie in CG ein Paar dieser Koordinaten, um die Position im Texturraum anzugeben, und das andere ist im Objektraum. Die verschiedenen APIs verwirren dies manchmal oder verwenden es anders. – Arne

+1

@Arne hat noch nie davon gehört. Kannst du eine Quelle angeben? –

+1

@StefanHanke Hm, ich habe gesucht, kann es aber nicht finden. Vielleicht habe ich mich falsch erinnert. Wie auch immer, das ist nur eine Terminologie. Ich fand das Bump-Mapping-Papier von Blinn sehr gut, um Textur-Mapping- und Textur-Space-Operationen im Allgemeinen zu verstehen (http://research.microsoft.com/apps/pubs/default.aspx?id=73939). – Arne

1

Es ist eine Frage der Konvention.

Autodesk 3D Studio, Alias ​​Maya, NewTek Lightwave und wahrscheinlich andere verwendeten Buchstaben U und V für horizontale und vertikale Texturkoordinaten. DirectX folgt der gleichen Konvention.

Pixars RenderMan reserviert jedoch die Buchstaben U und V für Parameter in ihren parametrischen 3D-Primitiven. Für das Texturieren verwendeten sie stattdessen S and T. OpenGL verwendet diese Konvention auch für Texturkoordinaten.

Also ihre Bedeutung kann in der Theorie unterschiedlich sein, aber, wenn Sie an einigen Hollywood-Film-Spezialeffekten arbeiten, meinen sie wahrscheinlich beide Texturkoordinaten.

20

Computer graphics principles and practice (Foley et al) definiert die 2 wie folgt:

Texture Mapping in zwei Schritten erreicht werden kann. Ein einfacher Ansatz beginnt mit der Abbildung der vier Ecken des Pixels auf der Oberfläche. Für ein bikubisches Patch definiert diese Zuordnung natürlich eine Menge von Punkten im Koordinatenraum der Fläche (s, t). Als nächstes werden die Eckpunkte des Pixels in der Koordinatenraum der Oberfläche (s, t) in den Koordinatenraum der Textur (u, v) abgebildet. Die vier (u, v) Punkte in der Texturkarte definieren ein Viereck, das mehr angenähert ist komplexe Form in , die das Pixel tatsächlich aufgrund der Oberflächenkrümmung abbilden kann. Wir berechnen einen Wert für das Pixel durch Summieren aller Texel, die innerhalb des Vierecks liegen, und gewichten jeweils den Bruchteil des Texels, der innerhalb des Vierecks liegt. Wenn ein transformierter Punkt in (u, v) -Raum außerhalb der Textur-Map fällt, kann die Textur-Map wie in Abschnitt 2.1.3 repliziert werden. Verwenden Sie statt immer die Identitäts-Mapping zwischen (s, t) und (u, v) können wir eine Korrespondenz zwischen den vier Ecken des 0-zu-1 (s, t) Rechtecks ​​ und einem Viereck in (u, v) definieren. Wenn die Fläche ein Polygon ist, ist es üblich, Textur-Map-Koordinaten direkt ihren Eckpunkten zuzuweisen.

+1

Sehr schön. Es gibt also einen Unterschied. Abhängig von der Wickelbewegung können 2 verschiedene ST-Paare das gleiche UV-Paar ergeben. ST ist Oberflächenkoordinaten und UV ist Texturkoordinaten, sobald sie umhüllt sind. –

+2

Das ist richtig. Ich verweise auf die OpenGL ES 2.0 Spezifikation, Abschnitt 3.7 auf Texturen. (S, T) sind ein normalisiertes Paar für das Fragment. (U, V) kann als Texturfeldbreite und -höhe in Texeln behandelt werden. Die Begriffe sollten nicht austauschbar verwendet werden. – dturvene

4

uv Startkoordinaten vom oberen linken Ecke (V-Achse nach unten zeigt).
st Koordinaten beginnen von der unteren linken Ecke (T-Achse zeigt nach oben).

s = u; 
t = 1-v; 

I vergessen, dass in OpenGL Texturen zu sagen, sollte vertikal gespiegelt geladen werden, da das erste Element der Zeilendaten „an der linken unteren Ecke des Bildtextur entspricht“ (see glTexImage2D). Nur in diesem Fall scheinen die Koordinaten von st und uv dasselbe zu sein.

+4

Ich glaube nicht, dass die uv-Koordinaten in der oberen linken Ecke beginnen. Sie beginnen in der unteren linken Ecke, wie auch jedes andere Koordinatensystem in OpenGl. Einige Bildformate speichern jedoch ihre Daten beginnend am unteren Rand, was zwingt, das Bild umzudrehen oder vorzugeben, dass das Koordinatensystem oben links beginnt. – maja

+0

Vielen Dank, das '1-v' behob das Problem in meinem Maya zu three.js exporter. : D – lama12345