Saya berharap seseorang dapat membantu saya memahami GLViewport dan apa yang terjadi ketika kami mengubah ukurannya
Ini akan menggambarkan kebingungan saya ....
Jadi, di sini saya punya quad yang macet di tengah layar. Jika saya memiliki GLViewport saya cocok dengan lebar dan tinggi perangkat, saya mendapatkan apa yang ada di gambar pertama (kiri). Persis seperti yang saya harapkan.
- Resolusi perangkat, 2560 x 1600
- Resolusi viewport 2560 x 1600
- Ukuran quad 200 x 200 (Catatan, gambar di atas bukan untuk skala !!! :-))
- Bentuk quad, muncul sebagai kotak
Sekarang, untuk gambar ke-2 (kanan) ...
- Resolusi perangkat, 2560 x 1600
- Resolusi viewport 2560 x 1200 (dan berpusat vertikal)
- Ukuran quad (200, 200)
- Bentuk quad, muncul sebagai persegi panjang
Pertanyaan saya adalah, mengapa quad ditampilkan sebagai persegi panjang sekarang dan bukan persegi? Saya telah mengkonfirmasi dengan mencatat bahwa quad saya berukuran 200 x 200 piksel - tentunya ukuran piksel fisiknya tetap sama? Mereka tidak bisa berubah. Jadi apa yang terjadi di sini?
Saya pikir (jelas salah) bahwa ketika saya memperbesar viewport, itu benar-benar memotong piksel.
Akan sangat menghargai jika seseorang dapat menjelaskan cara kerjanya.
Edit
Saat ini, saya mengatur viewport saya seperti ini:
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 dan offsetY hanya agar ketika ada kotak surat, viewport terpusat.
glScissor
bukan glViewport
, itu hanya akan memotong piksel tanpa mengubah apa pun yang diberikan. glViewport
berperilaku lebih seperti mengubah ukuran gambar asli, daripada memotongnya; itu sebabnya itu meremas kotak Anda.