0

Javaがポリゴンをどのように塗りつぶすのか、しばらくの間疑問に思っていました.スキャンラインアルゴリズムなどで自分で試してみました. それは非常に明確に思えるので、スキャンラインも使用しますか、それともまったく異なる種類のアルゴリズムですか? (ソースで検索してみましたが、迷路です。)

よろしく

4

1 に答える 1

1

Open JDK ソースはオンラインで入手できます。したがって、コードを自分で見ることができますが、そのコードを見て、自分のコードの「インスピレーション」と見なされるものを使用することで、OpenJDK ライセンス条件の対象となる可能性が高いことに注意してください。コードに互換性のあるライセンスを使用する意思がない限り、あまり詳しく調べないでください。

  1. で開始します。これは、使用する可能性が高いコードをshare/classes/java/awt/Graphics.java含むインターフェイスです。fillPolygonこれは抽象メソッドであるため、そのインターフェイスを実装するクラスを確認する必要があります。
  2. share/classes/sun/java2d/SunGraphics2D.javaはそのようなものです。オブジェクトfillPolygonの一致する呼び出しに呼び出しを委譲するだけです。sun.java2d.pipe.PixelFillPipeしかし、これは単なるインターフェースであるため、実装を探す必要があります。
  3. share/classes/sun/java2d/pipe/BufferedRenderPipe.java可能な実装の 1 つです。そのfill実装はfillSpansメソッドを使用し、そのコアはネイティブ コードで実装されます。
  4. share/native/sun/java2d/pipe/BufferedRenderPipe.c対応する実装があります。したがって、コードを見て、スパンとは何か、ポリゴンがどのようにスパンに変換されるかを理解したら、スパンがどのようにレンダリングされるかがわかります。

上記はすべて、考えられるコード パスの1 つにすぎません。それは、使用しているプラ​​ットフォームと、何に描画しているかによって大きく異なります。印刷にはさまざまなプリミティブがあり、ほとんどのプラットフォームにはさまざまなプリミティブがあります。たとえば、(高速化されていない) X11 接続でsolaris/native/sun/java2d/x11/X11Renderer.cは、単純に に委任しXFillPolygonます。OpenGL ベースのグラフィックス用のカスタム コードもありますが、今のところ塗りつぶしの最適化は見られません。でも、じっくり見てみるのもいいかもしれません。

于 2013-05-27T07:12:34.373 に答える