- 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
| Aspekt | NanoVG (wektorowe) | Tekstury bitmapowe |
|---|---|---|
| Krawędzie | Wygładzane antyaliasingiem przy dowolnym rozmiarze | Rozmyte lub zaszumione podczas skalowania |
| Kształty | Budowane ze ścieżek w czasie działania | Gotowe zasoby graficzne |
| Pamięć | Lekkie, bez dużych tekstur | Rosną wraz z liczbą obrazów |
| Najlepsze do | Interfejsów użytkownika, kształtów, dynamicznego tekstu | Zdjęć, 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
Nie. NanoVG to ogólna biblioteka grafiki C dla OpenGL. Nie jest specyficzna dla Minecrafta. Klient osadza ją za pomocą LWJGL, aby rysować własny interfejs.
Programy Java używają go za pośrednictwem natywnych wiązań, takich jak te, które udostępnia LWJGL, zamiast ręcznie wywoływać kod C.
Nie. Rysuje nakładki 2D: interfejsy HUD, menu, kształty i tekst. Sam świat gry jest renderowany przez silnik Minecrafta.
Obrazy zacierają się lub pikselują podczas skalowania, a każdy z nich zajmuje pamięć. NanoVG buduje kształty z matematyki, dzięki czemu pozostają ostre przy dowolnej skali interfejsu i zajmują niewiele miejsca.