私のゲームは現在、多くの描画とテキスト レンダリングに Graphics2D を使用していますが、LWJGL で利用可能な関数の一部を使用してGL11.glBegin(...)
、カスタム シェイプを作成したり、クールなテクスチャ関数を使用したりしたいと考えています。
これを行うことは可能ですか?もしそうなら、LWJGLからどのコードを追加して、その機能をすでに持っているものと一緒に機能させる必要がありますか?
私のゲームは現在、多くの描画とテキスト レンダリングに Graphics2D を使用していますが、LWJGL で利用可能な関数の一部を使用してGL11.glBegin(...)
、カスタム シェイプを作成したり、クールなテクスチャ関数を使用したりしたいと考えています。
これを行うことは可能ですか?もしそうなら、LWJGLからどのコードを追加して、その機能をすでに持っているものと一緒に機能させる必要がありますか?
それは可能ですが、それは簡単な方法ではありません。Graphics2D は Java 描画 API の一部ですが、LWJGL は OpenGL API の Java ラッパーにすぎません。結局のところ、OpenGL は入力が頂点であることを期待しているということです。 GPUで三角形に組み立てられるインデックス。過去にベクターグラフィックスをポリゴンに変換するツールをいくつか書いたので、基本的にできることは次のとおりです。
1) Graphics2D シェイプ パスをデータ構造に記録します。次に、それらを連続している必要があるポリゴン アウトライン ポイント セット (配列) に変換します。たとえば、2D シェイプが 2 つの直線エッジと 2 つのベジエ ラインで構成されている場合、記録できます。直線の始点/終点をそのまま使用し、このメソッドを使用してベジエを線分 (直線) に分解します。なぜすべてを線分にする必要があるのですか?後で、これらの多角形を三角測量するからです。
2) 次の部分は、前の段階で作成したポリゴン セットを三角形分割することです。ここでは、多くの三角形分割ライブラリの 1 つを使用でき ます。穴。もう 1 つのオプションは、古い (固定された) OpenGL パイプラインを使用している場合に Glu Tessellator を使用することです。そのような場合、glu は LWJGL API の一部であるため、外部ライブラリを探す必要さえありません。
基本的にはそれが必要です.しかし、それは実際には非常に原始的な設定です.たとえば、GPUで2Dグラフィックスをレンダリングする際の広範囲にわたる問題の1つは、共平面サーフェスです.したがって、深度バッファがオンで、いくつかの共平面がある場合「Z-fighting」アーティファクトを取得する予定の平面。これを解決するには、深度書き込みを無効にするか (これは 3D エンジンでやりたいことではありません)、ステンシル テストを使用する必要があります (深度/色に関するハックが他にもあります)。しかし、別のより「幾何学的なアプローチ」のオプションは、それらを三角測量する前に、オーバーラップしたポリゴン間でポリゴンのクリッピング操作を行うことです。ここでは、 Polygon Clipperのようなライブラリを使用できます。
ご覧のとおり、やりたいことは数分ではなく、パフォーマンス、ジオメトリ、UV マッピングの問題など、さらに多くの課題がありますが、絶対に実行可能です。