J'espère que quelqu'un pourra m'aider à comprendre le GLViewport et ce qui se passe lorsque nous le redimensionnons
Cela illustrera ma confusion ...
Donc, ici, j'ai un quad coincé au milieu de l'écran. Si mon GLViewport correspond à la largeur et à la hauteur de l'appareil, j'obtiens ce qui se trouve sur la première image (à gauche). Exactement ce à quoi je m'attendrais.
- Résolution de l'appareil, 2560 x 1600
- Résolution de la fenêtre 2560 x 1600
- Quad taille 200 x 200 (Remarque, l'image ci-dessus n'est pas à l'échelle !!! :-))
- Forme quadruple, apparaît comme carré
Maintenant, pour la 2e photo (à droite) ...
- Résolution de l'appareil, 2560 x 1600
- Résolution de la fenêtre 2560 x 1200 (et centrée verticalement)
- Taille quadruple (200, 200)
- Forme quadruple, apparaît sous forme de rectangle
Ma question est la suivante: pourquoi le quad s'affiche-t-il maintenant comme un rectangle et non comme un carré? J'ai confirmé en enregistrant que mon quad faisait 200 x 200 pixels - la taille des pixels physiques reste sûrement la même? Ils ne peuvent pas changer. Que se passe-t-il?
Je pensais (clairement de façon incorrecte) que lorsque j'ai redimensionné la fenêtre, elle a littéralement juste coupé les pixels.
J'apprécierais si quelqu'un pouvait expliquer comment cela fonctionne.
Éditer
Actuellement, je configure ma fenêtre comme ceci:
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 et offsetY sont juste pour que lorsqu'il y a des boîtes aux lettres, la fenêtre soit centrée.
glScissor
place de glViewport
, il supprimera simplement les pixels sans changer l'emplacement du rendu. glViewport
se comporte plus comme redimensionner l'image originale, plutôt que de la recadrer; c'est pourquoi il écrase votre boîte.