mieki256's diary



2014/05/30(金) [n年前の日記]

#1 [dxruby][cg_tools] アンチエイリアスつきで直線描画する方法で悩んでたり

_GeoGebra や Inkscape で作図しながら、どうすればアンチエイリアスつきで描画できそうか考え込んでたり。以下のような図を描いて眺めて、唸ってます。

aa_calc1.png

aa_calc4.png

aa_calc4_a.png

aa_calc4_b.png

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 --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 list

## インストールしたRubyを登録
pik add C:\Ruby\Ruby193mingw\bin

## Rubyのバージョンを切替
pik 193

## Ruby の特定バージョンをリストから登録解除
pik remove 200
pik uninstall じゃなくて、pik remove を使うべきだった。失敗した。

Ruby/SDL、opengl、ruby-opengl をインストール :

rubysdl-2.1.1.1-mswin32-1.9.1-p243.zip をDLして解凍後、中に入って、以下を実行。
ruby install_rubysdl.rb

Ruby/SDL についてくる opengl.so が入ってると、他のライブラリを使った時に問題が出るので、以下のファイルをリネーム。
C:/Ruby/Ruby193mingw/lib/ruby/site_ruby/1.9.1/i386-msvcrt/opengl.so
opengl.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 をインストールしようとしたらエラーが出るようで。
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回繰り返す見せ方に感心。漫画的というかアニメ的ではあるんだけど、実写でもこんな見せ方ができるんだなと。自分、そういうなんてことのないシーンでそんな表現もできるとは全然思いつかなかったわけで。何かの作品にインスパイアされた見せ方かもしれないけど、やっぱり東映ヒーロー番組のスタッフさんはアイデアマンが多くてスゲエなと…。

以上、1 日分です。

過去ログ表示

Prev - 2014/05 - Next
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project