Ich habe versucht, pixelgenaue Bitmaps mit Quads in OpenGL zu zeichnen ... und zu meiner Überraschung fehlte eine sehr wichtige Pixelreihe: (Grün ist in Ordnung, Rot ist schlecht)
Die Größe der Quads betrug 30x30 px, wobei das rote 2x2 in der oberen linken Ecke lag.
Die Textur verwendet GL_NEAREST.
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
Ich benutze nicht glViewport und glOrtho. Stattdessen sende ich die Bildschirmabmessungen über Uniformen an die Shader:
uniform float cw;
uniform float ch;
...
gl_Position = vec4( -1.0f + 2.0f*(in_pos.x + in_offset.x)/cw,
1.0f - 2.0f*(in_pos.y + in_offset.y)/ch,
0.0f, 1.0f);
Aber das scheint nicht die Ursache des Problems zu sein, denn wenn ich (0,5,0,5) im Shader hinzufüge (entspricht dem 3. Fall), verschwindet das Problem ...
Ok, jetzt merke ich, dass die dritte Option auch nicht funktioniert:
Überprüfen Sie, ob Sie die richtige Bildschirmgröße an den Shader übergeben haben.
Wenn Sie ein Fenster erstellen, definieren Sie dessen äußere Größe. Der Clientbereich, in dem der Renderkontext abgelegt wird, kann jedoch kleiner sein, wenn das Fenster Kopfzeilen / Dekorationen enthält.
Sie sollten also entweder die Größe des Clientbereichs mit erfragen GetClientRect()
oder die "richtige" Fenstergröße durch Aufrufen ermitteln, AdjustWindowRect()
bevor Sie ein Fenster erstellen. Dadurch erhalten Sie die Fenstergröße, die den Clientbereich in der ursprünglich gewünschten Größe hat.
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen