OpenGL'de metin oluşturmanın tercih edilen yolu [kapalı]


17

Bir üniversite projesi için bir kez daha bilgisayar grafikleri almak üzereyim. Önceki bir proje için, FTGL adlı bir kütüphane kullandım, bu da beni ağır hissettiği için oldukça memnun bırakmadı (çok sayıda görüntüleme tekniği denedim, metin oluşturma çok iyi ölçeklenmedi).

Sorum şu: Bunun için iyi ve verimli bir kütüphane var mı? Değilse, hızlı ama güzel görünen metni uygulamanın yolu ne olurdu? Amaçlanan bazı kullanımlar:

  • Kayan nesne / karakter etiketleri
  • Diyaloglar
  • Menüler
  • HUD

EDIT: Tercihen yazı tiplerini de yükleyebilir


1
Bu, “hangi teknolojiyi soru kullanacak” dır ve bu nedenle muhtemelen kapatılmalıdır.
Laurent Couvidou

Yanıtlar:


4

Popüler bir çerçeve Crazy Eddie'nin GUI'sidir .

Ancak bu çekici olsa da, kendi rulolarınızı almak olağandışı değildir (ve kapsam daha sonra arttıkça pişman olabilirsiniz;))

Gliflerinizin bitmap'lere sahip olması ve daha sonra Bitg'leri OpenGL kullanarak çizmesi normaldir.

Bazen yalnızca birkaç kare için görünebilecek geçici metin gösterirsiniz. Sadece GL_QUADS + glVertex kullanmak yeterli olacaktır. Ancak herhangi bir büyük miktarda metin veya herhangi bir uzun görüş süresi için GL_QUADS'i bir VBO'ya koymaya değer - bundan büyük performans geliştirmeleri fark ettim.

Elbette ihtiyacınız olan gerçek glifleri üretme sorunu var. Bunun için kullanabileceğiniz bmfont gibi programlar var. Veya daha karmaşık bir oluşturmaya ihtiyacınız olabilir, örneğin isteğe bağlı freetype. Kendi oluşturucumla bmfont'u çok mutlu bir şekilde kullanıyorum, çıkarılması çok basit.


9

Pek çok yol var - ne istediğinize bağlı olarak ... Diğer her yerde olduğu gibi "en iyi çözüm" gibi bir şey yok. Hedefiniz hangi platformdur? Hangi dili kullanıyorsun Metnin yeniden boyutlandırılması / döndürülmesi nedir - gerekli mi? TrueTypeFonts oluşturabilmeniz mi gerekiyor? Multilanguage / Unicode hakkında ne düşünüyorsunuz? Metninizi nasıl saklamak istiyorsunuz (hangi kodlama vb.)?

Geçmişte de FTGL'nin yanı sıra saf freetype (http://www.freetype.org/ FTGL buna dayanıyor), farklı türde bitmap yazı tipleri, anahat yazı tipleri kullandım ... Şimdi çoğunlukla bitmap bağımlısıyım yazı tipleri, ama bu sadece benim kişisel tercihim. Çünkü artık farklı karakter kümeleri, kodlama ve bunun gibi şeylerle uğraşmak istemiyorum - ve bitmapfonts için lisanslama da TrueTypeFonts'a göre daha kolay ve daha ucuz. Ve görüntüleri yükleyebilen her platformda kullanılabilir. Sadece openGL'de bir dörtlü kullanıyorum ve dokumun bir kısmını haritaya veriyorum. Diğer taraf: Yazı tipi yalnızca +/-% 50 oranında temiz yeniden boyutlandırılabilir. Bununla yaşayabilirseniz, bir bitmapfont kullanmanızı öneririm.

Ayrıca farklı kodlama / karakter kümeleriyle uğraşmak zorundaysanız, TrueTypeFonts'u (freetype gibi, başka bir kütüphane kullanarak veya kendi uygulamanızla) yüklemek ve kullanmak için bir yol bulmalısınız ...

Ayrıca bu konuda nehes farklı öğreticiler bir göz atın:

http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=13 Bitmap Yazı Tipleri

http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=14 Anahat Fontları

http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=15 Doku Eşlemeli Anahat Fontları

http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=17 2D Doku Yazı Tipi

İyi şanslar!


+1 Performansla ilgili değerli bilgiler için teşekkürler, NeHe'nin eğitimlerini biliyordum. Sanırım bitmap yazı tipleri kullandım ... ama ölçeklenmedi: çizgilerin katıldığı kürelerin üstünde bir sahnede yüzen yaklaşık 60 etiket, bunun hakkında herhangi bir fikir var mı? (Ben bir sinek siklet desen uygulamak için bir yol aramalıydım düşünüyordum)
dukeofgaming

1
Dikkat: NeHe'nin öğreticileri eski sabit işlevli boru hattı içindir ve sık sık güncellenmez. Modern bir OpenGL çözümü arıyorsanız bkz. Stackoverflow.com/questions/5262951/…
brita_

6

Bitmap yazı tiplerini kullanmak istiyorsanız, Angelcode Bitmap Yazı Tipi Oluşturucu ile çok yanlış gidemezsiniz: http://www.angelcode.com/products/bmfont/

Bir truetype yazı tipini bir veya daha fazla dokuya (güzel paketlenmiş gliflerle) dönüştürür ve UV'leri ve boşlukları içeren küçük bir dosya çıkarır (XML çıktısının çalışmak için özellikle kolay olduğunu ve boşluk verilerinin kalitesinin genellikle gerçek karakter aralığı olmadan bile çok iyi)



0

QML'yi düşünün . Kullanımı kolay bir sözdizimi ile tamamen işlevsel bir UI kütüphanesi. Özellik seti CEGUI'den çok daha iyi. Deneyimlerime göre daha iyi dokümantasyon, destek ve topluluk var, çünkü birincil hedefi masaüstü uygulamaları ve ekrandan çıkma yeteneği bir çeşit bonus.

Artıları:

  • Tüm oluşturma işlemleri için arka uçta OpenGL kullanır
  • Ana bilgisayar sistemi tarafından kullanılabilen herhangi bir yazı tipini yükleyebilir ve ayrıca kaynak olarak eklediğiniz ek yazı tiplerini ayrıştırabilir
  • Verimli ve kaliteli çıktı için imzalı mesafe alanı metin oluşturmayı kullanır
  • Bu edebilir doğrudan işlemek kolayca oyun ortamında sonuçları ekleyebilirsiniz böylece, bir OpenGL doku
  • Qt çok fazla dil bağına sahip

Eksileri:

  • Qt büyük bir çerçeve
  • Direct3D veya Vulkan projelerinde QML kullanmak, GL dokusunu uygun API'ye almak için çemberlerden atlamayı gerektirir (veya birisinin QML için yerel D3D / Vulkan oluşturucuları yazmasını bekler)
  • QML'de, bir liste öğesi için bir açılır liste açmaya çalıştığınızda olduğu gibi, bir ekran dışı yüzeye oluştururken bile yerel bir kontrol kullanmaya çalışacağı bazı küçük tuhaflıklar var.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.