Polycode – 2D空間での画像表示

LINEで送る
Pocket

今度はPolycodeの2D空間上で画像を表示させてみましょう。
今まで同様、PolycodeTemplateApp.cppのコンストラクタに下記のコードを追加します。
追加するコード:

    core = new CocoaCore(view, 640,480,false,0,60);	  
	CoreServices::getInstance()->getResourceManager()->addArchive("default.pak");
	CoreServices::getInstance()->getResourceManager()->addDirResource("default");

	// Write your code here!
    // 2Dの場合はScreenを使います。
    Screen* screen = new Screen();
    Image* image = new Image("../Resources/icon.png");
    ScreenImage* screenImage = new ScreenImage(image);
    screenImage->setPosition(100, 100, 0);
    screen->addChild(screenImage);
}

実行結果がこれ。画面にアイコンが表示されています。
polycode_2dimage

Polycodeでは、2D空間の場合はScreen、3D空間の場合はSceneというクラスのインスタンスをつかって空間を表します。
今回は2D空間に画像を表示させるサンプルなので、Sceenを使っています。

次に、画像を表示させるまでの方法ですが、紛らわしいですがImageクラスとScreenImageクラスを使っています。
2つの違いとしては、

Imageクラス
メモリ上に存在する、ビットマップデータ
ScreenImageクラス
2D空間上に画像を表示させる表示オブジェクト

といったところです。
ActionScriptになじんでいる方であれば、BitmapDataクラスとBitmapクラスの違い、と理解すると良いと思います。

表示オブジェクトの座標は、setPositionメソッドを使って設定します。引数はx, y, z座標の順番になっています。
2D空間の場合、z座標を0以外にすると表示されないので気をつけましょう。

ImageクラスにはsetPixelというこれまたActionScriptに慣れた人には分かりやすいメソッドがあり、これを使う事でピクセル毎の操作ができるようになります。
Imageクラスのコンストラクタに画像ファイルパスを指定すると、パスにある画像を読み込みます。ただし、今現在はpng形式の画像にしか対応していない様です。

ScreenImageクラスのコンストラクタにImageクラスのインスタンスを入れる事で、Imageを表示させる事ができるようになります。

僕はMacでコードを書いているのですが、表示させている画像はXCodeのプロジェクトにicon.pngという画像を追加していますが、ビルド後の実行ファイルと画像などの格納場所との位置関係を考慮し、”../Resources/”とパスを追加しています。
VisualStudioの場合はこういったことはしなくてよかったはず。

最後、表示させるにはscreenオブジェクトのaddChildメソッドを使って表示オブジェクトに表示させます。これもActionScript使いにはなじみが強いですね。

しばらくはつまらない基礎編が多いですが、いきなりOpenNIで表示、みたいな事をやってもわけがわからなくなるので順番に書く事にします。

Polycode

LINEで送る
Pocket

polycode_header
僕の中でここ最近気になっているPolycodeというC++/Luaのframeworkが熱い。今後がすごく楽しみなので記事にしてみます。

Polycode(http://polycode.org/)とは、Ivan Safrin(http://www.ivansafrin.com/)という人が作ったOpenframeworksに近いWin/Mac対応のcreativeなcodeを書くためのframework。

物理エンジンも使えるようになっており、2DではBox2D、3DではBullet Physicsを採用しているようです。

Openframeworksと比べて何が良いかというと、
・3Dに関する機能がOpenframeworksよりも充実している
・OpenALのように位置を指定してサウンドをならす事もできる
・shaderを簡単に組み込む事ができるなどエフェクトにも対応している
・スケルトンの表示やアニメーションにも対応しており、3Dソフトから書き出したデータをアニメーションさせて表示させる事もできる

という違いがあります。

2011年6月時点ではAlphaリリースなので不安定らしいですが、かなり期待できると思います。

現在はLinuxやiOSには対応していないですが、Linuxは対応中のようです。iOSについては、ソースコードをみる限りそれらしいクラスがあるのでこちらも近々対応するのではないかと思っています。

これからもPolycodeの情報を書いていこうと思います。