Bagaimana cara membuat sistem yang mandiri resolusi?

10

Saya mengosongkan yang satu ini. Tentu saja, saya dapat memasang hal-hal di tepi, yang akan membuat resolusi UI saya independen ... sampai sangat berubah sehingga grafiknya terlalu kecil. Bagaimana saya mengukur secara tepat kapan saja diperlukan? Bagaimana cara menjaga grafik saya pada proporsi yang tepat saat penskalaan? Saya tidak ingin mereka membentang jika resolusi memiliki proporsi yang berbeda seperti 16:10 yang bertentangan dengan apa pun.

Apakah ada pendekatan yang benar dan teruji untuk ini? Pemutar video menunjukkan batas hitam karena masalah ini, apakah ini tidak dapat dipecahkan dengan benar?

Blub
sumber
1
Lihat [ini] [1] pertanyaan. Jawaban saya menjelaskan beberapa detail berdarah. [1]: gamedev.stackexchange.com/questions/34/…
Engineer

Jawaban:

5

Pertama-tama perlu diingat bahwa dengan rasterisasi secara teknis tidak ada yang namanya kemerdekaan resolusi sejati. Dengan perbesaran yang cukup tinggi, masing-masing texels akan mulai terlihat. Satu-satunya solusi untuk ini adalah menulis sistem grafik vektor.

Yang sedang dikatakan ada beberapa langkah untuk menciptakan sistem independen resolusi berbasis raster yang kuat: ukuran, sistem koordinat, dan tata letak.

Untuk mengukur dan memposisikan kita perlu menggunakan beberapa set unit yang mempertahankan rasio terhadap resolusi aplikasi yang sebenarnya. Dalam hal ini mari kita gunakan inci karena saya orang Amerika dan Anda dapat skala elemen dengan DPI (titik per inci). Misalnya, aplikasi Anda berjalan pada 800x600. Default Windows DPI adalah 96 sehingga itu berarti aplikasi memiliki resolusi (800/96) x (600/96) inci atau 8,33x6,25 inci.

Karena Anda harus dapat bekerja dengan, paling tidak, rasio aspek 4: 3 dan 16: 9 bagaimana Anda menangani sistem koordinat layar Anda menjadi sedikit rumit. Apa yang saya sarankan lakukan adalah meletakkan (0,0) di tengah area tampilan (serta jendela dan kontrol). Ini bekerja dengan baik karena jika Anda meletakkan (0,0) di sudut maka ketika sudut itu bergerak berdasarkan resolusi dan rasio aspek itu akan menerjemahkan semua sprite Anda sedangkan pusat layar akan selalu menjadi pusat layar tidak masalah perangkat. Melanjutkan contoh kita dengan 800x600 ini akan menghasilkan sistem koordinat yang (kiri ke kanan) -4,165in menjadi 4,165in dan (atas ke bawah) 3,125in hingga -3,125in.

Jadi pada saat ini Anda memiliki sistem UI independen DPI dengan item yang akan selalu berada di tempat yang sama relatif terhadap pusat layar - tidak cukup resolusi independen. Untungnya, apa yang memungkinkan Anda melakukan DPI adalah skala UI dengan skala DPI berdasarkan beberapa heuristik. Misalnya kita dapat skala DPI menggunakan resolusi vertikal sebagai heuristik kami. Jika 800x600 adalah 96 DPI maka kami akan menggunakan 123 DPI untuk 1024x768 atau 115 DPI untuk 1280x720.

Terakhir Anda perlu membangun sistem tata letak yang menangani posisi absolut maupun posisi relatif. Contoh terbaik dari ini adalah WPF dan web. Anda dapat menentukan bahwa kontrol / kotak mengisi beberapa% dari elemen induk sambil memasukannya ke tepi bersama dengan banyak opsi tata letak otomatis lainnya yang berguna. Semua ini bersama-sama akan menghasilkan sistem UI yang mampu terlihat hampir sama di banyak resolusi dan rasio aspek yang berbeda.

Untuk meringkas, saya sangat menyarankan Anda mempelajari WPF karena hampir semua ini dilakukan kecuali itu mempertahankan asal di sistem koordinat sudut kiri atas dan tidak secara otomatis skala DPI berdasarkan resolusi vertikal.

Corillian
sumber
-1

Umumnya yang ingin Anda lakukan tergantung pada gim.

Salah satu opsi adalah memiliki batas hitam jika rasio aspek (proporsi) berbeda (mungkin paling mudah, hanya render ke tekstur, lalu render ke layar, ubah ukurannya sesuai).

Pilihan lain adalah memiliki jalur render yang berbeda untuk rasio aspek yang berbeda. Anda dapat memiliki satu untuk layar lebar, satu untuk 'normal'.

Namun pilihan lain adalah untuk skala hal secara terpisah, misalnya membuat kotak pesan UI lebih besar atau lebih kecil tergantung pada resolusi. Setiap kali Anda perlu menentukan tempat untuk menggambar, alih-alih menggunakan piksel yang tepat, lakukan hal-hal seperti 0,2 ke bawah, 0,8 melintasi, lebar 0,1, tinggi 0,3. Sangat sering dalam hal ini Anda akan mendapatkan peregangan hal-hal, meskipun tergantung pada bagaimana Anda menggambar hal-hal yang bisa baik-baik saja (yaitu meregangkan latar belakang UI, tetapi bukan teks).

Dalam hal 3D, selama Anda mengatur viewport dengan benar, Anda harus berakhir dengan pemain layar lebar yang bisa melihat sedikit lebih banyak daripada pengaturan non-layar lebar. (Atau gambarkan batas hitam / atau regangkan tampilan).

George Duckett
sumber
"hanya render ke tekstur, lalu render ke layar, ubah ukuran sesuai" Tidak. Itu akan membuat gambar tampak benar-benar buram dan aneh. Dan bagaimana jika resolusinya terlalu rendah? Semuanya akan menjadi tidak terbaca.
Tara
Teruslah membaca, itu salah satu dari beberapa pilihan. Anda tidak akan mendapatkan masalah yang Anda jelaskan dengan baik (walaupun jika dilakukan secara sederhana / salah maka ya itu akan kabur dan menggeliat dll.)
George Duckett
Saya terus membaca. Tetapi jawaban Anda sangat tidak spesifik. Anda juga pasti akan mendapatkan masalah yang saya jelaskan, karena Anda tidak bisa hanya membuat semuanya menjadi resolusi rendah dan mengharapkan teks agar tetap dapat dibaca dengan sempurna.
Tara
Saya tidak mengatakan render ke resolusi yang lebih rendah dari target, meskipun jelas hanya rendering pada resolusi yang lebih tinggi akan menghasilkan artefak juga. Jawaban saya bisa saja dikurangi, tetapi karena ada jawaban yang diterima yang baik saya tidak akan kembali ke yang ini. Saya memang menyebutkan rendering teks secara spesifik karena itu sedikit berbeda dengan memilih di mana (dan seberapa besar) untuk menggambar sesuatu tetapi memang benar bahwa itu sangat singkat dan dapat diuraikan lebih lanjut.
George Duckett
Saya tidak mengatakan render ke resolusi yang lebih rendah daripada target. Anda tidak bisa mengambil UI 1: 1 dan membuatnya ke resolusi yang lebih rendah daripada yang dirancang untuk itu (itulah yang saya maksud dengan resolusi lebih rendah).
Tara