Cara yang disukai untuk merender teks dalam OpenGL [ditutup]


17

Saya akan mengambil gambar komputer sekali lagi untuk proyek universitas. Untuk proyek sebelumnya saya menggunakan perpustakaan bernama FTGL yang tidak membuat saya cukup puas karena rasanya agak berat (saya mencoba banyak teknik rendering, rendering teks tidak skala dengan sangat baik).

Pertanyaan saya adalah, apakah ada perpustakaan yang baik dan efisien untuk ini? Jika tidak, apa yang akan menjadi cara untuk mengimplementasikan teks yang terlihat cepat tapi menyenangkan? Beberapa kegunaan yang dimaksudkan adalah:

  • Label objek / karakter mengambang
  • Dialog
  • Menu
  • HUD

SUNTING: Lebih disukai juga bisa memuat font


1
Ini adalah "teknologi mana yang menggunakan pertanyaan", dan karenanya harus ditutup.
Laurent Couvidou

Jawaban:


4

Kerangka kerja yang populer adalah GUI Gila Eddie .

Tapi sementara itu menarik, itu tidak biasa untuk menggulung sendiri (dan mungkin menyesal karena ruang lingkup meningkat nanti;))

Ini normal untuk memiliki mesin terbang Anda pada bitmap dan kemudian menggambar bitmap menggunakan OpenGL.

Terkadang Anda menampilkan teks sementara yang mungkin hanya muncul untuk beberapa bingkai. Cukup menggunakan GL_QUADS + glVertex sudah cukup. Tetapi untuk sejumlah besar teks atau durasi visibilitas yang panjang, ada baiknya menempatkan GL_QUADS di VBO - saya perhatikan peningkatan kinerja besar dari ini.

Tentu saja ada pertanyaan untuk menghasilkan mesin terbang yang sebenarnya Anda butuhkan. Ada beberapa program seperti bmfont yang dapat Anda gunakan untuk itu. Atau Anda mungkin perlu rendering yang lebih rumit, mis. Mengetik bebas sesuai permintaan. Saya telah menggunakan bmfont dengan renderer saya sendiri dengan cukup senang, sangat mudah untuk disimpulkan.


9

Ada banyak cara - tergantung pada apa yang Anda inginkan ... Seperti di tempat lain, tidak ada sesuatu seperti "solusi terbaik". Plattform mana yang menjadi target Anda? Bahasa apa yang Anda gunakan? Apa tentang pengubahan ukuran / rotasi teks - apakah perlu? Apakah Anda harus dapat membuat TrueTypeFonts? Whats tentang Multilanguage / Unicode? Bagaimana Anda ingin menyimpan teks Anda (yang mana pengkodean dll)?

Saya pernah menggunakan FTGL di masa lalu, dan juga freetype murni (http://www.freetype.org/ berdasarkan FTGL ini), berbagai jenis font bitmap, font garis besar ... Sekarang saya sebagian besar kecanduan bitmap font, tapi itu hanya preferensi pribadi saya. Karena saya tidak ingin berurusan dengan rangkaian karakter yang berbeda, pengkodean dan hal-hal seperti itu lagi - dan lisensi untuk bitmapfonts juga lebih mudah dan lebih murah daripada untuk TrueTypeFonts. Dan ini dapat digunakan pada setiap plattform yang dapat memuat gambar. Saya hanya menggunakan quad di openGL dan memetakan sebagian tekstur saya di atasnya. Sisi lain adalah: Font hanya akan bersih resizable pada faktor sekitar +/- 50%. Jika Anda bisa hidup dengan itu, saya sarankan menggunakan bitmapfont.

Jika Anda juga harus berurusan dengan pengkodean / rangkaian karakter yang berbeda, Anda harus menemukan cara untuk memuat dan menggunakan TrueTypeFonts (seperti dengan freetype, menggunakan perpustakaan lain atau dengan implementasi Anda sendiri) ...

Lihat juga tutorial berbeda tentang topik ini:

http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=13 Bitmap Fonts

http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=14 Font Garis Besar

http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=15 Font Garis Tekstur yang Dipetakan

http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=17 Font Tekstur 2D

Semoga berhasil!


+1 Terima kasih atas info berharga tentang kinerja, saya memang tahu tentang tutorial NeHe. Saya pikir saya memang menggunakan font bitmap ... tetapi tidak menskala: sekitar 60 label mengambang di adegan di atas bola yang digabungkan dengan garis, ada wawasan tentang itu? (Saya berpikir saya seharusnya mencari cara untuk menerapkan pola kelas terbang)
dukeofgaming

1
Perhatian: Tutorial NeHe adalah untuk pipeline fungsi tetap lama dan tidak sering diperbarui. Jika Anda mencari solusi OpenGL modern, lihat stackoverflow.com/questions/5262951/…
brita_

6

Jika Anda ingin menggunakan font bitmap, Anda tidak bisa salah dengan Generator Font Angelcode Bitmap: http://www.angelcode.com/products/bmfont/

Ini mengkonversi font truetype ke satu atau lebih tekstur (dengan mesin terbang yang dikemas dengan baik), dan menampilkan file kecil yang mengandung UV dan jarak (saya menemukan bahwa output XML sangat mudah untuk dikerjakan, dan kualitas data spasi umumnya sangat baik, bahkan tanpa benar kerning)



0

Pertimbangkan QML . Ini adalah perpustakaan UI yang berfungsi penuh dengan sintaks yang mudah digunakan. Kumpulan fitur-fiturnya secara signifikan lebih baik daripada CEGUI dalam pengalaman saya, dan memiliki dokumentasi, dukungan, dan komunitas yang lebih baik karena target utamanya adalah aplikasi desktop dan kemampuan untuk membuat offscreen hanyalah semacam bonus.

Pro:

  • Ini menggunakan OpenGL di bagian belakang untuk semua rendering
  • Itu dapat memuat font apa pun yang tersedia untuk sistem host dan juga dapat mem-parsing font tambahan yang Anda sertakan sebagai sumber daya
  • Menggunakan rendering teks bidang jarak yang ditandatangani untuk hasil yang efisien dan berkualitas tinggi
  • Itu dapat membuat langsung ke tekstur OpenGL, sehingga Anda dapat menempatkan hasilnya di lingkungan gim Anda dengan mudah
  • Qt memiliki banyak ikatan bahasa

Cons:

  • Qt adalah kerangka kerja besar
  • Menggunakan QML dalam proyek Direct3D atau Vulkan membutuhkan lompatan melalui simpai untuk mendapatkan tekstur GL ke API yang sesuai (atau menunggu seseorang untuk menulis render D3D / Vulkan asli untuk QML)
  • Masih ada beberapa quirks kecil di QML di mana ia akan mencoba menggunakan kontrol asli bahkan jika Anda merender ke permukaan offscreen, seperti ketika Anda mencoba membuka dropdown untuk item daftar.
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.