- Sebagian besar layar 2D / sistem koordinat bitmap memiliki sumbu Y positif mengarah ke bawah (dengan asal di sudut kiri atas).
- Ini bertentangan dengan bagaimana kebanyakan orang berpikir secara geometris dengan sumbu Y positif mengarah ke atas (dengan asal di tengah).
Bagaimana sebagian besar game mengelola dua sistem koordinat 2D yang berbeda? Ada dua jenis utama koordinat (layar vs Cartesian), tetapi mungkin ada banyak ruang koordinat yang berbeda: ruang sprite, ruang dunia, ruang tampilan, ruang layar, dll ...
Latar Belakang:
Saya awalnya membuat koordinat dunia dalam game saya cocok dengan konvensi koordinat layar 2D. Ini membuatnya sangat alami untuk menggunakan rutinitas menggambar grafik, tetapi masalah halus muncul ketika menggunakan fungsi trigonometri seperti atan2 (). Hasil pengumpanan atan2 () koordinat layar 2D sangat membingungkan karena atan2 () mengasumsikan sumbu y positif mengarah ke atas.
Jadi saya mengubah koordinat dunia saya untuk mengikuti sistem koordinat Cartesian klasik (dengan asal di bagian kiri bawah layar). Penalaran dengan atan2 () jauh lebih mudah, tetapi sekarang lebih sulit untuk melakukan jenis penalaran lain:
- Jika saya mengklik layar di sini, sprite apa yang ada di bawahnya?
- Di mana saya mengklik sprite itu?
- Jika sprite diambil di lokasi yang salah, apa yang salah dihitung? Layar koordinat atau koordinat dunia?
Saya menyadari konversi dari layar ke koordinat Cartesian hanya melibatkan penskalaan nilai y dengan -1 dengan terjemahan opsional dari kedua nilai (x, y). Saya lebih tertarik dengan praktik terbaik untuk desain game:
- Apakah sebagian besar game hanya bertahan dengan konvensi koordinat layar dan mengubah pemikiran mereka tentang bagaimana hal-hal seperti atan2 () harus bekerja?
- Kapan / bagaimana konversi sistem koordinat dilakukan? (Menggunakan matriks, abstraksi OOP, dll)
- Apakah lokasi sprite disimpan sebagai pusat sprite atau salah satu sudut? Tinggi / lebar sprite yang mengarah ke arah yang "salah" tampaknya menjadi masalah yang umum ketika saya menggambar mereka.
Meskipun pertanyaan saya terutama tentang game 2D, tampaknya OpenGL menggunakan sistem koordinat di mana sumbu Y mengarah. OpenGL akhirnya harus memproyeksikan koordinat 3D tersebut ke sistem koordinat layar 2D. Mungkin beberapa panduan dapat ditemukan dalam metode OpenGL ...