プロジェクト

全般

プロフィール

JavaFXとベクターグラフィックス

はじめに

ベクター形式の図形(ライン、ポリゴン、円弧、など)をJavaFXで描画するプログラミングのメモです。
SwingではJava2Dグラフィックスに相当します。

JavaFXでベクターを描画する方法

とりあえず次の方法が思い浮かびます。

  • 図形をシーングラフに追加する
  • Canvasを使う

ベクターグラフィックスで気になるのが性能です。
Canvasは遅いという話もちらほら見ますが、そんなに変わらないという話もあり、どちらがいいか判断つきかねています。

JavaFXでのベクター描画の性能に関する情報

  • "Oprimiinf JavaFX Applications - JavaOne 2013 SF CON3141"
    JavaFXの描画スレッド(Pulse、Render)の仕組み、性能計測の仕組みを解説しています。pulseLoggerの内容の説明もあります。フルスピードモードやシングルスレッドモードほか。
  • "JavaFX Graphics Tips & Tricks - JavaOne 2012 SF CON6784"
    GUIMark2 Vectorのベンチマーク結果でJavaFXとJavaFX Canvasを示しています。Windows/Linuxでは5~15%ほどCanvasが遅いですが、Mac OS Xでは僅かにCanvasが速いです。参考までに、GUIMakr2 Bitmapではcanvasが2倍前後速い結果となっていました。 *

性能計測

描画時間をログする

-Djavafx.pulseLogger=true

Canvasとシーングラフの性能比較

微小ラインを大量に描く処理を、canvasを使った場合とシーングラフを使った場合で比較します。

Canvasを使ったベクターグラフィックス

拡大縮小と移動

マウスのホイールで拡大縮小し、マウスのドラッグ操作で移動(パン)するベクターグラフィックス描画をCanvasを使ってプログラミングしました。