Về cơ bản, tôi muốn biết làm thế nào tôi có thể loại bỏ sự biến dạng hoặc kéo dài của hình ảnh được hiển thị khi kích thước khung nhìn / cửa sổ thay đổi.
Những hình ảnh sau đây minh họa cho sự biến dạng / kéo dài mà tôi đang nói đến:
Ảnh gốc (Cửa sổ vuông)
Hình ảnh bị bóp méo / kéo dài (Cửa sổ hình chữ nhật)
Lý tưởng nhất, hình ảnh thứ hai sẽ hiển thị hình cầu mà không kéo dài theo chiều ngang và sẽ phơi bày nhiều cảnh hơn cho người dùng để tính kích thước cửa sổ lớn hơn.
Điều này có thể giải quyết như thế nào?
Tôi đang làm việc với OpenGL để hiển thị hình ảnh và tôi sử dụng phép chiếu phối cảnh thông qua các cuộc gọi:
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
gluPerspective(60, window.width/window.height, 0.01f, 100.0f)
Tỷ lệ khung hình width/height
phù hợp với tất cả các tài liệu / hướng dẫn mà tôi đã gặp, vì vậy tôi không hy vọng nó không chính xác. Tuy nhiên, sự nghi ngờ của tôi là nó đang ảnh hưởng đến vấn đề kéo dài.
Sau khi suy nghĩ
Thành thật mà nói, khi tôi nghĩ về vấn đề này nhiều hơn, tôi đã tin rằng giải pháp liên quan đến mối quan hệ tỷ lệ thuận giữa góc fovy (trường nhìn theo hướng y) và tỷ lệ khung hình.
Sử dụng hình ảnh trên làm tham chiếu, nếu chiều rộng tăng (gây ra độ căng ngang), có vẻ rất hợp lý khi góc fovy phải tăng để tạo ra độ giãn dọc 'cố định' tỷ lệ của hình ảnh được hiển thị.
Tương tự như vậy, việc giảm chiều rộng đòi hỏi phải giảm góc fovy.
Cập nhật:
Vì vậy, sau khi điều tra thêm về vấn đề này, tôi đã quyết định thay đổi cách tôi thiết lập chế độ xem như thế này:
gluPerspective(60 * (float)window.width/window.height, (float)window.width/window.height, 0.01f, 100.0f)
Và kỳ vọng của tôi là chính xác, điều đó đã giải quyết vấn đề tỷ lệ. Tuy nhiên, nó không đạt được kết quả mong muốn của tôi. Khi chiều rộng cửa sổ tăng lên, hình ảnh được hiển thị sẽ nhỏ hơn (nhưng hình cầu thực sự là hình tròn). Thay vào đó, hình cầu không nên thay đổi kích thước; chỉ số lượng cảnh được hiển thị sẽ thay đổi.