Was bewirkt das Ändern von GL_TEXTURE_WRAP) _ (S / T)?


11

Ich arbeite an einigen OpenGL-Tutorials für Anfänger, und das aktuelle zeigt, wie man eine Textur auf ein einfaches Rechteck anwendet. Der Tutorial-Status fordert mich auf, die Texturparameter GL_TEXTURE_WRAP_S und GL_TEXTURE_WRAP_T auf GL_CLAMP_TO_EDGE zu setzen. Ich bin mir jedoch nicht sicher, was dies tatsächlich bewirkt. Ich bin mir bewusst, dass dies damit zu tun hat, wie Texturen behandelt werden, die größer / kleiner als der Raum sind, auf den sie abgebildet werden, aber ich bin mir nicht sicher, welches Verhalten dies tatsächlich verursacht. Was macht GL_CLAMP_TO_EDGE und wie unterscheidet sich das von GL_CLAMP, GL_CLAMP_TO_BORDER, GL_REPEAT? Vielen Dank im Voraus und zusätzliche Hilfsbereitschaft, wenn Sie Bilder für einen Idioten wie mich bereitstellen können.

Antworten:


29

Nun, S und T bedeuten nur U und V (oder X und Y, wenn Sie es vorziehen) oder in GLSL:

vec4.xyzw == vec4.rgba == vec4.strq

Im GL_REPEAT-Modus werden Texturen wiederholt, wenn Sie den Bereich (0,0) bis (1,1) überschreiten

Im GL_CLAMP_TO_EDGE-Modus werden Texturen am letzten Pixel angehalten, wenn Sie von der Kante fallen.

GL_CLAMP und GL_CLAMP_TO_BORDER werden abgeschrieben, da alle Texturränder 0 Pixel betragen müssen, sodass die Modi keinen Sinn mehr ergeben. (Ich glaube, irgendwo in der Nähe von GL3)

Es gibt weitere Modi. Lesen Sie daher unbedingt die Dokumente. (Beispiele: GL_MIRRORED_REPEAT, GL_MIRROR_CLAMP_TO_EDGE)


Es gibt einige gute Beispiele auf http://www.flipcode.com/archives/Advanced_OpenGL_Texture_Mapping.shtml . Hier eine Vorschau:

Wrap S: GL_CLAMP / Wrap T: GL_CLAMP

Klemme Klemme

Wrap S: GL_CLAMP / Wrap T: GL_REPEAT

Klemmwiederholung

Wrap S: GL_REPEAT / Wrap T: GL_CLAMP

Klemme wiederholen

Wrap S: GL_REPEAT / Wrap T: GL_REPEAT

wiederholen wiederholen wiederholen


Vielen Dank. Gute Antwort. Wissen Sie, ob es einen Unterschied zwischen GL_CLAMP_TO_EDGE und GL_CLAMP gibt und ob es sowieso nur darum geht, die Textur zu erweitern, um den verfügbaren Platz zu füllen?
— w4etwetewtwet

Es tut mir leid, dass ich nicht geklärt habe, wo ich CLAMP sage. Ich meine GL_CLAMP_TO_EDGE. GL_CLAMP ist in modernem OpenGL verschwunden. Ich werde die Antwort bearbeiten, um das zu betonen.
— MickLH

Was "Erweitern" betrifft, wenn Sie einfach das Strecken der Textur in einen anderen Bereich meinen, sollte dies während der Netzparametrierung behandelt werden. (UV-Mapping, Künstlerjob) .. Wenn Sie es wirklich pragmatisch machen müssen, müssen Sie Ihre eigene Formel schreiben, um sie in einem Shader zu verwenden. (Oder ich denke GL_TEXTURE Matrix, wenn Ihre App bereits stark veraltet ist: P)
— MickLH

3

Hier ist ein Auszug aus der OpenGL-Referenzseite auf glTexParameter vom 07.02.2014, der zum leichteren Lesen etwas formatiert wurde:

GL_TEXTURE_WRAP_S

Setzt die Wrap - Parameter für Texturkoordinaten s auf beiden GL_CLAMP_TO_EDGE, GL_CLAMP_TO_BORDER, GL_MIRRORED_REPEAT, GL_REPEAT oder GL_MIRROR_CLAMP_TO_EDGE.

  • GL_CLAMP_TO_EDGE bewirkt, dass die s- Koordinaten auf den Bereich geklemmt werden Angebot, wobei N die Größe der Textur in Klemmrichtung ist.

  • GL_CLAMP_TO_BORDER auswertet s Koordinaten in ähnlicher Weise wie GL_CLAMP_TO_EDGE.
    In Fällen, in denen im GL_CLAMP_TO_EDGE-Modus eine Klemmung aufgetreten wäre, werden die abgerufenen Texeldaten durch die durch GL_TEXTURE_BORDER_COLOR angegebenen Werte ersetzt.

  • GL_REPEAT bewirkt, dass der ganzzahlige Teil der s- Koordinate ignoriert wird.
    Der GL verwendet nur den Bruchteil, wodurch ein sich wiederholendes Muster erzeugt wird.

  • GL_MIRRORED_REPEAT bewirkt, dass die s- Koordinate auf den Bruchteil der Texturkoordinate gesetzt wird, wenn der ganzzahlige Teil von s gerade ist. Wenn der ganzzahlige Teil von s ungerade ist, wird die Texturkoordinate s auf gesetzt 1-frac, wobei fracder Bruchteil von s dargestellt wird .

  • GL_MIRROR_CLAMP_TO_EDGE bewirkt, dass die s- Koordinate wie bei GL_MIRRORED_REPEAT für eine Wiederholung der Textur wiederholt wird. An diesem Punkt wird die Koordinate wie in GL_CLAMP_TO_EDGE geklemmt.

Zunächst wird GL_TEXTURE_WRAP_S auf GL_REPEAT gesetzt .

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.