Mar 8, 2008

GL Excess/Ruby : Scene 11 移植完了


Scene 11 はエンディングです。スタッフロールが流れます。

これで GL Excess 全12シーンの Ruby 移植ができたことになります。なんとかなるもんですね。
今後は
  • 全シーンをまとめたものを再パッケージ化
    • シーン個別での配布は廃止する
  • 特に遅い Scene 2, Scene 8 の一部を拡張ライブラリ化(「チート版」が適切かな?)
を予定しています。
GL Excess / Ruby のページも更新。 Scene 11 をダウンロードできるようにしておきました:
※ Scene 2 と 8 は動作が非常に遅くなってしまっています。 そこで glxsruby にもオリジナルと同様、更新のタイプステップを変更する機能が実装されています。 アプリケーション起動後に以下の操作を行ってください:
  • 'a' を押すと @step += 1 (更新速度アップ)
  • 'z' を押すと @step -= 1 (更新速度ダウン)
画面表示が遅い場合には、'a' をしばらく押しっぱなしにしておくと吉です。

Mar 2, 2008

GL Excess / Ruby : Scene 10 移植完了


Scene 10 です。これといって問題になるような部分はありませんでした。

このシーンで印象的なのはやはりレーザー効果ですが、本質的には GL_TRIANGLE_FAN だけでシンプルに実装されています。このようなことが勉強 できるのも、ソースコードが公開されているおかげですね。
GL Excess / Ruby のページも更新。 Scene 10 をダウンロードできるようにしておきました:
未実装のシーンは 11。とうとう残り 1 個になりました。
※ Scene 2 と 8 は動作が非常に遅くなってしまっています。 そこで glxsruby にもオリジナルと同様、更新のタイプステップを変更する機能が実装されています。 アプリケーション起動後に以下の操作を行ってください:
  • 'a' を押すと @step += 1 (更新速度アップ)
  • 'z' を押すと @step -= 1 (更新速度ダウン)
画面表示が遅い場合には、'a' をしばらく押しっぱなしにしておくと吉です。

Mar 1, 2008

RDフォーマット


Re: RDoc,RDフォーマットの公式文書はどこにあるのでしょうか

「仕様書」と呼ぶべきかどうかはともかくとして、Ruby自身の配布ファイル
の中に"lib/rdocs/README"というのが含まれています。公式のドキュメントの中で
は、これが一番良く書かれたものだと思います。

Module: RDoc

Rdoc is an application that produces documentation for one or more Ruby source files.

GL Excess / Ruby : Scene 8 移植


Scene 8 ですが…遅いっ。

原因は Scene 2 と 同様で、水面の表現に利用している 64x64 個のグリッドの更新が重荷になって います。描画の部分に頂点配列(glVertexPointer/glDrawArrays)を利用するよ うに書き直してみたりもしたのですが、有意な差が見られるほどの改善には至 りませんでした。
移植の最中に思い出しましたが、Ruby では !0 == false なのでした。
$ irb.bat
irb(main):001:0> some_value = 0
=> 0
irb(main):002:0> !some_value
=> false
irb(main):003:0> some_value==0
=> true
irb(main):004:0>
C/C++ によくあるイディオムの移植には注意が必要ですね。
GL Excess / Ruby のページも更新。 Scene 8 をダウンロードできるようにしておきました:
未実装のシーンは 10 と 11。残りは 2 個となりました。
※ Scene 2 と 8 は動作が非常に遅くなってしまっています。 そこで glxsruby にもオリジナルと同様、更新のタイプステップを変更する機能が実装されています。 アプリケーション起動後に以下の操作を行ってください:
  • 'a' を押すと @step += 1 (更新速度アップ)
  • 'z' を押すと @step -= 1 (更新速度ダウン)
画面表示が遅い場合には、'a' をしばらく押しっぱなしにしておくと吉です。。

Feb 17, 2008

GL Excess/Ruby : Scene 7 を移植


レンズフレアの効果がかっこいい Scene 7 です。

Scene 7 では 10x10x10 の多次元配列が登場しますが、次のように定義してみました:
@f_angle = Array.new(10) { Array.new(10) { Array.new(10) { 0.0 } } }
...
@f_angle[i][j][k] = (100*a + 10*b + c).to_f
他にも Hash と Array を組み合わせることで、もっときれいに記述することもできます:
ary = Hash.new
...
ary[[i,j,k]] = ... # ここで [i,j,k] が Array。
こちらの方が簡潔ですが、配列を参照するたびに Array のインスタンスが生成されてしまいます。今回のように速度が要求されるケースでは利用しない方が無難であると思います。
GL Excess / Ruby のページも更新。 Scene 7 をダウンロードできるようにしておきました:
未実装のシーンは 8, 10, 11 の 3 個となりました。

Feb 16, 2008

ruby-breakpoint, etc.


[ruby-list:44570] Re: Q: 動的デバッグ方法

> (1) 動的にデバッグモードに移るようなライブラリ関数はあります
>    でしょうか?

ruby-breakpointはどうでしょうか?
breakpointと書いた時点でirbに突入します。

RubyForge: ruby-breakpoint: Project Info

ruby-breakpoint lets you inspect and modify state, diagnose bugs,
patch applications and more all via IRB by simply doing a method
call at the place you want to investigate. It is no longer being
maintained. Please consider using ruby-debug instead.

RubyとCursesを使ったコンソールテキストエディタ

連載第二回目です。今回も引き続きRubyとCursesを使ったコンソールプログラムを作っていきます。

GL Excess / Ruby : Scene 6 の移植完了


結局、ロケットの形状データはオリジナル版と同様に配列ベタ持ちで使うことにしました。 パフォーマンスに深刻な影響が出ることもありませんでしたので。
あと実行終了後のクリーンアップ部分に glDeleteLists( @shiplist, 1 ) と追記。これってオリジナル版には見当らないのですが、大丈夫なんでしょうかね。

GL Excess / Ruby のページも更新。 Scene 6 をダウンロードできるようにしておきました:
未実装のシーンは 7, 8, 10, 11 の 4 個。