2014/05/30(金) [n年前の日記]
#1 [dxruby][cg_tools] アンチエイリアスつきで直線描画する方法で悩んでたり
_GeoGebra
や Inkscape で作図しながら、どうすればアンチエイリアスつきで描画できそうか考え込んでたり。以下のような図を描いて眺めて、唸ってます。
1ドット内に含まれる形状の面積を求めて濃度にしていけばなんとかなりそうだけど、色んな形がありそうで、すっきり書けそうな気がしなくて。
図を描いてるうちに、先日試した Xiaolin Wu's line algorithm は、正確なアンチエイリアスではないように思えてきたり。例えば1ドット幅の直線なら、上下方向に3ドットまたがる時があるだろうから、Xiaolin Wu's line algorithm の上下2ドット単位の描画は合ってないよなと。もっとも、件のアルゴリズムは、高速にパッと見それらしく描画できるところがミソなのだろうと想像しているけど。
そのあたりを考えてるうちに、「そういや cairo ライブラリってあったな…。アレが使えたら悩まなくていいんじゃないか」と思いついたのだけど。導入作業だけでハマってしまったのでした。
1ドット内に含まれる形状の面積を求めて濃度にしていけばなんとかなりそうだけど、色んな形がありそうで、すっきり書けそうな気がしなくて。
図を描いてるうちに、先日試した Xiaolin Wu's line algorithm は、正確なアンチエイリアスではないように思えてきたり。例えば1ドット幅の直線なら、上下方向に3ドットまたがる時があるだろうから、Xiaolin Wu's line algorithm の上下2ドット単位の描画は合ってないよなと。もっとも、件のアルゴリズムは、高速にパッと見それらしく描画できるところがミソなのだろうと想像しているけど。
そのあたりを考えてるうちに、「そういや cairo ライブラリってあったな…。アレが使えたら悩まなくていいんじゃないか」と思いついたのだけど。導入作業だけでハマってしまったのでした。
[ ツッコむ ]
#2 [ruby] cairo + Ruby Windows版が使えない
Windows7 x64 + Ruby 1.9.3 p545 (i386-mingw32) + cairo 1.12.9 x86-mingw32 で cairo を試してみようとしたら、cairo.so がロードできないとエラーが。
ややこしいことに、Ruby 2.0.0 p451 (i386-mingw32) + cairo 1.12.9 x86-mingw32 なら使えるようで。
_[ruby-list:49399] Re: cairo 1.12.5 x86-mingw32 で cairo.so が見つからない が関係ありそうな気がする。
Rubyインストールフォルダ\lib\ruby\gems\2.0.0\gems\cairo-1.12.9-x86-mingw32\lib\ のファイル構成は以下のようになっていて。
cairo.rb の中で以下の処理を通るのだけど。 Ruby 2.0.0 の場合は、2.0/cairo.so が require されるのでエラーが出ない。
しかし Ruby 1.9.3 の場合は、1.9/cairo.so なんて存在しないので、require 'cairo.so' を通ってしまって、「そんなもんねえよ!」と言われるらしい。
1.9/cairo.so が入ってるバージョンが、かつては存在していたはず…と予想して、試しに古いバージョンを入れていったら、昔はたしかに 1.9/cairo.so が存在していたらしい。
過去バージョンの一覧は、 _all versions of cairo | RubyGems.org | your community gem host で見れる。色々インストールして確認してみたけど、lib/以下のフォルダの有無は以下の通り。
つまり、Ruby 1.9.x で cairo を使いたかったら、1.12.4 より前のバージョンを指定してインストールしないといかんらしいです。
_Comparing v1.12.5...master - rcairo/rcairo - GitHub を眺めていたら、Drop Ruby 1.8 support なるテキストがあった。Dec 17, 2013 の時点で Ruby 1.8非対応になった、ということだろうか…。それ以前から Ruby 1.8 用の cairo.so は同梱されてないみたいではあるけど。
> ruby --version ruby 1.9.3p545 (2014-02-24) [i386-mingw32] > gem install cairo --platform x86-mingw32 > gem list | grep cairo cairo (1.12.9 x86-mingw32) > ruby -r cairo -e "p Cairo::VERSION" C:/Ruby/Ruby193mingw/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require': cannot load such file -- cairo.so (LoadError) from C:/Ruby/Ruby193mingw/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require' from C:/Ruby/Ruby193mingw/lib/ruby/gems/1.9.1/gems/cairo-1.12.9-x86-mingw32/lib/cairo.rb:46:in `rescue in <top (required)>' from C:/Ruby/Ruby193mingw/lib/ruby/gems/1.9.1/gems/cairo-1.12.9-x86-mingw32/lib/cairo.rb:42:in `<top (required)>' from C:/Ruby/Ruby193mingw/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:60:in `require' from C:/Ruby/Ruby193mingw/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:60:in `rescue in require' from C:/Ruby/Ruby193mingw/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:35:in `require'
ややこしいことに、Ruby 2.0.0 p451 (i386-mingw32) + cairo 1.12.9 x86-mingw32 なら使えるようで。
> pik 200 Select which Ruby you want: 1. 200: ruby 2.0.0p451 (2014-02-24) [i386-mingw32] 2. 200: ruby 2.0.0p353 (2013-11-22) [i386-mswin32_100] ? 1 > ruby --version ruby 2.0.0p451 (2014-02-24) [i386-mingw32] > ruby -r cairo -e "p Cairo::VERSION" [1, 12, 16]
_[ruby-list:49399] Re: cairo 1.12.5 x86-mingw32 で cairo.so が見つからない が関係ありそうな気がする。
Rubyインストールフォルダ\lib\ruby\gems\2.0.0\gems\cairo-1.12.9-x86-mingw32\lib\ のファイル構成は以下のようになっていて。
C:\RUBY\RUBY200MINGW\LIB\RUBY\GEMS\2.0.0\GEMS\CAIRO-1.12.9-X86-MINGW32\LIB │ cairo.rb │ ├─2.0 │ cairo.so │ ├─2.1 │ cairo.so │ └─cairo │ color.rb │ colors.rb │ constants.rb │ context.rb │ device.rb │ paper.rb │ papers.rb │ path.rb │ pattern.rb │ point.rb │ surface.rb │ └─context blur.rb circle.rb color.rb path.rb rectangle.rb triangle.rb
cairo.rb の中で以下の処理を通るのだけど。 Ruby 2.0.0 の場合は、2.0/cairo.so が require されるのでエラーが出ない。
begin major, minor, _ = RUBY_VERSION.split(/\./) require "#{major}.#{minor}/cairo.so" rescue LoadError require 'cairo.so' end
しかし Ruby 1.9.3 の場合は、1.9/cairo.so なんて存在しないので、require 'cairo.so' を通ってしまって、「そんなもんねえよ!」と言われるらしい。
1.9/cairo.so が入ってるバージョンが、かつては存在していたはず…と予想して、試しに古いバージョンを入れていったら、昔はたしかに 1.9/cairo.so が存在していたらしい。
過去バージョンの一覧は、 _all versions of cairo | RubyGems.org | your community gem host で見れる。色々インストールして確認してみたけど、lib/以下のフォルダの有無は以下の通り。
cairo 1.10.2 : 1.8 / 1.9 cairo 1.12.3 : 1.8 / 1.9 cairo 1.12.4 : 1.9 / 2.0 cairo 1.12.5 : 1.9 / 2.0 ※ Ruby 1.9 で動かない。 cairo 1.12.6 : 1.9 / 2.0 ※ Ruby 1.9 で動かない。 cairo 1.12.7 : 1.9 / 2.0 / 2.1 ※ Ruby 1.9 で動かない。 cairo 1.12.8 : 1.9 / 2.0 / 2.1 ※ Ruby 1.9 で動かない。 cairo 1.12.9 : / 2.0 / 2.1 ※ Ruby 1.9 で動かない。
つまり、Ruby 1.9.x で cairo を使いたかったら、1.12.4 より前のバージョンを指定してインストールしないといかんらしいです。
gem uninstall cairo gem install cairo --platform x86-mingw32 -v=1.12.4
_Comparing v1.12.5...master - rcairo/rcairo - GitHub を眺めていたら、Drop Ruby 1.8 support なるテキストがあった。Dec 17, 2013 の時点で Ruby 1.8非対応になった、ということだろうか…。それ以前から Ruby 1.8 用の cairo.so は同梱されてないみたいではあるけど。
[ ツッコむ ]
#3 [ruby] うっかりRuby 1.9.3 をアンインストールしてしまった
cairo のテスト中、もしかして pik の登録状況がおかしいのかなと思えてきて。Ruby の特定バージョンをリストから削除する方法をググったのだけど、見つからず。
巷の解説ページに pik uninstall なる指定があったので試してみたら、Ruby 1.9.3 のインストールフォルダが全部削除された。やっちまった。そうじゃないんだ。違うんだ。選択リストから登録解除したかっただけで、アンインストールしたかったわけじゃない…。
てなわけで、Ruby 1.9.3 を再インストールする羽目に。
一応、pik のサブコマンド?についてメモ。
巷の解説ページに pik uninstall なる指定があったので試してみたら、Ruby 1.9.3 のインストールフォルダが全部削除された。やっちまった。そうじゃないんだ。違うんだ。選択リストから登録解除したかっただけで、アンインストールしたかったわけじゃない…。
てなわけで、Ruby 1.9.3 を再インストールする羽目に。
一応、pik のサブコマンド?についてメモ。
## 登録内容確認 pik list ## インストールしたRubyを登録 pik add C:\Ruby\Ruby193mingw\bin ## Rubyのバージョンを切替 pik 193 ## Ruby の特定バージョンをリストから登録解除 pik remove 200pik uninstall じゃなくて、pik remove を使うべきだった。失敗した。
◎ Ruby/SDL、opengl、ruby-opengl をインストール :
rubysdl-2.1.1.1-mswin32-1.9.1-p243.zip をDLして解凍後、中に入って、以下を実行。
Ruby/SDL についてくる opengl.so が入ってると、他のライブラリを使った時に問題が出るので、以下のファイルをリネーム。
opengl関係をインストール。
ruby install_rubysdl.rb
Ruby/SDL についてくる opengl.so が入ってると、他のライブラリを使った時に問題が出るので、以下のファイルをリネーム。
C:/Ruby/Ruby193mingw/lib/ruby/site_ruby/1.9.1/i386-msvcrt/opengl.soopengl.so.bak とか opengl.so.prg とかそんな感じで。
opengl関係をインストール。
gem install opengl -v=0.8.0 gem install ruby-opengl -v=0.61.0
> gem list | grep "opengl\|ruby-opengl" opengl (0.8.0 x86-mingw32) ruby-opengl (0.61.0)opengl は 0.9.0 が公開されてるようだけど、バージョンを 0.8.0 に決め打ちしてインストールしないと動かなかった。
[ ツッコむ ]
#4 [ruby] Nokogiriがインストールできない
Windows7 x64 + Ruby 1.9.3 p545 (i386-mingw32) 上で Nokogiri をインストールしようとしたらエラーが出るようで。
色々試してみたけれど、どうやら事前に mini_portile 0.6.0 をインストールしておかないとエラーがでる模様。
C:\home\Downloads\DLprog\ruby\gem>gem install nokogiri --platform x86-mingw32 Temporarily enhancing PATH to include DevKit... Building native extensions. This could take a while... ERROR: Error installing nokogiri: ERROR: Failed to build gem native extension. C:/Ruby/Ruby193mingw/bin/ruby.exe extconf.rb checking for libxml/parser.h... no ----- libxml2 is missing. please visit http://nokogiri.org/tutorials/installing_nokogiri.html for help with installing dependencies. ----- *** extconf.rb failed *** Could not create Makefile due to some reason, probably lack of necessary libraries and/or headers. Check the mkmf.log file for more details. You may need configuration options.
色々試してみたけれど、どうやら事前に mini_portile 0.6.0 をインストールしておかないとエラーがでる模様。
gem install mini_portile gem install nokogiri
> gem list | grep "mini_portile\|nokogiri" mini_portile (0.6.0, 0.5.3) nokogiri (1.6.2.1 x86-mingw32) > ruby -r nokogiri -e "p Nokogiri::VERSION" "1.6.2.1"
[ ツッコむ ]
#5 [anime] ライダー鎧武をそこそこ視聴
4人ライダーが出てくるあたりまで消化。まだ10数本溜まってる…。
エアーバイクが飛び交うシーンを見て感心。仮面ライダーと言えばバイク、ではあるけれど。平成ライダーは、馬や電車等、色んなモノにライドするヒーローになったわけで、もはやバイクにこだわらなくてもOKと言えばOKなのだけど。しかし、バイクに乗るという制約内でも更なる工夫のしようがあるはずだ、例えばこんなバイクとかどうよ? てな考え方ができそうな設定・シーンだなと思えたわけで。まあ、今までのライダーでもこういう設定の乗り物は存在していて、それを発展させたのではないかと想像しているのですが。何にせよ、こういうバイク設定もカッコいいなと…。
そういえば、フツーのバイクも高速走行するとワープする、てな設定だったっけ。実はこの作品、バイクというアイテムの使い方に再度こだわってみた仮面ライダー、だったりするのだろうか。見た目は、フルーツ+武者でアレだけど、バイクの活用という面では正統派ライダー、かもしれず。
病院から退院した仲間の背中を冗談めかしてポンと叩いて「痛ッ」てなアクションを取るシーンで、そのキャラの痛がるポーズだけを一瞬拡大表示して強調、かつ2回繰り返す見せ方に感心。漫画的というかアニメ的ではあるんだけど、実写でもこんな見せ方ができるんだなと。自分、そういうなんてことのないシーンでそんな表現もできるとは全然思いつかなかったわけで。何かの作品にインスパイアされた見せ方かもしれないけど、やっぱり東映ヒーロー番組のスタッフさんはアイデアマンが多くてスゲエなと…。
エアーバイクが飛び交うシーンを見て感心。仮面ライダーと言えばバイク、ではあるけれど。平成ライダーは、馬や電車等、色んなモノにライドするヒーローになったわけで、もはやバイクにこだわらなくてもOKと言えばOKなのだけど。しかし、バイクに乗るという制約内でも更なる工夫のしようがあるはずだ、例えばこんなバイクとかどうよ? てな考え方ができそうな設定・シーンだなと思えたわけで。まあ、今までのライダーでもこういう設定の乗り物は存在していて、それを発展させたのではないかと想像しているのですが。何にせよ、こういうバイク設定もカッコいいなと…。
そういえば、フツーのバイクも高速走行するとワープする、てな設定だったっけ。実はこの作品、バイクというアイテムの使い方に再度こだわってみた仮面ライダー、だったりするのだろうか。見た目は、フルーツ+武者でアレだけど、バイクの活用という面では正統派ライダー、かもしれず。
病院から退院した仲間の背中を冗談めかしてポンと叩いて「痛ッ」てなアクションを取るシーンで、そのキャラの痛がるポーズだけを一瞬拡大表示して強調、かつ2回繰り返す見せ方に感心。漫画的というかアニメ的ではあるんだけど、実写でもこんな見せ方ができるんだなと。自分、そういうなんてことのないシーンでそんな表現もできるとは全然思いつかなかったわけで。何かの作品にインスパイアされた見せ方かもしれないけど、やっぱり東映ヒーロー番組のスタッフさんはアイデアマンが多くてスゲエなと…。
[ ツッコむ ]
以上、1 日分です。