Oluşturma Çözünürlüğü Bağımsız Metin


11

Oyunumda çözünürlükten bağımsız metin çizmenin bir yoluna ihtiyacım var. Yani, metni yakınlaştırabilmem ve hiç piksel yapaylığı görmem gerekiyor.

Herkes bu konuda nasıl gidebilirim hakkında herhangi bir öneri yapabilir?


Başlangıç ​​noktası olabilecek rasterleştirilmiş fontlardan ziyade vektör tabanlı fontların yöntemlerine bakmanız gerektiğini varsayarım. Bu konuda uzman değilim, bu yüzden bilen birinin cevap vermesine izin vereceğim.
Ray Dey

Yanıtlar:


7

Bunu yapmanın üç yaygın yolu var. Bu, yapay nesneleri tamamen ortadan kaldırmakla ilgili değildir - sınırsız bellek veya işlemci süreniz olmadığı sürece imkansızdır - daha ziyade mevcut kodunuza ve hedef platformlarınıza uyacak şekilde nasıl en aza indirileceği.

İlk olarak, yazı tipini yakınlaştırdığınızda istediğiniz boyutta rasterleştirmek için yazı tipi rasterleştiricinizi (genellikle FreeType) kullanın. Bu ekran görüntülerinde harika görünecek, ancak inanılmaz derecede yavaş. Yavaşlığı boyutları önbelleğe alarak çözebilirsiniz, ancak daha sonra belleğe inanılmaz derecede aç hale gelir. Hareket halinde de harika görünmüyor, çünkü gliflerin statik ekran için iyi görünmesini sağlamak onları eşit olmayan bir şekilde ölçeklendirmeyi gerektiriyor. Yine de, yeterli belleğe (PC gibi) sahip bir platformdaysanız ve ölçekleriniz 10px ila 30px gibi küçük bir aralığa bağlıysanız bir seçenektir. Bu yöntem aynı zamanda tek başına çok fazla şekerleme kabul etmez.

İkinci olarak, metninizi bir kafes olarak saklayabilirsiniz. Bunu yapmak için GLTT gibi bazı kütüphaneler var , ya da kendinizinkini yazabilirsiniz. Artık piksel eserleriniz yok, ancak 3D oyunda diğer kafeslerde olduğu gibi çok yakınlaştırırsanız çokgen eserleriniz olacak. Mesh metni, çok sayıda göz şekerini itiraf eder, çünkü köşe gölgelendiricileri uygulanabilir ve kafes, yaptığınız diğer dünya çizimleriyle serpiştirilebilir. Bellek ve CPU üzerinde makul derecede hafiftir ve sadece standart bir ağ olduğundan maliyetini ölçmek kolaydır. Normal bir hareketli grafik tabanlı 2B oluşturma hattına entegre etmek bir acı olabilir.

Üçüncü olarak, mesafe alanlarını piksel gölgelendiriciyle birlikte kullanabilirsiniz . Bu, şu anda popüler olan, önceden hazırlanmış bir dokuyu örneklemek için basit gölgelendirici ve glifleri temiz bir şekilde ölçeklendirmek için video kartınızdaki "ücretsiz" bilinear filtreleme kullanan nispeten yeni bir tekniktir. Diğer yöntemlere kıyasla çok az ve kolayca tahmin edilebilir bellek kullanır - yazı tipi başına karakter seti başına 0,5MB ila 1MB doku. Sprite tabanlı olduğu için sprite tabanlı oluşturma boru hatlarına iyi uyum sağlar; her glif hala dokulu bir dörtlüdür. Piksel artefaktları üretir, ancak dokuları ölçekleyen diğer yöntemlere kıyasla çok azdır. Piksel gölgelendiricileri yoksa sabit işlevli bir geri dönüş de vardır, ancak metin çok yumuşatılır. Örnekleme bir piksel gölgelendiricisinde yapıldığından, anahatlama ve gölgeleme gibi bazı göz şekerlerini ucuza kabul eder.


3

Ayrıca, Loop ve Blinn tarafından Microsoft Research tarafından gölgelendiricileri kullanarak çözünürlükten bağımsız eğriler oluşturma üzerine bir araştırma makalesi de bulunmaktadır . TrueType metnini çözünürlükten bağımsız bir şekilde oluşturmak için sunulan tekniği kullanmanızı önerir.


1

Yazı tipi karakterlerinizi, daha sonra çalışma zamanında uygun bir ayrıntı düzeyiyle geometriye dönüştürdüğünüz eğrilerin ve çizgilerin bir birleşiminden oluşturmanız gerekir.

Neyse ki çoğu yazı tipi zaten çerçeve eğrilerinden yapılmıştır. Eğri verilerini almak için standart Windows GetGlyphOutline () işlevini kullanmanız yeterlidir .

PInvoke olmadan C # 'dan bu eğri verilerini alıp alamayacağınızdan emin değilim.


1
Bu çapraz platformu oluşturmak ve PInvoke şeyler hakkında endişelenmemek için, bana göre GetGlyphOutline'ın okuduğu verileri ( bu SO sorusuna bakın ) bazı özel biçime dökmek için bir araç yazabileceksiniz ve daha sonra Özel depolanmış glif verilerinizi yüklemek için oyun kodundaki bazı basit dosya G / Ç.
Ricket

0

Freetype'a bir göz atmak isteyebilirsiniz. Platformunuzda mevcut olup olmadığı veya lisansın geçerli olup olmadığı hakkında hiçbir fikrim yok, ancak gerçek tür ve diğer vektör yazı tiplerini oluşturmak için oldukça mükemmel bir açık kaynak kitaplığı. Estetik olarak hoş bir şekilde yazı tiplerini oluşturmak için bazı akıllı avukat kaçmak kodu yapmak zorunda olduklarına inanıyorum. Gerçek yazım biçimi, oluşturucuya ipuçları sağlamak için eğrilerdeki bayt kodlarını içerir, böylece önemli yazı tipi özellikleri (dikey ve serifler gibi) standart naif kenar yumuşatma kullandıkları gibi bulanıklaşmaz. Bu tekniğin üzerinde bir patenti var, bu yüzden freetype insanları işi yapan ve Apple'ın korkunç avukat-canavarını çağırmayan başka bir şey bulmak zorunda kaldılar. Her neyse, yasal bir kenara atmak, freetype'a bakmayı deneyinhttp://freetype.sourceforge.net/index2.html

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.