Apakah OpenGL cocok untuk game 2D?


44

Saya telah belajar sendiri perpustakaan OpenGL untuk sementara waktu sekarang, dan ingin mulai membuat game. Namun, untuk perkenalan yang lebih mudah, saya ingin memulai dengan sesuatu yang 2D, seperti permainan gaya Pokemon top-down.

Apakah ini rencana yang bagus, atau apakah OpenGL dibuat khusus untuk 3D?



Saya pikir salah satu manfaat yang dimiliki OpenGL untuk 2D, adalah Anda mendapatkan manfaat shader. Ini bisa berguna untuk mencapai efek khusus. Manfaat lain, adalah bahwa jika Anda sudah tahu OpenGL, Anda sudah terbiasa dengan API.
Lysol

Jawaban:


44

OpenGL cukup tepat untuk game 2D. Meskipun umumnya digunakan untuk 3D, fungsi yang sama dapat digunakan untuk game 2D. Artinya, apa pun yang dapat Anda lakukan dengan 3D OpenGL akan berlaku dengan OpenGL "2D".

Beberapa informasi lebih lanjut dapat ditemukan di lokasi ini .

OpenGL 2D dicapai dengan cara yang sama dengan OpenGL 3D. 2D OpenGL hanya merupakan penerapan teknik, yaitu rendering adegan pada bidang datar, kemudian menggunakan dan proyeksi ortografis, bukan proyeksi perspektif, yang, tergantung pada pengaturan Anda, dapat mengubah pemandangan.

Sebuah contoh:

Ortho vs perspektif

(a) adalah adegan dalam proyeksi ortografis. (B) adalah adegan yang sama, menggunakan proyeksi perspektif. Dalam gim 2D, ini dapat menyebabkan kesalahan penempatan sprite jika kedalamannya diubah (yang, tergantung pada bagaimana Anda melakukan pengembangan, mungkin demikian). Menggunakan proyeksi perspektif juga membuat menyelaraskan hal-hal dalam koordinat layar lebih sulit.

Selain itu, OpenGL membawa banyak, banyak, banyak manfaat dengannya. Terutama, akselerasi perangkat keras merupakan nilai tambah yang besar. Ada juga tingkat kontrol yang jauh lebih baik atas apa yang dilakukan kartu grafis dan bagaimana kelanjutannya, memungkinkan untuk pengoptimalan kasus tertentu


Terima kasih banyak! Saya hanya ingin konfirmasi bahwa tidak apa-apa untuk melakukan ini.
w4etwetewtwet

4
Jika Anda memiliki bakat dan minat untuk menggunakan OpenGL untuk 2D, itu akan memberi Anda banyak hadiah yang hanya bisa diberikan oleh OpenGL. Performa terik, kompatibilitas lintas platform ... Pikirkan seperti ini. Hampir semua pilihan lain untuk 2D akan dibangun di atas OpenGL. Ini kesempatan bagus untuk memotong beberapa "perantara"
Steven Lu

2
@StevenLu dan belum lagi, menjadi sedikit lebih dari seorang programmer yang nyata
Outurnate

Bagus dibaca! Terima kasih telah menghubungkannya. Yup: pengkodean 2D Anda dengan OpenGL langsung hanya lebih buruk sehingga itu sebabnya Anda harus melakukannya.
Steven Lu

1
Anda harus memberikan lebih banyak informasi untuk jawaban ini daripada hanya sebuah tautan. Mungkin menjelaskan mengapa GL bekerja untuk 2D (tampilan ortografis) dan keuntungan apa yang dibawanya (akselerasi perangkat keras, efek shader).
Sean Middleditch

22

OpenGL sebagaimana namanya adalah pustaka grafis. Meskipun dikembangkan dengan 3d dalam pikiran, tidak ada asumsi hardcode di perpustakaan bahwa Anda akan menggunakan 3d. Selain itu, berkat kemampuan 3D-nya, beberapa hal yang sulit dilakukan dalam pendekatan 2d yang sepele. Contoh:

  • Penyortiran-Z disederhanakan dengan menggunakan koordinat kedalaman 3d koordinat (hati-hati terhadap transparansi)
  • rotasi sprite dan penskalaan pada dasarnya gratis karena Anda menggunakan paha depan bertekstur yang tidak tergantung pada resolusi
  • jika Anda ingin membatasi diri pada kartu grafis yang mampu OpenGL 2.0, Anda dapat memanfaatkan shader, yang akan menyederhanakan penulisan efek khusus banyak (kabur, efek partikel, manipulasi gambar, penggantian warna) - belum lagi bahwa itu akan menjadi jauh lebih cepat daripada yang dilakukan sisi CPU

Ini hanya beberapa keunggulan yang datang dari atas kepala saya, saya kira ada beberapa yang lain.


3
Tolong batasi diri Anda dengan kartu grafis yang mampu OpenGL 2.0 (atau lebih besar), OpenGL 2.0 dirilis pada 2004, bahkan itu sudah ketinggalan zaman.
Slicedpan

@ Sledpan, sayangnya beberapa laptop / netbook masih datang dengan kartu Intel yang memiliki dukungan GL 1.4 max - secara pribadi saya memutuskan untuk membuangnya, tetapi beberapa orang (terutama ketika membuat game sederhana) mungkin ingin mendukung mereka.
Kornel Kisielewicz

16

Sementara OpenGL adalah API 3D, Anda masih bisa menggunakannya untuk membuat game 2D. Anda dapat memalsukan lingkungan 2D dalam 3D melalui berbagai teknik, seperti membatasi data ke pesawat.

Namun, ada dukungan terbatas dalam API aktual untuk melakukan ini dengan cara yang jelas (misalnya, tidak ada fungsi "nyalakan mode 2D"). Cara-cara di mana Anda akan mensimulasikannya (yang dapat Anda temukan di banyak tutorial online) mungkin sulit untuk dipahami sepenuhnya tanpa memahami pipa 3D yang sebenarnya digunakan di bawah tenda.

Kedengarannya seperti Anda telah melihat OpenGL untuk sementara waktu dan mungkin sangat memahami dasar-dasar itu. Namun, jika Anda merasa goyah pada mereka, Anda mungkin ingin memulai dengan gim Anda dengan menggunakan perpustakaan 2D yang dibangun di atas OpenGL, seperti cocos2d . Ini akan memberi Anda beberapa pengalaman dengan tampilan 2D API umumnya dan masih memberi Anda manfaat dari back-end 3D yang dipercepat perangkat keras, jika Anda merasa belum siap untuk menyelesaikan semuanya sendirian.



5

Banyak pustaka grafis 2d seperti SDL atau SFML menggunakan akselerasi perangkat keras OpenGL. Ini memberi Anda manfaat kinerja OpenGL, tetapi mengabstraksi detail tingkat rendah yang jahat di balik API yang jauh lebih sederhana.


0

Saya sekarang memiliki banyak pengalaman dalam pemrograman OpenGl, dan saya dapat memberitahu Anda itu adalah rasa sakit. Di masa lalu ketika saya mulai pemrograman saya sangat produktif di lingkungan yang sederhana seperti BlitzBasic. Kemudian saya mulai melangkah ke langkah selanjutnya dengan belajar C ++ dan OpenGl. Dan ketika Anda tidak memiliki guru atau orang yang baik untuk bertanya, Anda akan secara permanen mengalami layar hitam. Masalah terbesar adalah neraka negara OpenGl. Ada banyak switch yang bisa Anda tukarkan untuk mengubah status operasi. Dan beberapa sakelar bergantung pada sakelar lainnya. misalnya glGet (GL_TEXTURE_BINDING_2D) tergantung pada glGet (GL_ACTIVE_TEXTURE). Dan dokumentasi negara mana tergantung pada negara mana yang bukan yang terbaik. Banyak operasi seperti pemuatan tekstur mengharuskan Anda untuk mengubah keadaan ini yang sangat sering menyebabkan kerusakan kode lain yang memerlukan keadaan lama. Dan kemudian ada masalah ini yang OpenGl sebagai implementasi tergantung perilaku, sehingga program Anda berjalan di komputer Anda tetapi di komputer lain semua yang Anda lihat adalah hitam. Yang dapat Anda lakukan di sini hanyalah menebak apa yang salah dalam 10.000 baris kode Anda. Jadi jika Anda suka frustrasi maka ya gunakan OpenGl untuk hal-hal 2D. Untuk semua orang lain, jangan lakukan itu jika Anda tidak membutuhkannya. Anda bisa menjadi produktif di OpenGl, tetapi itu akan menghabiskan banyak waktu dan saraf Anda. Lebih dari yang Anda inginkan. Anda bisa menjadi produktif di OpenGl, tetapi itu akan menghabiskan banyak waktu dan saraf Anda. Lebih dari yang Anda inginkan. Anda bisa menjadi produktif di OpenGl, tetapi itu akan menghabiskan banyak waktu dan saraf Anda. Lebih dari yang Anda inginkan.


-2

Unity3D menggunakan OpenGL, dan saya menggunakannya untuk platformer 2D dan 2.5D. Unity3D pada dasarnya adalah Mesin Game 3D, tetapi juga digunakan untuk game 2D dan 2.5D juga. Anda dapat memiliki x, y, z pesawat dan hanya membatasi pergerakan atau rotasi ke 2 pesawat itu, menciptakan suasana 2D pada dasarnya dunia 3D.


Bagus, downvote pertamaku. Senang melihat gamedev memiliki pembenci juga.
Apollo PERANGKAT LUNAK

1
Saya kira mengilustrasikan poin melalui contoh dunia nyata disukai. Sangat profesional.
Apollo PERANGKAT LUNAK

7
Amit, downvotes tidak menunjukkan "pembenci". Downvotes hanyalah cara bagi masyarakat untuk menyampaikan pendapat mereka tentang pertanyaan dan jawaban. Ini bukan masalah pribadi bagi Anda, jadi cobalah untuk tidak menganggapnya demikian. Saya setuju bahwa downvoter seharusnya mengomentari alasan downvote, karena Anda tidak tahu bagaimana meningkatkan jawaban tanpa umpan balik. Saya akan memberi tahu Anda mengapa saya pikir itu dibatalkan. Hanya karena satu individu menggunakan OpenGL untuk game 2D, tidak berarti secara keseluruhan itu sesuai. Anda juga perlu memberikan alasan mengapa itu pantas.
MichaelHouse

2
Ya, tidak yakin mengapa orang downvoting; bit "using OpenGL" yang saya rasa harus diklarifikasi dengan "menggunakan OpenGL pada platform yang memerlukannya" (menggunakan Direct3D atau API khusus konsol di mana pun selain iOS / Anrdoid / OSX / Linux), tetapi itu lebih merupakan klarifikasi daripada koreksi.
Sean Middleditch

1
Saya tidak melakukan downvote sendiri, tetapi alasan lain jawaban ini tidak sesuai adalah karena Anda menggunakan mesin berbasis OpenGL, bukan OpenGL mentah, yang mengubah banyak hal.
w4etwetewtwet
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.