Learn · concepts
ナノVGとは?OpenGLのためのベクターグラフィックス
NanoVGはOpenGL用の、アンチエイリアシング処理された小さな2Dベクトルグラフィックスライブラリです。MinecraftクライアントはLWJGLを通じてそれを使用し、シャープなHUDやインターフェースを描画します.
ナノVGとは何ですか??
NanoVGは、OpenGL向けの、アンチエイリアシング処理されたベクターグラフィックスライブラリで、C言語で記述されています。滑らかなエッジで2D形状、テキスト、グラデーションを描画するコンパクトなAPIを提供します。Minecraftクライアントでは、LWJGLバインディングを通じてアクセスでき、Javaコードがゲームの上に鮮明なHUDやメニューを描画できます。意図的に小型に設計されており、ライブラリ全体が単一のCファイルで構成され、絞られたAPIを備えていることが、グラフィックスデモや軽量UIレイヤーに採用される理由の一つです。重いエンジンコードにはあまり使用されません
ナノVGが何をするか
NanoVGはOpenGLを介してGPU上で2Dベクターグラフィックスをレンダリングします。パス(線、曲線、矩形、円)で形状を記述し、それらを塗りつぶしたり、輪郭線を描画したりします。ライブラリはアンチエイリアシングを処理するため、ビットマップ画像が拡大されたときにブロック状になることなく、あらゆるサイズでエッジが滑らかに保たれます。レンダリングがパスベースであるため、開発者はプリベイクされた画像ではなく、プリミティブから丸みを帯びたパネル、グラデーション、アウトラインを構築できます。
主な利点はスケーラビリティです。ビットマップ画像は拡大するとぼやけたり、ピクセル化したりします。ベクター形状は、数学的に定義されているため、プリラスタライズされた固定サイズではなく、あらゆる解像度で鮮明さを保ちます。これにより、GUIスケールや表示サイズ全体で一貫した外観を維持できます
なぜ Minecraft お客様がそれをお使いになります
クライアントはMinecraft上に独自のインターフェースを描画します。配列リスト、メニュー、形状インジケーター、カスタムHUD要素などです。NanoVGは、解像度に依存せず、滑らかなベクター形状とテキストを描画するためのクリーンな方法を提供します。
レンダリングがパスベースであるため、開発者はプリベイクされた画像ではなく、プリミティブから丸みを帯びたパネル、グラデーション、アウトラインを構築できます。これは、同じボタンテクスチャのさまざまなサイズのバージョンを100個ずつ同梱するよりも効率的で柔軟です。
NanoVGとLWJGL
MinecraftとそのMODはJVM上で動作しますが、NanoVGはCライブラリです。LWJGLがそのギャップを埋めます。LWJGLは、NanoVGやOpenGLなどのネイティブライブラリに対するJavaバインディングを提供し、Javaコードがネイティブ関数を直接呼び出せるようにします。クライアントはLWJGL NanoVGモジュールにリンクし、描画コンテキストを開き、ゲームのレンダーループ内でパスとペイントの呼び出しを行います。ネイティブ側がGPU上で実際のラスター化処理を行います。
NanoVGとビットマップ描画
| 側面 | NanoVG (ベクター) | ビットマップテクスチャ |
|---|---|---|
| 縁 | どんなサイズでもアンチエイリアス | スケール時にぼやけたり、エイリアスが発生したりする |
| 形状 | 実行時にパスから構築 | 事前に作成された画像アセット |
| メモリ | 軽量、大きなテクスチャなし | 画像数が増えるにつれて増加 |
| 最適 | UI、形状、動的なテキスト | 写真、固定アート、アイコン |
ベクター形式のドローイングは、サイズや色が変わるインターフェース要素に適しています。ビットマップは、詳細で固定されたアートワークに依然として優れています。ほとんどの実際のインターフェースでは、両方を使用しています.
よくある質問
NanoVGはOpenGLのための汎用Cグラフィックスライブラリです。Minecraftに特化したものではありません。クライアントはLWJGLを通じてそれを埋め込み、独自のインターフェースを描画します.
C. Java プログラムは、LWJGL が提供するようなネイティブバインディングを通じて使用しますが、C コードを直接呼び出すことはありません.
いいえ。2Dオーバーレイを描画します。HUD、メニュー、形状、テキストなどです。ゲームの世界自体は、Minecraft独自のエンジンでレンダリングされます.
拡大縮小すると画像はぼやいたり、エイリアシングが発生したりし、それぞれメモリを消費します。NanoVGは数学に基づいて形状を構築するため、GUIのスケールに関わらず鮮明さを保ち、メモリ使用量は非常に少なくて済みます.