Ich hoffe, jemand kann mir helfen, das GLViewport zu verstehen und was passiert, wenn wir die Größe ändern
Dies wird meine Verwirrung veranschaulichen ....
Also, hier habe ich ein Quad in der Mitte des Bildschirms. Wenn mein GLViewport mit der Breite und Höhe des Geräts übereinstimmt, erhalte ich das Bild auf dem ersten Bild (links). Genau das, was ich erwarten würde.
- Geräteauflösung 2560 x 1600
- Auflösung des Ansichtsfensters 2560 x 1600
- Quad Größe 200 x 200 (Hinweis, das Bild oben ist nicht maßstabsgetreu !!! :-))
- Quad-Form, erscheint als Quadrat
Nun zum 2. Bild (rechts) ...
- Geräteauflösung 2560 x 1600
- Auflösung des Ansichtsfensters 2560 x 1200 (und vertikal zentriert)
- Quad-Größe (200, 200)
- Quad-Form, erscheint als Rechteck
Meine Frage ist, warum das Quad jetzt als Rechteck und nicht als Quadrat angezeigt wird. Ich habe durch Protokollierung bestätigt, dass mein Quad 200 x 200 Pixel groß ist - bleibt die Größe der physischen Pixel doch gleich? Sie können sich nicht ändern. Also, was ist hier los?
Ich dachte (eindeutig falsch), dass beim Skalieren des Ansichtsfensters nur Pixel abgeschnitten wurden.
Würde mich freuen, wenn jemand erklären könnte, wie das funktioniert.
Bearbeiten
Derzeit stelle ich mein Ansichtsfenster folgendermaßen ein:
width = (int) Math.min(deviceWidth, deviceHeight * 1.702127659574468);
height = (int) Math.min(deviceHeight, deviceWidth / 1.702127659574468);
ratio = width / height;
GLES20.glViewport(offsetX, offsetY, width, height);
Matrix.orthoM(mProjMatrix, 0, -ratio, ratio, -1, 1, 3, 7);
offsetX und offsetY sind nur so, dass das Ansichtsfenster zentriert ist, wenn Briefkästen vorhanden sind.
glScissor
anstelle von verwenden glViewport
, werden einfach Pixel abgeschnitten, ohne zu ändern, wo etwas gerendert wird. glViewport
verhält sich eher so, als würde man die Größe des Originalbilds ändern, anstatt es zu beschneiden; Deshalb zerquetscht es Ihre Box.