Czym jest NanoVG? Grafika wektorowa dla OpenGL

NanoVG to mała biblioteka grafiki wektorowej 2D z wygładzaniem krawędzi dla OpenGL. Klienci Minecrafta używają jej przez LWJGL do rysowania wyraźnych HUD-ów, menu i kształtów.

Librariesby trqUpdated June 4, 2026
Key takeaways
  • NanoVG to mała biblioteka grafiki wektorowej 2D z wygładzaniem krawędzi dla OpenGL, napisana w C.
  • Rysuje kształty, tekst i gradienty z ścieżek, z gładkimi krawędziami w każdym rozmiarze.
  • Klienty Minecrafta uzyskują do niej dostęp poprzez wiązania LWJGL do rysowania HUD-ów i menu.
  • Rysowanie wektorowe wygrywa w przypadku skalowalnych interfejsów użytkownika; bitmapy wciąż wygrywają w przypadku stałych grafik.

NanoVG to mała biblioteka grafiki wektorowej z wygładzaniem krawędzi dla OpenGL, napisana w C. Rysuje dwuwymiarowe kształty, tekst i gradienty z gładkimi krawędziami za pomocą jednego, zwartego API. W kliencie Minecraft dostępna jest ona poprzez biblioteki LWJGL, dzięki czemu kod Java może rysować wyraźne HUD-y i menu na wierzchu gry.

Gdzie pasuje Opal

Opal to mod Fabric, który nakłada własny interfejs na grę. Jeśli chcesz dodać własne funkcje, przewodnik po skryptach pokazuje, jak to zrobić w JavaScript.

Czym zajmuje się NanoVG

NanoVG renderuje grafikę wektorową 2D na GPU za pomocą OpenGL. Opisujesz kształty za pomocą ścieżek (linii, krzywych, prostokątów, okręgów), a następnie wypełniasz je lub obrysujesz. Biblioteka obsługuje wygładzanie krawędzi, dzięki czemu krawędzie pozostają gładkie w dowolnym rozmiarze, zamiast stawać się blokowe, jak w przypadku rozciągniętego bitmapy.

Została celowo zaprojektowana tak, aby była mała. Cała biblioteka to pojedynczy plik C z wyspecjalizowanym API, co jest częścią powodu, dla którego pojawia się w demonstracjach graficznych i lekkich warstwach interfejsu użytkownika, a nie w kodzie ciężkich silników.

Dlaczego klient Minecrafta z niej korzysta

Klient rysuje własny interfejs nad Minecraftem: listy, menu, wskaźniki kształtów, niestandardowe elementy HUD. NanoVG zapewnia temu interfejsowi czysty sposób rysowania wektorowych kształtów i tekstu, które skalują się do dowolnej rozdzielczości bez zacinania się.

Ponieważ renderowanie jest oparte na ścieżkach, programista może budować zaokrąglone panele, gradienty i obramowania z prymitywów zamiast wstępnie pieczonych obrazów. Utrzymuje to spójny wygląd w różnych skalach GUI i rozmiarach wyświetlacza.

NanoVG i LWJGL

Minecraft i jego mody działają na JVM, ale NanoVG to biblioteka C. LWJGL wypełnia lukę. Dostarcza powiązania Java do bibliotek natywnych, takich jak NanoVG i OpenGL, dzięki czemu kod Java może bezpośrednio wywoływać funkcje natywne.

Klient łączy się z modułem LWJGL NanoVG, otwiera kontekst rysowania i wywołuje polecenia ścieżek i malowania w pętli renderowania gry. Strona natywna odpowiada za rzeczywiste rasteryzowanie na GPU.

NanoVG w porównaniu z rysowaniem bitmapami

AspektNanoVG (wektorowe)Tekstury bitmapowe
KrawędzieWygładzane antyaliasingiem przy dowolnym rozmiarzeRozmyte lub zaszumione podczas skalowania
KształtyBudowane ze ścieżek w czasie działaniaGotowe zasoby graficzne
PamięćLekkie, bez dużych teksturRosną wraz z liczbą obrazów
Najlepsze doInterfejsów użytkownika, kształtów, dynamicznego tekstuZdjęć, stałej grafiki, ikon

Rysowanie wektorowe wygrywa w przypadku elementów interfejsu, które zmieniają rozmiar lub kolor. Bitmapy wciąż wygrywają w przypadku szczegółowej, stałej grafiki.

FAQ