- NanoVGは、OpenGL向けにC言語で書かれた、小さなアンチエイリアシング2Dベクトルグラフィックスライブラリです。
- パスから形状、テキスト、グラデーションを描画し、あらゆるサイズで滑らかなエッジを実現します。
- Minecraftクライアントは、LWJGLバインディングを通じてこれを利用し、HUDやメニューを描画します。
- ベクター描画はリサイズ可能なUIで優位ですが、固定アートワークにはビットマップが依然として優れています.
NanoVGは、OpenGL向けの、Cで書かれた、小さなアンチエイリアシングベクトルグラフィックスライブラリです。滑らかなエッジで2D形状、テキスト、グラデントを描画し、コンパクトなAPIから利用できます。Minecraftクライアントでは、LWJGLバインディングを通じてアクセスでき、Javaコードがゲームの上に鮮明なHUDやメニューを描画できます.
どこ Opal 合う
NanoVG が何をするか
NanoVG は OpenGL を通じて GPU 上に 2D ベクターグラフィックスをレンダリングします。パス(線、曲線、長方形、円)で形状を記述し、それらを塗りつぶしたり、輪郭線を引いたりします。ライブラリはアンチエイリアシングを処理するため、ビットマップを拡大したときにブロック状になることなく、あらゆるサイズでエッジが滑らかに保たれます。
意図的にサイズを小さくしています。このライブラリ全体は、焦点を絞った API を備えた単一の C ファイルであり、それがグラフィックスデモや軽量 UI レイヤーに登場する理由の一部です。大規模なエンジンコードではなく。
なぜ Minecraft クライアントがそれを使用するのか
クライアントは、Minecraft の上に独自のインターフェイスを描画します。配列リスト、メニュー、形状インジケーター、カスタム HUD 要素などです。NanoVG は、あらゆる解像度でスケールし、ギザギザに見えないベクター形状とテキストをクリーンに描画する方法を提供します。
レンダリングがパスベースであるため、開発者はプリミティブから丸いパネル、グラデーション、アウトラインを構築できます。これにより、GUI スケールとディスプレイ サイズ全体で一貫した外観を維持できます。
NanoVG と LWJGL
Minecraft とその MOD は JVM 上で実行されますが、NanoVG は C ライブラリです。LWJGL がそのギャップを埋めます。LWJGL は、NanoVG や OpenGL などのネイティブライブラリへの Java バインディングを提供し、Java コードがネイティブ関数を直接呼び出せるようにします.
クライアントはLWJGL NanoVGモジュールに対してリンクし、描画コンテキストを開き、ゲームのレンダーループ内でパスとペイントの呼び出しを行います。ネイティブ側がGPU上で実際のラスター化処理を行います。
NanoVGとビットマップ描画
| 側面 | NanoVG(ベクトル) | ビットマップテクスチャ |
|---|---|---|
| 境界 | どんなサイズでもアンチエイリアス | スケール時にぼやけたり、エイリアスが発生 |
| 図形 | 実行時にパスから構築 | 事前に作成された画像アセット |
| メモリ | 軽量、大きなテクスチャなし | 画像数が増えるにつれて増加 |
| 最適 | UI、形状、動的なテキスト | 写真、固定アート、アイコン |
ベクター描画は、サイズや色が変わるインターフェース要素に最適です。詳細で固定されたアートワークには、ビットマップが依然として優れています。
FAQ
いいえ。ナノVGはOpenGL用の一般的なCグラフィックスライブラリです。Minecraftに特化したものではありません。クライアントはLWJGLを通じてそれを埋め込み、独自のインターフェースを描画します。
C. Javaプログラムは、LWJGLが提供するようなネイティブバインディングを通じて使用します。手動でCコードを呼び出す代わりに、それらを使用します。
いいえ、ナノVGは2Dオーバーレイを描画します。HUD、メニュー、形状、テキストなどです。ゲームの世界自体は、Minecraft独自のエンジンによってレンダリングされます。
画像を拡大縮小するとぼやけたり、エイリアスが発生したりします。また、画像はそれぞれメモリを消費します。NanoVGは数学に基づいて形状を構築するため、GUIの拡大縮小に影響されず、メモリ消費も抑えられます。