Tôi hy vọng ai đó có thể giúp tôi hiểu GLViewport và điều gì xảy ra khi chúng tôi thay đổi kích thước
Điều này sẽ minh họa cho sự nhầm lẫn của tôi ....
Vì vậy, ở đây tôi có một quad bị kẹt ở giữa màn hình. Nếu tôi có GLViewport phù hợp với chiều rộng và chiều cao của thiết bị, tôi sẽ nhận được những gì trên hình ảnh đầu tiên (bên trái). Chính xác những gì tôi mong đợi.
- Độ phân giải thiết bị, 2560 x 1600
- Độ phân giải khung nhìn 2560 x 1600
- Kích thước Quad 200 x 200 (Lưu ý, hình ảnh trên không được chia tỷ lệ !!! :-))
- Hình tứ giác, xuất hiện dưới dạng hình vuông
Bây giờ, cho bức ảnh thứ 2 (tay phải) ...
- Độ phân giải thiết bị, 2560 x 1600
- Độ phân giải khung nhìn 2560 x 1200 (và được căn giữa)
- Kích thước Quad (200, 200)
- Hình tứ giác, xuất hiện dưới dạng hình chữ nhật
Câu hỏi của tôi là, tại sao bây giờ quad hiển thị như một hình chữ nhật mà không phải là một hình vuông? Tôi đã xác nhận bằng cách đăng nhập rằng quad của tôi là 200 x 200 pixes - chắc chắn kích thước của các pixel vật lý vẫn giữ nguyên? Họ không thể thay đổi. Chuyện gì đang xảy ra ở đây vậy?
Tôi đã nghĩ (rõ ràng không chính xác) rằng khi tôi thu nhỏ khung nhìn, nó chỉ bị cắt bớt các pixel.
Sẽ đánh giá cao nếu ai đó có thể giải thích làm thế nào điều này hoạt động.
Biên tập
Hiện tại, tôi đang thiết lập chế độ xem của mình như thế này:
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 và offsetY chỉ để khi có hộp thư, khung nhìn được căn giữa.
glScissor
thay vì glViewport
, nó sẽ chỉ cắt các pixel mà không thay đổi nơi mọi thứ được hiển thị. glViewport
hành xử giống như thay đổi kích thước hình ảnh gốc, hơn là cắt xén nó; đó là lý do tại sao nó squish hộp của bạn.