Что такое NanoVG? Векторная графика для OpenGL

NanoVG — это небольшая библиотека 2D-векторной графики с антиалиасингом для OpenGL. Клиенты Minecraft используют её через LWJGL для отрисовки чётких HUD, меню и фигур.

Librariesby trqUpdated June 4, 2026
Key takeaways
  • NanoVG — небольшая библиотека 2D-векторной графики с антиалиасингом для OpenGL, написанная на C.
  • Она отрисовывает фигуры, текст и градиенты из путей, обеспечивая плавные края любого размера.
  • Minecraft-клиенты обращаются к ней через привязки LWJGL для отрисовки HUD и меню.
  • Векторная графика выигрывает в случае масштабируемого пользовательского интерфейса, а бинарные изображения — для фиксированной графики.

NanoVG — это небольшая библиотека векторгафики с антиалиасингом для OpenGL, написанная на C. Она рисует 2D-фигуры, текст и градиенты с гладкими краями с помощью одного компактного API. В клиенте Minecraft она доступна через привязки LWJGL, чтобы Java-код мог отрисовывать четкие HUD-элементы и меню поверх игры.

Где используется Opal

Opal — это мод для Fabric, который накладывает собственный интерфейс поверх игры. Если вы хотите добавить собственные функции, руководство по скриптам показывает, как это сделать на JavaScript.

Что делает NanoVG

NanoVG отрисовывает 2D векторную графику на GPU через OpenGL. Вы описываете фигуры с помощью путей (линии, кривые, прямоугольники, круги), а затем заполняете или обводите их. Библиотека обрабатывает сглаживание, поэтому края остаются гладкими в любом размере, а не становятся блочными, как растянутый растровый образ.

Она намеренно небольшая. Вся библиотека — это один C-файл с узким API, что и является одной из причин, по которой она встречается в графических демонстрациях и легковесных слоях пользовательского интерфейса, а не в коде тяжелых движков.

Почему клиент Minecraft использует её

Клиент отрисовывает собственный интерфейс поверх Minecraft: массивы списков, меню, индикаторы формы, пользовательские элементы HUD. NanoVG предоставляет этому интерфейсу чистый способ рисовать векторные фигуры и текст, которые масштабируются до любого разрешения без зазубрин.

Благодаря тому, что отрисовка основана на путях, разработчик может создавать скругленные панели, градиенты и обводки из примитивов вместо предварительно запеченных изображений. Это сохраняет согласованность внешнего вида при разных масштабах GUI и размерах дисплея.

NanoVG и LWJGL

Minecraft и его моды работают на JVM, но NanoVG — это C-библиотека. LWJGL устраняет этот разрыв. Он поставляется с Java-биндингами к нативным библиотекам, таким как NanoVG и OpenGL, чтобы Java-код мог напрямую вызывать нативные функции.

Клиент компонует ссылку на модуль LWJGL NanoVG, открывает контекст рисования и выполняет вызовы функций для отрисовки путей и заливки внутри игрового цикла рендеринга. Нативная сторона выполняет фактическую растеризацию на GPU.

NanoVG против рисования на основе растровых изображений

АспектNanoVG (вектор)Растровые текстуры
КраяСглажены на любом размереРазмытие или алиасинг при масштабировании
ФигурыСоздаются из путей во время выполненияГотовые изображения
ПамятьНебольшой объем, без больших текстурУвеличивается с количеством изображений
Лучше всего подходит дляИнтерфейса, фигур, динамического текстаФотографий, фиксированной графики, иконок

Векторная графика выигрывает для элементов интерфейса, которые меняют размер или цвет. Растровые изображения по-прежнему выигрывают для детализированной, фиксированной графики.

FAQ