openFrameworks で遊んでみた

年末は openFrameworks で遊んでました。成果物は適当に G+ とか youtube に上げてました。しょうもないデモだけど暇な人は見てみてね、って感じの用途だとこういうソーシャルメディアは便利な気がしますね… twitter だと短すぎるし、はてなとかだと大袈裟すぎる感があって。

https://plus.google.com/101346259708096774693/posts

http://www.youtube.com/user/shinichirohamaji/videos?view=0&flow=grid

感想としては、 openFrameworks よくできてるなーと。良いなと思ったのは

  • Linux, Mac なんかでとりあえずあんま考えなくてもビルドできて、まあ動く
  • 公式非公式ともに addon が色々あって、たとえば opencv とか物理演算とか、簡易 GUI だとか、音いじりとか、 kinnect とか、そういうやりたそうなことがなにやらだいたいできる。非公式 addon もなんでか知らないけど Linux, Mac ともに深いこと考えなくても動いたり
  • 簡単なことは簡単にできて、混みいったこともちゃんとできる感じの API

簡単なことが簡単にできるっていう具体的な話としては、ごく基本的な API はだいたいグローバル関数になってて、お手軽な GL 、って感じでコーディングができる、ってことがある。具体的な例としては、画像を読んでくるくる回す、みたいなコードは

    // 初期化部分
    ofTexture heartTex_;
    ofLoadImage(heartTex_, "heart0-w.png");

    // 描画部分    
    ofPushMatrix();
    ofTranslate(1024 / 2, (float)ofGetHeight() / 2 / global_scale);
    ofRotateY(turn_ * 180 / 40);
    ofEnableAlphaBlending();
    ofSetColor(200, 100, 100);
    heartTex_.draw(-200, -200, 400, 400);
    ofPopMatrix();

という感じでした。なにやら GL1 チックなお手軽 API で、読み込んだ画像をはっつけるのもカンタン。 SDL+GL でライブラリ化してたような、めんどくさい儀式的なコードを自分で用意しなくて良いのは良いと思います。こういうノリは processing ゆずりなんだろうなと。

一方で、視点調整だとか、 VBO だの FBO だの、あるいはシェーダーだの、そういう小難しいこともちゃんとできて、そういう部分が上記のようなお手軽 API とちゃんと連携が取れてる感じです。例えば、上のコードの出力先を FBO にしておいて、出力した後にシェーダーでエフェクトかける…みたいなことが、上のコードを全く書き変えること無くできます。

昔、 2D の時は、 SDL の「基本的なプラットフォーム間の違いだけ吸収してやるから、あとのことは自分で適当にやりなさい、それがしんどければ適当に上位ライブラリを探しなさい」って方針はなかなかいいなーと思っていて、この手の色々入ってるライブラリにはあまりいい印象がありませんでした。ですが、 3D に関しては、 SDL 的な感じでほっとかれるとかなり色々なコードを書かないと簡単なこともできないし、 3D に関しては SDL 的なアプローチよりこういうよくできたミドルウェア的なもの使うのは良いなぁとか思いました。まあ 3D に関しては GL が動いてる時点で既に SDL 的な物体のやることは既に無い気もしますしね…

難点としてはブラウザで動かないことですかねえ。とりあえず NaCl バックエンドを足して欲しい感じです…

なにかあれば下記メールアドレスへ。
shinichiro.hamaji _at_ gmail.com
shinichiro.h