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を使ってプログラミングしました。
アフィン変換¶
アフィン変換を理解するステップを、地図表示を題材に整理しました。