2013年10月31日木曜日

"random" に関する理解

Processingでグラフィックを描きはじめてすぐに気がついたのですが,random()を呼ぶと毎回違う値を出力してきます.
他の言語ではいわゆる乱数シードをいじってやらないと毎回同じ値が出てくるのとは対照的です.

これ,グラフィックやアートを強く意識した言語であるProcessingのインタラクティブ志向っぷりがシンプルに垣間見えるポイントの一つであるような気がします.


もう10年ぐらい前になってしまうんですが,高専時代の話.
高専って,大学のように最終学年で研究室に入って卒業研究をやるんですが,自分がやらせてもらったテーマはニューラルネットワークの数理的解析みたいなものでした.

最初に先生から以下のような指示を受けました.

「この関数1と関数2にそれぞれループで乱数を与えて,出力を並べてグラフにしてみて.」

Processingでグラフィックのスケッチ

以前,スケッチ用途に良いね〜と紹介したGLSL Sandboxは,本来は既に用意されたポリゴンに絵を貼ったり,影や反射を計算したりするのに使う「ピクセルシェーダ」そのものだけで画像を生成するレンダリング手法.
そのため,頂点の組み合わせ(点,線,面…)で図形を表現する,いわゆる「お絵描き」的なグラフィックは苦手です.典型的には,適当な四角形を描くだけで一苦労&高負荷.

ゲームの開発環境(Eclipse,libGDX)で試作を重ねていくのも可能なんですが,もう少しコンパクトにコードベースの「お絵描き」スケッチができる環境はないかな〜と思っていました.

MP3再生ソフトにあるようなビジュアライザなんかの方面にいい解決策があるんじゃないかと思っていろいろ漁ってたら,Processingというプログラミング言語に辿り着き.

2013年10月18日金曜日

How to embed pd-for-android in your libGDX project

libGDX supports cross-platform game development.
It is very convenient in the case of using your PC as a test environment of a mobile game application.

When you set up cross-platform project using gdx-setup-ui.jar,
following project folders will be made.
  • my-gdx-project : core project, includes main sources, common libraries and interfaces
    • your sources are connected to libGDX
  • my-gdx-project-android : Android project, includes only Android specific implementations and native libraries
    • libGDX is connected to Android: OpenGL ES, touch input, etc
  • my-gdx-project-desktop : Desktop project, includes only Win/Mac specific implementations and native libraries 
    • libGDX is connected to Win/Mac: DirectX, OpenGL, mouse input, etc
libpd is a library to embed the Data-Flow programming language Pd(Pure Data) in our application programs. Additionally, in Android systems, libpd supports OpenSL ES audio API expected to reduce audio latency after Jelly Bean.

libpd needs platform-specific implementations. So if you want to use libpd in the cross-platform projects, it would be better to trace the same way as above libGDX connection.

2013年10月16日水曜日

libpdでパッチ開いて鳴ったわー

鳴ったぜ.

libpdのJNI側のソースコードやAudio glueとサンプルプログラムを見比べてたら形が見えてきた.

2013年10月9日水曜日

Desktop環境(Mac)でJava上のlibpd


ハマり中~

PdBase.openAudio 等のオーディオ系のメソッドは,libpdに同梱されたJNIのNative関数を呼んでいます.
  1. 生のlibpdをデスクトップ環境向けにビルドするとNative関数の中身はカラッポ.jni/z_jni_plain.c
  2. Android向けにビルドすると,これが jni/z_jni_opensl.c に置き換えられる.
  3. PortAudio branch版のlibpdでのデスクトップ向けビルドでは, jni/z_jni_pa.c に置き換えられる.

2013年10月7日月曜日

libpdを始めるにあたっての前提知識

とりあえずlibpdが動いている所を見たいという方はこちらへどうぞ

Pdをコードに埋め込むという触れ込みの「libpd」ですが,これが具体的にどのレイヤの存在で,周りでどういう周辺サービスが動いてることになるのかをちゃんと押さえてないとマズかった.

まず,libpdは独自のサウンドAPIみたいな何かを持つわけではないです.一部ネットメディアで「libpdを使えばAndroidでもレイテンシが云々」みたいな紹介のされ方をしているので,あんまり詳しくない人は誤解をしてしまうかも(=私という説).

2013年10月3日木曜日

libGDXでシェーダやTweenなど

進捗.stackoverflow.comに出入りする日々です…

BG面

波打つタイルのポリゴンを作成.
各頂点には位置座標の他,色と面法線ベクトルを格納.

VRAM領域に2つのフレームバッファを用意し,普通の位置座標と色を使ったレンダリング画像Aと,法線マップのレンダリング画像Bをそれぞれ描きこむ.