Espero que alguém possa me ajudar a entender o GLViewport e o que acontece quando o redimensionamos
Isso ilustrará minha confusão ....
Então, aqui tenho um quad preso no meio da tela. Se meu GLViewport corresponder à largura e altura do dispositivo, recebo o que está na primeira foto (mão esquerda). Exatamente o que eu esperaria.
- Resolução do dispositivo, 2560 x 1600
- Resolução de viewport 2560 x 1600
- Quad tamanho 200 x 200 (Observe que a imagem acima não está à escala !!! :-))
- Formato quad, aparece como quadrado
Agora, para a segunda foto (mão direita) ...
- Resolução do dispositivo, 2560 x 1600
- Resolução de viewport 2560 x 1200 (e centralizada verticalmente)
- Tamanho quádruplo (200, 200)
- Forma quad, aparece como retângulo
Minha pergunta é: por que o quad está exibindo agora um retângulo e não um quadrado? Confirmei, registrando que meu quad tem 200 x 200 pixels - certamente o tamanho dos pixels físicos permanece o mesmo? Eles não podem mudar. Então, o que está acontecendo aqui?
Eu pensei (claramente incorretamente) que, quando redimensionei a janela de visualização, ela apenas cortou pixels.
Gostaria que alguém pudesse explicar como isso funciona.
Editar
Atualmente, estou configurando minha viewport assim:
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 e offsetY são apenas para que, quando houver caixas de correio, a viewport seja centralizada.
glScissor
vez de glViewport
, simplesmente cortará os pixels sem alterar onde algo é renderizado. glViewport
comporta-se mais como redimensionar a imagem original, em vez de cortá-la; é por isso que esmaga sua caixa.