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.

TRtrolPublished 3 min read

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önNanoVG (vektör)Bitmap dokuları
KenarlarHerhangi 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ı
BellekHafif, büyük dokular yokGörüntü sayısıyla büyür
En uygun olduğu alanlarArayüz, şekiller, dinamik metinFotoğ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