Làm thế nào để tôi thực hiện một hệ thống độc lập độ phân giải?


10

Tôi đang trống trên cái này. Dĩ nhiên tôi có thể neo các thứ trên các cạnh, điều đó sẽ làm cho độ phân giải UI của tôi trở nên độc lập ... cho đến khi nó thay đổi quá nhiều đến mức đồ họa quá nhỏ. Làm thế nào để tôi mở rộng quy mô phù hợp bất cứ khi nào cần thiết? Làm cách nào để giữ đồ họa của tôi ở đúng tỷ lệ trong khi chia tỷ lệ? Tôi không muốn chúng bị kéo dài nếu độ phân giải có tỷ lệ khác như 16:10 so với bất kỳ thứ gì khác.

Có một cách tiếp cận thực sự và thử nghiệm cho điều này? Trình phát video hiển thị viền đen vì vấn đề này, điều này có thể giải quyết đúng không?


1
Xem câu hỏi [này] [1]. Câu trả lời của tôi giải thích một số chi tiết đẫm máu. [1]: gamedev.stackexchange.com/questions 432 / từ
Kỹ sư

Câu trả lời:


5

Trước tiên hãy nhớ rằng với rasterization về mặt kỹ thuật không có gì gọi là độc lập độ phân giải thực sự. Với độ phóng đại đủ cao, các texels riêng lẻ sẽ bắt đầu hiển thị. Giải pháp duy nhất cho việc này là viết một hệ thống đồ họa vector.

Điều đó đang được nói có một vài bước để tạo ra một hệ thống độc lập độ phân giải dựa trên raster mạnh mẽ: kích thước, hệ thống tọa độ và bố cục.

Để định cỡ và định vị, chúng ta cần sử dụng một số bộ đơn vị duy trì tỷ lệ với độ phân giải ứng dụng thực tế. Trong trường hợp này, hãy sử dụng inch vì tôi là người Mỹ và bạn có thể chia tỷ lệ các phần tử bằng DPI (số chấm trên mỗi inch). Ví dụ: giả sử ứng dụng của bạn đang chạy ở 800x600. Windows DPI mặc định là 96 nên có nghĩa là ứng dụng có độ phân giải (800/96) x (600/96) inch hoặc 8,33x6,25 inch.

Vì bạn cần có khả năng làm việc với, ít nhất, cả hai tỷ lệ khung hình 4: 3 và 16: 9, cách bạn xử lý hệ thống tọa độ màn hình của bạn trở nên khó khăn một chút. Những gì tôi khuyên bạn nên làm là đặt (0,0) vào giữa khu vực hiển thị (cũng như các cửa sổ và điều khiển). Điều này hoạt động tốt bởi vì nếu bạn đặt (0,0) vào một góc thì khi góc đó di chuyển xung quanh dựa trên độ phân giải và tỷ lệ khung hình, nó sẽ dịch tất cả các họa tiết của bạn trong khi trung tâm của màn hình sẽ luôn là trung tâm của màn hình vấn đề thiết bị. Tiếp tục ví dụ của chúng tôi với 800x600, điều này sẽ dẫn đến một hệ tọa độ là (trái sang phải) -4.165in đến 4.165in và (từ trên xuống dưới) 3.125in đến -3.125in.

Vì vậy, tại thời điểm này, bạn có hệ thống UI độc lập DPI với các mục sẽ luôn ở cùng một vị trí so với trung tâm của màn hình - không hoàn toàn độc lập với độ phân giải. May mắn là những gì độc lập DPI cho phép bạn làm là mở rộng giao diện người dùng bằng cách nhân rộng DPI dựa trên một số heuristic. Ví dụ, chúng ta có thể chia tỷ lệ DPI bằng cách sử dụng độ phân giải dọc làm heuristic. Nếu 800x600 là 96 DPI thì chúng tôi sẽ sử dụng 123 DPI cho 1024x768 hoặc 115 DPI cho 1280x720.

Cuối cùng, bạn sẽ cần xây dựng một hệ thống bố trí xử lý cả định vị tuyệt đối cũng như định vị tương đối. Ví dụ tuyệt vời về điều này là WPF và web. Bạn có thể chỉ định rằng các điều khiển / hộp chứa một số% của phần tử cha trong khi cắm nó vào một cạnh cùng với nhiều tùy chọn bố trí tự động hữu ích khác. Tất cả những điều này cùng nhau sẽ dẫn đến một hệ thống UI có khả năng trông gần giống nhau qua nhiều độ phân giải và tỷ lệ khung hình khác nhau.

Tóm lại, tôi khuyên bạn nên nghiên cứu WPF vì nó thực hiện gần như tất cả điều này ngoại trừ việc nó duy trì nguồn gốc ở hệ tọa độ góc trên cùng bên trái và không tự động chia tỷ lệ DPI dựa trên độ phân giải dọc.


-1

Nói chung những gì bạn muốn làm phụ thuộc vào trò chơi.

Một tùy chọn là có viền đen nếu tỷ lệ khung hình (tỷ lệ) khác nhau (có thể dễ nhất, chỉ hiển thị thành kết cấu, sau đó kết xuất màn hình đó, thay đổi kích thước cho phù hợp).

Một tùy chọn khác là có các đường dẫn kết xuất khác nhau cho các tỷ lệ khung hình khác nhau. Bạn có thể có một cho màn hình rộng, một cho 'bình thường'.

Tuy nhiên, một tùy chọn khác là chia tỷ lệ mọi thứ một cách riêng biệt, ví dụ: làm cho hộp thông báo UI lớn hơn hoặc nhỏ hơn tùy theo độ phân giải. Bất cứ khi nào bạn cần tìm ra nơi để vẽ, thay vì sử dụng các pixel chính xác, hãy thực hiện những việc như 0,2 xuống, 0,8 ngang, rộng 0,1, cao 0,3. Buồn bã trong trường hợp này, bạn sẽ trải dài mọi thứ, mặc dù tùy thuộc vào cách bạn vẽ những thứ có thể ổn (tức là kéo dài nền UI, nhưng không phải là văn bản).

Về mặt 3D, miễn là bạn thiết lập chế độ xem chính xác, bạn sẽ kết thúc với việc người chơi màn hình rộng có thể nhìn rõ hơn một chút so với thiết lập màn hình rộng. (thay thế vẽ các viền đen / hoặc kéo dài khung nhìn).


"Chỉ hiển thị thành kết cấu, sau đó kết xuất màn hình đó, thay đổi kích thước cho phù hợp" Không. Điều đó sẽ tạo ra một hình ảnh thực sự mờ và trông lạ. Và nếu độ phân giải quá thấp thì sao? Mọi thứ sẽ trở nên không thể đọc được.
Tara

Hãy đọc, đó là một trong một vài lựa chọn. Bạn chắc chắn sẽ không nhận được các vấn đề mà bạn mô tả (mặc dù nếu được thực hiện đơn giản / không chính xác thì vâng, nó sẽ bị mờ và kéo dài, v.v.)
George Duckett

Tôi tiếp tục đọc. Nhưng câu trả lời của bạn là rất không cụ thể. Ngoài ra, bạn chắc chắn sẽ nhận được các vấn đề tôi mô tả, bởi vì bạn không thể chỉ hiển thị mọi thứ ở độ phân giải thấp và mong muốn văn bản có thể đọc được hoàn hảo.
Tara

Tôi không nói kết xuất ở độ phân giải thấp hơn mục tiêu, mặc dù rõ ràng chỉ hiển thị ở độ phân giải cao hơn cũng sẽ tạo ra các tạo tác. Câu trả lời của tôi cũng có thể được đưa ra, tuy nhiên vì đã có câu trả lời được chấp nhận tốt nên tôi sẽ không trở lại câu trả lời này. Tôi đã đề cập đến kết xuất văn bản cụ thể vì nó hơi khác so với việc chọn vị trí (và lớn như thế nào) để vẽ một cái gì đó nhưng sự thật nó rất ngắn gọn và có thể được xây dựng trên đó.
George Duckett

Tôi cũng không nói kết xuất với độ phân giải thấp hơn mục tiêu. Bạn chỉ đơn giản là không thể lấy UI 1: 1 và hiển thị nó ở độ phân giải thấp hơn so với thiết kế (đó là ý tôi với độ phân giải thấp hơn).
Tara
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.