Espero que alguien pueda ayudarme a comprender el GLViewport y lo que sucede cuando cambiamos el tamaño
Esto ilustrará mi confusión ...
Entonces, aquí tengo un quad atrapado en el medio de la pantalla. Si mi GLViewport coincide con el ancho y la altura del dispositivo, obtengo lo que está en la primera imagen (izquierda). Exactamente lo que esperaría.
- Resolución del dispositivo, 2560 x 1600
- Resolución de la ventana de visualización 2560 x 1600
- Tamaño cuádruple 200 x 200 (¡¡¡Nota, la imagen de arriba no está a escala !!! :-))
- Forma cuádruple, aparece como cuadrado
Ahora, para la segunda foto (mano derecha) ...
- Resolución del dispositivo, 2560 x 1600
- Resolución de la vista 2560 x 1200 (y centrada verticalmente)
- Tamaño cuádruple (200, 200)
- Forma cuádruple, aparece como rectángulo
Mi pregunta es, ¿por qué el quad se muestra ahora como un rectángulo y no como un cuadrado? He confirmado al iniciar sesión que mi quad es de 200 x 200 pixeles, ¿seguramente el tamaño de los píxeles físicos se mantiene igual? No pueden cambiar. Entonces, ¿qué está pasando aquí?
Pensé (claramente incorrectamente) que cuando escalé la ventana gráfica, literalmente solo cortó píxeles.
Agradecería si alguien pudiera explicar cómo funciona esto.
Editar
Actualmente, estoy configurando mi ventana gráfica de esta manera:
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 y offsetY son solo para que cuando haya buzones, la ventana se centre.
glScissor
lugar de glViewport
, simplemente recortará los píxeles sin cambiar el lugar donde se representa. glViewport
se comporta más como cambiar el tamaño de la imagen original, en lugar de recortarla; Es por eso que golpea tu caja.