kumaryu日記
2006-03-18 日記でもかくか
_ Riko
COLLADA読み込み中。
Blenderからはmesh内の要素がpolygonで書き出されてくるんでそいつをtrianglesに変換。
おー、簡単に書けた。COLLADAも最初に思ったよりまともなのかもしれない。C++で書けばぶち切れだが。
途中、ruby/daeに微妙に足りない機能があったから付け足しちまったがね。
あとは変換。Blenderから書き出した独自のYAMLよりCOLLADA DOM使った方が綺麗に書けそうな気がしてきた。
そしてインテグレーション地獄に。
まあインテグレーション地獄も一回書いてライブラリとしてまとめちゃえば使いやすくなるかもしれない。
全然関係無い話になるが、RIkoはどんどんハイスペックを求める方向になっていく予定なんでよろしく。
つーのは、俺が一人で何か作るよりも周りはハイスピードで進んでいくことに気付いたから。
マルチコアならマルチスレッドだよなー、どうしよっかなー、とか言ってる間にyarvはネイティブスレッド対応。まだ完全じゃないにしろ、そのうち完全になるだろう。
世の中のPCはそんなにハイスペックじゃねーしなー、と言ってる間にVistaが出ておそろしいスペックのグラフィック性能を要求しやがる。OpenGLも大丈夫だって言う話だし。まさかiBookはintelチップ内蔵のグラフィックじゃねーよな。
まあそんなわけなんで、俺の技術力や時間が足りない分は時代の流れに任せることにしました。そっちの方がPCゲーム的だよなー。
軽い物を作るにはハイスペックを要求しすぎる気もするが、その辺をどうするかは考え物だよな。
あ、もっと脱線するけど、yarvでruby/daeは動いたよ。:idをundefしてた所だけ直さなきゃいけなかったけど。
ちょっと速かった。サンプルが1.8.4で4秒からyarvで3秒になった。まあ実行時間の大部分はREXMLでのパースだけど。
_ Ruby
ruby/daeで嵌ったんだけど。
module A class AA; end end module B include A class BA def initialize @aa = AA.new end end end B::BA.new
1.8.4でこんな感じのが通らなかった。BA::AAがねぇってさ。
ああ、yarvでもだめだった。
でも
B.constants => ["BA, "AA"]
だぜ? なんでAAが見つからないんだか意味わかんなくね?
ああ、もしかして、こういうこと?
class A class AA; end end class B < A class BA def initialize @aa = AA.new end end end B::BA.new
同じ現象になるからそうっぽいな。外側のクラスのスーパークラスは定数探索されないのか。でもModule#constantsでは見つかるのに見つからないって言われるのは気持ち悪いね。
最近1.9では定数探索ルールが変わったんだっけ。yarvにはマージされてないとかかな? 試してないんでわからないけど。眠いんで1.9で試すのはパス。
あと、あれ。配列を何個かずつのセットに分けるのって結構使うんだけど、標準では無いのな。
ary = [1, 2, 3, 4, 5, 6] ary.split(2) # => [[1,2], [3,4], [5,6]]
みたいなの。このsplitと同じような操作を標準で簡単に書く方法って無くね?
class Array def split(n) res = [] self.each_with_index do |elem, i| res.push([]) if (i%n)==0 res.last.push(elem) end res end end
こんな風にしてみたけど。Enumerableに定義してもいいかもね。String#splitと被るのが嫌だったからArrayにしちまったけど*1。
これが無いのはあんまり使わないからなのかな。何故か俺は良くこんな機能が欲しい時が多いんだけど。
*1 あと俺がArrayでしか使わないから