Learn · concepts
NanoVG Nedir? OpenGL için Vektör Grafikleri
NanoVG, OpenGL için küçük, antialiaslı 2D vektör grafikler kütüphanesidir. Minecraft istemcileri, LWJGL aracılığıyla keskin HUD'lar ve arayüzler çizmek için onu kullanır.
NanoVG Nedir?
NanoVG, OpenGL için yazılmış, C ile kodlanmış küçük bir antialiased vektör grafik kütüphanesidir. Tek bir kompakt API aracılığıyla pürüzsüz kenarlara sahip 2D şekiller, metin ve gradyanlar çizer. Bir Minecraft istemcisinde, Java kodunun oyunun üzerine net HUD'lar ve menüler çizebilmesi için LWJGL bağlamaları aracılığıyla erişilebilir. Kütüphane kasıtlı olarak küçüktür—tüm kütüphane odaklanmış bir API'ye sahip tek bir C dosyasıdır—bu da grafik demolarında ve hafif UI katmanlarında ağır motor kodu yerine görünmesinin nedenlerinden biridir.
NanoVG Ne Yapar
NanoVG, OpenGL aracılığıyla GPU'da 2D vektör grafiklerini oluşturur. Şekilleri yollar (çizgiler, eğriler, dikdörtgenler, daireler) ile tanımlar, ardından bunları doldurur veya hatlarıyla belirtirsiniz. Kütüphane antialiasing'i yönetir, böylece kenarlar herhangi bir boyutta pürüzsüz kalır ve gerdirilmiş bir bitmap gibi bloklu görünmez. Oluşturma yola dayalı olduğundan, bir geliştirici önceden pişirilmiş görüntüler yerine ilkel şekillerden yuvarlak paneller, gradyanlar ve taslaklar oluşturabilir.
Temel avantaj ölçeklenebilirliktir. Bitmap görüntüleri büyütüldüğünde bulanık veya pikselli görünür. Vektör şekilleri matematiksel olarak tanımlandıkları için önceden rasterize edilmediği için herhangi bir çözünürlükte net kalır. Bu, GUI ölçekleri ve ekran boyutları arasında tutarlı bir görünüm sağlar.
Neden Minecraft İstemcileri Tarafından Kullanılır
Bir istemci, Minecraft üzerine kendi arayüzünü çiziyor: arraylist'ler, menüler, şekil göstergeleri, özel HUD öğeleri. NanoVG, bu arayüze herhangi bir çözünürlüğe ölçeklenebilen ve pürüzsüz görünmeyen vektör şekilleri ve metinler çizmek için temiz bir yol sunuyor.
Çünkü işleme yol tabanlıdır, bir geliştirici yuvarlatılmış paneller, gradyanlar ve taslakları önceden pişirilmiş görüntüler yerine ilkel şekillerden oluşturabilir. Bu, aynı düğme dokusunun yüzlerce farklı boyutlu sürümünü göndermekten daha verimli ve daha esnektir.
NanoVG ve LWJGL
Minecraft ve modları JVM üzerinde çalışır, ancak NanoVG bir C kütüphanesidir. LWJGL bu boşluğu doldurur. NanoVG ve OpenGL gibi yerel kütüphanelere Java bağlamaları gönderir, böylece Java kodu yerel işlevleri doğrudan çağırabilir. Bir istemci, LWJGL NanoVG modülüne bağlanır, bir çizim bağlamı açar ve oyunun işleme döngüsü içinde yol ve boya çağrıları yapar. Yerel taraf, GPU üzerinde gerçek rasterizlemeyi yapar.
NanoVG ve bitmap çizimi
| Yön | NanoVG (vektör) | Bitmap dokuları |
|---|---|---|
| Kenarlar | Herhangi bir boyutta yumuşak kenarlı | Ölçeklendirildiğinde bulanık veya pikselli |
| Şekiller | Çalışma zamanında yollardan oluşturulur | Önceden hazırlanmış görüntü varlıkları |
| Bellek | Hafif, büyük dokular yok | Görüntü sayısıyla büyür |
| En uygun olduğu alanlar | Arayüz, şekiller, dinamik metin | Fotoğraflar, sabit sanat, simgeler |
Vektör çizimleri, boyut veya renk değiştiren arayüz öğeleri için daha iyi sonuç verir. Bitmap'ler ise detaylı, sabit çizimler için hâlâ daha iyi. Çoğu gerçek arayüz her ikisini de kullanır.
Sıkça Sorulan Sorular
Hayır. NanoVG, OpenGL için genel bir C grafik kütüphanesidir. Minecraft'a özel değildir. Bir istemci, kendi arayüzünü çizmek için LWJGL aracılığıyla onu yerleştirir.
C. Java programları, LWJGL gibi yerel bağlamalar aracılığıyla bunu kullanır, doğrudan C kodunu çağırmak yerine.
Hayır. 2B üst üste bindirmeler çiziyor: HUD'lar, menüler, şekiller ve metinler. Oyun dünyası kendisi Minecraft'ın kendi motoru tarafından oluşturuluyor.
Görüntüler ölçeklendirildiğinde bulanıklaşır veya bozulur ve her biri bellek kullanır. NanoVG, şekilleri matematiksel ifadelerden oluşturur, böylece herhangi bir grafik arayüzü ölçeğinde keskinliğini korur ve çok az bellek maliyetiyle çalışır.