Untuk pendidikan mandiri, saya sedang menulis mesin platformer 2D di C ++ menggunakan SDL / OpenGL. Awalnya saya mulai dengan SDL murni menggunakan tutorial di sdltutorials.com dan lazyfoo.net, tapi saya sekarang menggunakan SDL untuk membuat konteks rendering OpenGL dan kemudian membuat dengan fungsi OpenGL (mode khusus langsung tetapi saya belajar tentang VAOs / VBOs ). Saya hanya menggunakan SDL untuk antarmuka, audio, dll.
SDL menggunakan sistem koordinat dengan asal di kiri atas layar dan sumbu y positif mengarah ke bawah. Mudah untuk mengatur proyeksi ortografis saya di OpenGL untuk mencerminkan hal ini.
Saya tahu bahwa koordinat tekstur adalah sistem tangan kanan dengan nilai dari 0 hingga 1 - membalik tekstur secara vertikal sebelum rendering (well, balikkan file sebelum memuat) menghasilkan tekstur yang membuat dengan benar ... yang baik jika saya menggambar seluruh tekstur, tetapi pada akhirnya saya akan menggunakan tilesets dan bisa membayangkan masalah.
Apa yang harus saya khawatirkan dalam hal rendering ketika saya melakukan ini?
Jika ada yang punya saran atau mereka sudah melakukan ini sendiri dan bisa menunjukkan jebakan di masa depan, itu akan bagus, tetapi benar-benar ada pikiran yang akan dihargai.
Jawaban:
"Apa yang harus saya khawatirkan dalam hal rendering ketika saya melakukan ini?" - tidak banyak. Sistem koordinasi hanyalah sebuah konvensi, bukan aturan yang keras dan cepat, dan ini adalah hal yang sah dan sah untuk dilakukan. Pastikan bahwa Anda konsisten dalam penggunaan Anda sendiri dan semuanya akan berfungsi dengan baik.
sumber
Ketika bekerja dalam 2D dengan OpenGL, saya sering menggunakan sudut kiri atas sebagai asal. Ini dapat dilakukan dengan:
Namun, ada beberapa jebakan saat mengubah asal ke kiri atas.
Satu perangkap yang pernah saya temui lebih dari sekali:,
glScissor()
yang digunakan untuk kliping, selalu menggunakan koordinat kiri bawah.Tanda tangannya adalah:
di mana
x, y
menentukan sudut kiri bawah kotak gunting.Lebih umum, semua fungsi yang beroperasi di koordinat jendela semua menggunakan kiri bawah sebagai asal. Ini termasuk fungsi seperti
gluProject
,gluUnProject
,glCopyPixels
, dllTetapi beberapa fungsi seperti
glDrawPixels
penggunaanglRasterPos
untuk penentuan posisi, danglRasterPos
menggunakan koordinat objek (yaitu transformasi) .Jika Anda menjalankan di Linux, dan tahu cara menggunakannya
man
, Anda mungkin ingin mengambil salinan manual OpenGL di sini: ftp://ftp.sgi.com/sgi/opengl/doc/ Saya menemukan mereka waktu nyata- penghemat.Saya juga melihat Anda mengatakan "balikkan file sebelum memuat" tekstur. Ini tidak perlu. Alih-alih membalik gambar saat memuatnya, cukup balikkan koordinat tekstur untuk beralih dari 1,0 ke 0,0 saat rendering.
sumber