GLSL. Kann jemand erklären, warum gl_FragCoord.xy / screenSize ausgeführt wird und aus welchem ​​Grund?

13

Ich bin neu in Shadern und weiß, dass Sie mit gl_FragColor Pixel färben können, aber manchmal gibt es Folgendes:

vec2 uv = gl_FragCoord.xy / screenSize; // or resolution or smthn depends on the implementation

Wenn gl_FragCoord wie Pixelkoordinaten ist, was bekommt UV ?

Warum wird es oft in GLSL gemacht?

Wenn jemand ein Beispiel dafür zeichnen könnte, welcher Teil des Bildschirms UV-Strahl ist, ist dies sehr hilfreich!

Idchlife
quelle
Es ist wichtig zu beachten, dass die Rasterisierungsphase vor dem optionalen Fragment Shader eine Fragmentattributinterpolation und eine Ansichtsfenstertransformation für das gl_FragCoordAttribut durchführt.
Matthias

Antworten:

21

Erstens gl_FragCoord.xysind Bildschirmraumkoordinaten des aktuellen Pixels basierend auf der Größe des Ansichtsfensters. Wenn die Größe des Ansichtsfensters also ist width=5, height=4enthält jedes Fragment:

Geben Sie hier die Bildbeschreibung ein

Warum werden UVs benötigt? Zum Beispiel habe ich Geometrie gerendert, um Quad zu screenen, und dann muss ich in einem anderen Rendering-Durchgang eine Nachbearbeitung auf dieses Quad anwenden. Um von diesem Quad abzutasten, benötige ich Texturkoordinaten im Bereich [0, 1]. Um sie zu berechnen, führe ich eine Division durch gl_FragCoord.xy / viewPortSize.

Narthex
quelle
Es könnte erwähnenswert sein, dass GL_TEXTURE_RECTANGLE_ARBkeine normalisierten Koordinaten verwendet werden, GL_TEXTURE_*DTexturen jedoch.
user1118321
1

Einzelheiten und Beispiele finden Sie in der hervorragenden Antwort von narthex.

Wenn Sie wollen Karte die Pixelkoordinatenwerte auf den Bereich 0 bis 1 , teilen Sie von Viewport.

Hazkaz
quelle