Ich bin neu in OpenGL und versuche, meinen Fragment-Shader herauszufinden. Ich habe ein Rechteck in mein Fenster gezeichnet, und ich möchte die obere Hälfte davon in einer anderen Farbe (etwa blau) färben, ohne die Höhe der Pixel fest zu codieren.Fenstergröße in GLSL für OpenGL?
Mit einer Fensterhöhe von 1000, in meinen Fragment-Shader, die ich habe:
void main(){
if((gl_FragCoord.y) > 500)
{
color = vec3(.3, .3, 1);
}
else
{
color = fragmentColor;
}
Welche Farben die obere Hälfte des Rechteck blau. Aber was wäre, wenn ich die Fensterhöhe von innerhalb meines Fragment-Shaders erhalten möchte anstatt nur 500 Pixel zu verwenden? Ich initialisierte uniform vec2 windowSize
, und versuche, glUniform1i()
zu verwenden, um die Fensterhöhe in dieser Variablen zu platzieren, aber ich weiß nicht wie.
Sie müssen 'glUniform2f' verwenden, um' windowSize' zu setzen, da es sich um 'vec2' handelt. – rwols
Wie kann ich den Aufruf in meinem Fragment-Shader durchführen? Ist es glUniform2f (windowSize,?,?)? Wie soll ich die anderen beiden Argumente weitergeben? – 3PA
Sie erhalten zuerst einen "Handle" für die einheitliche Variable über ['glGetUniformLocation'] (https://www.khronos.org/registry/OpenGL-Refpages/es3.0/html/glGetUniformLocation.xhtml), und verwenden Sie dann diese "handle" als erstes Argument für 'glUniform2f'. Das zweite und dritte Argument für 'glUniform2f' kann beliebig sein. – rwols