Saya berada pada tahap pengembangan game saya di mana saya perlu membuat HUD atau GUI. Saya tidak pernah sampai di bagian ini, jadi saya tidak tahu bagaimana caranya. Saya mencoba merender quad sederhana pada posisi tetap di layar, tetapi ada masalah. Untuk membuat kamera saya berfungsi dengan ortografis, saya menggunakan ini:
public void lookThrough()
{
GL11.glMatrixMode(GL11.GL_PROJECTION);
GL11.glLoadIdentity();
GL11.glOrtho(position.x, position.x + Display.getDisplayMode().getWidth()/zoom, position.y + Display.getDisplayMode().getHeight()/zoom, position.y, -1, 1);
GL11.glMatrixMode(GL11.GL_MODELVIEW);
}
Saya tidak melihat bagaimana saya dapat membuat sesuatu diperbaiki di layar menggunakan metode ini? Ada jalan lain? Terima kasih :)
([0...1], [0...1], 0, 1)
tanpa proyeksi, tampilan atau matriks dunia, mereka akan selalu mendarat di ruang layar.Jawaban:
Ini dari mesin game berbasis OpenGL lama yang saya coba tulis sekitar tujuh tahun yang lalu ditulis dalam C ++ begitu telanjang ketika saya mencoba menjelaskan bagaimana saya menangani dunia 3D dan operasi rendering GUI 2D di dalamnya. Saya menggunakan empat metode utama dalam kelas renderer OpenGL saya (OGLRender) di antaranya adalah:
render2D () untuk gambar 2D GUI yang sebenarnya.
Dan kemudian di loop utas utama saya pada dasarnya hanya akan memanggil metode dalam urutan berikut:
Jadi, apa yang saya lakukan adalah saya menggambar adegan dunia 3D saya terlebih dahulu dan kemudian saya menggambar GUI saya terakhir sehingga GUI selalu di atas panggung dunia. metode ready3D () membuat proyeksi dunia 3D siap untuk menggambar adegan dunia dan metode ready2D () membuat adegan 2D ortho siap untuk menggambar GUI.
m_Setup.width
danm_Setup.height
hanya dimensi layar port tampilan.Apa yang istimewa tentang metode ready2D () adalah bahwa
gluOrtho2D()
fungsi dipanggil dengan argumen yang memberi tahu ketika kita menggambar primitif GUI kita menggambar mereka di koordinat layar yang ditentukan untuk mencocokkan Windows, Mac, dan sistem koordinat layar desktop lainnya. Seperti kiri atas adalah (0,0) dalam format (X, Y) sedangkan kanan bawah(ViewportWidth-1, ViewportHeight-1)
. DanglTranslatef()
digunakan untuk mengoreksi posisi akurat per-pixel. Sehingga ketika kita menggambar garis dari (0,0) hingga (0,9) maka garis tersebut akan benar-benar menarik dari kiri-atas dan lurus ke bawah sepuluh piksel panjang total dan satu piksel lebar.Secara keseluruhan Anda kemungkinan besar hanya tertarik pada apa yang dilakukan metode ready2D () . Saya memberikan contoh kode sumber metode lain untuk memberi Anda gambaran tentang bagaimana umumnya game melakukan adegan dunia 3D dan urutan gambar GUI.
sumber