2014/05/27(火) [n年前の日記]
#1 [dxruby][cg_tools] 虎を描画して実験中
_File:Ghostscript Tiger.svg - Wikimedia Commons
を swf に変換して、DXRuby上で描画して確認中。
svg から swf への変換は、 _svg2pdr と、 _ParaDraw を利用。
さすがに虎は重い…。Imageに描画し終わるまで数秒かかる。これでは絶対に、毎フレーム、ベクターデータを再描画なんて無理だなと。一旦 Image に描画したら、その後はずっとその Image を使い続ける、みたいな書き方をしないと。ソレに比べると、Flash Player の処理速度はスゴイ。虎ですら一瞬で表示されるわけで。
svg から swf への変換は、 _svg2pdr と、 _ParaDraw を利用。
- svg2pdr を使って、.svg → .pdr (ParaDraw形式) に変換。
- .pdr を ParaDraw で開いて、修正を加えたり、swf で保存したり。
- あるいは、.pdr を Suzuka にアイテムとして登録して、swf で書き出したり。
さすがに虎は重い…。Imageに描画し終わるまで数秒かかる。これでは絶対に、毎フレーム、ベクターデータを再描画なんて無理だなと。一旦 Image に描画したら、その後はずっとその Image を使い続ける、みたいな書き方をしないと。ソレに比べると、Flash Player の処理速度はスゴイ。虎ですら一瞬で表示されるわけで。
◎ 参考ページをメモ。 :
凹多角形の塗りつぶしは、
_多角形塗りつぶし(1)
を参考に、というかそのまま Ruby で書き直して試していたり。ところどころ描画がおかしくなって悩んだけど、こちらから渡す頂点配列にそもそも問題があったようで、そこのバグを取ったら、まともな結果を出してくれるようになってきた。
直線描画と、多角形塗りつぶしのエッジ部分がずれていたので、計算誤差でもあるのかなと。 _DDAによる線・円の描画3 を参考に、1ドットずつDDAで直線描画するメソッドも書いてみたり。しかし、結果は変わらず。ちなみに、件のページで紹介されてるDDAのソレのサンプルは、水平線か垂直線の場合に変な線になりそうな気がする。たぶん。
線幅を持った直線描画は、 _アンチエイリアス付きの自由線描画(1) を参考にさせてもらいました。しかし、さすがに Ruby では処理が遅く、線を一本描くだけでも十数フレームかかってる感じ。1ドット描くたびに64回ループ回してるから仕方ないのだけど。アンチエイリアス描画の実現方法については、もっと調べてみないといかんなと…。
二次ベジェ曲線は、 _新・C言語 〜ゲームプログラミングの館〜 [DXライブラリ] に書かれてた式を参考にして、最後は全部直線データとして吐き出すようにしてみたり。ただ、適切な分割数をどうやって求めるか…。結局、分割数は固定にしたまま試しているところ。
直線描画と、多角形塗りつぶしのエッジ部分がずれていたので、計算誤差でもあるのかなと。 _DDAによる線・円の描画3 を参考に、1ドットずつDDAで直線描画するメソッドも書いてみたり。しかし、結果は変わらず。ちなみに、件のページで紹介されてるDDAのソレのサンプルは、水平線か垂直線の場合に変な線になりそうな気がする。たぶん。
線幅を持った直線描画は、 _アンチエイリアス付きの自由線描画(1) を参考にさせてもらいました。しかし、さすがに Ruby では処理が遅く、線を一本描くだけでも十数フレームかかってる感じ。1ドット描くたびに64回ループ回してるから仕方ないのだけど。アンチエイリアス描画の実現方法については、もっと調べてみないといかんなと…。
二次ベジェ曲線は、 _新・C言語 〜ゲームプログラミングの館〜 [DXライブラリ] に書かれてた式を参考にして、最後は全部直線データとして吐き出すようにしてみたり。ただ、適切な分割数をどうやって求めるか…。結局、分割数は固定にしたまま試しているところ。
[ ツッコむ ]
以上です。