2010年11月30日火曜日

processing on eclipseな環境でCaptureクラスを使う。

できねーな。どうしたもんか。
(→2010/12/15追記:できました。後述します。)

はい、タイムオーバーです。
JBulletの方がなんとなく分かってきたのでこれならいけると思ってNyAR4P5とくっつけようと思った矢先で躓いた。Captureが、使えない☆
わかんねえ、ほんきでわかんねえ。
あっちの本家のフォーラムとかでも同じ話題がいくつかでてるけども俺の状態とはどうにも違う。
うーん、、、いっそスレ立てちゃうか、、、
まあもう今日のデモには物理演算の奴は間に合わんな。
おとなしく従来の奴で、となるな。
パワポの準備もあるんで、今回はあきらめる。
だがインタラクション2011の概要提出までには間に合わせて見せる。。。マニアッタライイナー。

いっそprocessingを捨てて本家NyARを使っちゃう、って手もあるけどね。
これが終わったらまじめにそれも考える。
_______________________

さて、というわけで本日のデモ終了。
スライドもデモの内容もほとんど前回と変わって無いんだけど反応はそこそこ良かった。質問もそれなりにきた。特に先生方からなかなかの力作だな、とか良くできている、と言われるとやっぱりちょっとうれしい。関心を持ってもらえたのは良いんだけどその分指摘も多くて、今後やるべきことがまた明確になった。まあ、何も発表しないよりは良かったんじゃあないでしょうか。
と言うわけで今日はちょっとゆっくり休もう。また明日からがんばる。
てかとりあえず早急にカメラを何とかしなきゃほんとに。
個人的にはDSJに興味が。カメラ周りが高速になるとやっぱ色々と変わってくるからね。
あー。解像度は30万画素ぐらいでいいからひたすら高速なUSBカメラが欲しい。
シャッタースピード爆速でハイfpsな奴。ブレに強いとマーカーの補足性能もぐんと上がるだろうし。
でもまあ、ざっと見た感じその手の奴ってやっぱ高いんだよなあ、、、(10万オーバーとか。)
________________________

2010/12/15追記

さて、冒頭に追記した通り、Captureクラスがp5 on eclipseでも使えました。
どうやったかって?
今から説明します。
まあその前に。
今私データグローブの研究やってんすけどね、今しがた試作弐号機「シ-2型」が完成したンすよ。
こいつが素晴らしい一品でね。シ-1型はもうお役御免だね。
可用性、保守性、耐久性、審美性、量産性、全てにおいて大幅に向上。
わだすはこいつでインなんとかクション2011に臨む覚悟だべ。
でまあその肝心のインなんとか2011の概要締め切りが12/24と来た。
これやばい。あと9日。時間ない。マジで。
なにがやばいってまだ概要に手えつけてない。マジで。
てかデモもまだ中途半端。マジで。
せめて物理演算も加えた状態のビデオ添付したいよね。
つーわけで急ごう。
ブログとか書いてる場合じゃない。
でもいいんだ。
ここに書いてるのは独り言。
メモ帳。雑記帳。手記。only my closed world.
まあぶっちゃけ、概要の段階ではまだ実装できてない機能をさもできたかのように書いといて、本番までにきちんと実装できてりゃそれで良いと思うけどね。フヒヒ。
ああそうそう、低周波治療器も買ったンすよ。アマゾンで。1200円のやっすいやつ。
あのビリビリするやつね。
なんに使うかって?
そんなの決まってんじゃん。


フォースフィードバックだよ。


いいや、もう。個人情報の暴露はここまでだ。
さっさと本題に入ろう。

1.eclipseを開く。
2.件のプロジェクトを開く。
3.左の枠んとこで右クリ。インポート→ファイルシステム
4.Cドライブの中のprogram filesの中のQuickTimeの中のQTSystemの中のQTJNative.dllを選択。
5.当該プロジェクトフォルダトップ、もしくはプロジェクトフォルダの中に作ったlibNativeフォルダを選択、OKを押す。
6.もっかいキャプチャー使ったプログラムを動かしてみる。
7.動く。
8.みんなハッピー。


これで動かなかったら?俺は知らん。
他んとこ調べるなりフォーラムで聞くなり死ぬなりすればいいよ。
ちなみに参考にしたスレッドはこれ
ここの



Re: QTJava in Eclipse
Reply #7 - May 20th, 2009, 6:56am
 
Hi.

I have the same problem too, and solved it just now.

1.add "QTJava.zip" to your project build path.
2.and set the location of native library path of "QTJava.zip" to "?:/Program Files/QuickTime/QTSystem".

Try it.


を参考にしたんだけど、俺はこれじゃできなかったんだよね。
なのでそこで示されてるフォルダーん中覗いてそれっぽいdllいくつか探して片っ端からインポートして試してみたってわけ。そしたら動いたのよ。
んで、できましたよーって報告したかったんだけどここのフォーラム自体はもう閉じちゃってるみたいであきらめた。ってそもそも投稿自体が古いんだけど。
ふう、疲れた。
一旦帰って散髪(もちろん3Qカット。半年振りだよ!)に行ってシャワー浴びて飯(日曜に作ったビーフシチュー。冬だしまだ大丈夫だろうと信じる。)食ってまた来るか。
16時から講究だし急がなきゃ。

というわけで中二だから帰る。バイバイ。

P.S. 全く関係ないけど冬月「今なら私にも初号機を動かせるかもしれない」とかってタイトルのSSが面白かった。是非続きを読みたいんだけど一向に上がってこないんだよね。作者さんもう少し頑張ってください。

processing+JBulletをやろうとするとやっぱりBPSGRが参考に。というかこれじゃもはやただの改変だよなこれ。

BPSGRについてはこちらで。
http://reco-memo.blogspot.com/2009/06/jbulletprocessing.html
(こういうの(個人ブログ)って勝手にリンク張ったりして良いもんなのかな。。。?)
recoさんという方が作成されたprocessing用JBullet簡易実装ライブラリ、です。
ごくごく限られた機能しか利用できないという触れ込みですが、あくまでもprocessingIDE上で普通にライブラリを読み込んで使う分には、です。
eclipse上でソースコードの方から読み込めば、そりゃあもうどんなパラメータもメソッドも弄りたい放題増やしたい放題です。
私もちょうどどうやってJBulletをprocessingで動くように対応させたものかと悩みまくっていたところなので、純粋にこのソースがかなり参考になりました。いや、なってます。今、まさに。
しかしeclipseにもだんだん慣れてきたような気がするんだよ。良きかな良きかな。
というかそう、今まさに見てる最中なんです。
ていうか時間がありません。マジで。
デモの準備がじぇんじぇンできてねえの。
もうやばい。死ぬ。パワポも作んないといけないのに。
本番は明日だけど一応今日先生に見せることになってんです。
びゃあ。
あ、どんなデモかってのはひみつ。いづれ言うかも。いや言わないかな。まあ、ひみつ。

一応自分用にメモ。あくまでも自分用。俺の目の前にいるのは常に俺だ。間違っても貴様じゃねえ。
いや、もうそういうのいいから。。。

まずは、processingとprocessing用OpenGLが使える状態になってるプロジェクトっていう前提で。(前回の奴を参照。)

0.BPSGRを落とす。解凍する。

1.プロジェクトにBPSGRライブラリフォルダん中に入ってるsrcをまるまるインポ。

2.プロジェクトトップのsrcディレクトリん中にドラドロして突っ込む。

3.勝手にパッケージごとに分けられるはずだ。これで完了。ね?簡単でしょ?

4.あ!忘れてた。これがみそなんだけど、BPSGRフォルダん中のlibraryん中のjbullet.jarをインポしてビルドパス追加してRefLibに入れる。ここでは他のBPSGR.jarとかは入れる必要ないからね。jbullet.jarだけ、ね。あとjbullet.jarについても、BPSGRライブラリに添付されてるものでないとだめぽ。なにかったら、多分に現行のJBulletとは使ってるバージョンが違うみたいで、新しいjbullet.jarだとなにやらエラーが吐き出されまくる。新しいバージョンでも動くようにするような技量は私にはないので、おとなしく添付のを使うんだぜ。

5.ここまでで動くはず。BPSGR付属のデモをeclipseで動くようにpublic付けたしたりで改編した後実行。ほうらうごいた。めでたしめでたし。

6.で、あとはinitPhysics()の中いじってgravity変えたり、groundShapeが勝手に生成されないように変えたりと好きなようにいじればおk。(作者様勝手にいじってごめんなさい。でも許してくださいこれしか道はなかったんですこうするしかなかったんです。)

あ、一応これも。
AddBox(float mass, Vector3f vec, Vector3f rot, float angle, Vector3f scale)というメソッドがあるんだけど、ここのscaleっていうベクトルがまんまBoxの縦横高さを表すわけなんだけど、例えばこれをあらかじめ外でVector3f scale = new Vector3f(100, 100, 100)みたいにインスタンスを生成しといて、メソッドに引数として渡すとする。一回目はまあ正常にブロックが生成されるんだけど、そのあと同じように続けて同サイズのブロックを生成させようとすると、同じ引数を渡してるはずなのになぜか縦横高さが半分になった状態で生成される。scaleを変えずにそのまま渡しっぱなしにしとくと、繰り返した分だけ半々になっていく。なんでまあ、大きさを変えずに引数を渡したい場合は、Vector3f copyみたいなのを作っといて、copyの方をAddBoxに引数として渡して、呼び出した直後にcopyには最初の状態のscaleをコピーする、ってな小細工がいる。あるいは直接数値を引数として入れとくか。

ここだけなんとかならないか、せっかくなんで後でメソッドの中を見てみよう。。。

eclipseでprocessingを使う。とりわけ不安定さに定評のあるprocessingのOpenGLを使う。

JBulletのデモのところでも書いたけど、このページ(えいごだよ。えいごあれるぎーあるひとはあなひらきしぃしょっくにちゅういなんだよ。)の下の方、Using OpenGL~に書いてあることがすべてでごンす。以上。

でもあたいちょー馬鹿なンで自分用にザパニーズ☆でまとめとく。
自分の言葉でまとめるって、すごく大事なことなンですよ?ってむかーし国語のせんせが言ってた。
てかえいごとか読めないしぃ。だるいしぃ。
えいごといえばNHK教育で「えいごりあん 」って番組やってんだけどさ、あたいアレ最初に見たときどの層に向けて放送してんのかよくわかんなかったのね。
(あ、いまでもわかんねーや。あとでしらべとこ。)
内容こそ(向こうの)小学生レベルで平易で簡単なものだよ。実に平易な表現を用いてキャラクターやらおねえさんやらが集まってお話ってかコントを繰り広げるのね。
セサミストリートとかがちかいかんじ。


でもなにがわかんねえってさ、、、字幕がねえんだよ。

日本語の説明ゼロなの。英語の字幕すらない。
中学生の英語の授業向けか?と思ったけど、いくら内容が簡単とはいえそんなにリスニングできる奴ばっかじゃないだろうし、どう考えても一般の中学生向けとしてはハードルが高いの。
小学校の英語の時間向け?とも思ったけど中学生以前の問題で絶対無理だろ。時間の無駄だ。
高校か?とも思ったけどそもそも高校で教育テレビとか教材につかわねーしなあ。
大学生か、というとさすがにゆとりとはいえ内容的に馬鹿にし過ぎだし。
とにかく謎なんだよ。
でまあ、謎だったんで今調べてみると、なんと答えは小学生向けでした。
うそーんまじかよ。今の小学生すげーナ。
ああ、もしかすると俺が見たのはえいごリアンだと思ってるだけでえいごリアンじゃなかったのかもしれない。深夜だったし。きっとそうだそうにちがいない。

まあいい。英語は置いとこう。英語も大事だけど今は置いとこう。関係ない。
あー、TOEIC受けなきゃなー。次こそは0.7kオーバー取りたい。

えっと、なんだっけ、、、ああそうそう。OpenGLね、OpenGL。
processing on eclipse な環境でのOpenGLの使い方。

まずprocessingをeclipseで使うやり方は、、、まあいいか。できてる前提で。
processingのlibん中のcore.jarをインポートしてビルドパスに追加して参照ライブラリに突っ込む。以上。
で、この状態でimport processing.core.*;って付け加えてPAppletクラスを継承するか別途オブジェクト作るかすればprocessingのメソッド使い放題。public void setup() とpublic void draw()で書いていく。(public void PApplet.setup() と public void PApplet.draw() でもいいかな。)あとはクソみたいなp5IDEと記述は一緒。
んでんでんで~、このままだとimport processing.opengl; は通らない。必要なjarをRefLibに入れてないからね。にゃあにゃあにゃあにゃあ。

さて、processing~/library/openglの中を見るとなんか色々それっぽいものが入ってる。OK.。
まずはインポートだ。 'gluegen-rt.jar', 'jogl.jar' and 'opengl.jar' の3つをとりあえずインポ。
ビルドパス追加でRefLibに。
それから忘れちゃいけないdllファイル。gluegen-rt.dll, jogl_awt.dll, jogl_cg.dll, jogl.dllの4つを例によってlibNativeの中にインポしとこう。

関係ないけど最近俺マス掻く回数が減ってんだよなあ。月1-2回。まだ25なのにこれだよ。草食系とかそんなレベルじゃない。仙人とか、超越者とか、異能者とか、、、若年性EDってやつ?ちくしょう、初陣もまだだってのに。でもほんとそういうのに興味がわかないんだよね。下ネタとかなにがおもしろいのかマジで理解できない。出すもの出す時もあくまで排泄行為の一環としてって感じ。エクスタシー?なにそれ?っていう。病院行った方がいいのかな。25なのに性欲ないンです、なんとかしてください、って。話を聞いてくれたのは30位の松雪泰子似の女医さんだった。「アラ、ソレハタイヘンネエ。デモチリョウノマエニマズハホントウニセイヨクガナイノカタシカメナクッチャイケナイワネエ、ボウヤ?」そういうと松雪泰子似の女医さんはいたいけな僕を診察ベッドの上に押し倒しワッフルワッフル

さあ、これで使えるようになったかな。とりあえずimport processing.opengl; を書いてsize(200,200,OPENGL);とでも書いて実行してみよう。






、、、どうだい?エラーが出ただろう?


まあまあ、そう怒らないでくれ。軽いブリティッシュジョークだhahah。

んで、こっからがみそだ。
ここで俺も詰んでさ。んで答えを求めてさまよったあげく行き着いたのがさっきのページ。
どうするか。 RefLibの中の'gluegen-rt.jar' and the 'jogl.jar' の2つについて、”ネイティブライブラリロケーション”を指定してやるんだ。
賢明な諸氏ならピンと来たことと思う。libNativeフォルダーをわざわざ用意したってのは、こういうことだ。(いや、そもそも標準的にlibNativeのなかにdllを入れるって通例になってるくさいけど。)
当該jarの上で右クリ、ビルパの構成、当該jarの▼を開いて、ネラロケ、編集、libNatibフォルダーの場所を指定してやる、OK。完了。これを2つそれぞれでやること。

さあ、ここまできたらもういいんじゃないか?
おれも書くのだるくなってきたぞ_?
なんだこのアンダーバー。うぜえ。はてな押したつもりがアンダーバーまで一緒に出てきた。うぜえ。アンダーバー超うぜえ。ごめんなさい。嘘です。アンダーバー大好きです。フォルダ名の先頭とかによくつけてます。整理に便利です。おすすめです。生理痛にもよくききます。経血ゼリーおいしいです。でも最近生理がきません。やばいです。責任とって下さい。ブヒー。
で、また適当にOpenでGLな、でもそこはかとなくprocessingabilityを感じさせるプログラムを書いたのち実行ボタン押してください。
エラーをはくこともなく実行できましたね?
(はーい!)←もちろん大きなお友達だよ!
じゃあ今日はここまで。
おわり?
おわり。バイバイ。

PS...あのSSちょっとおもしろいよね。中二じゃないけどあたいは好き。ところで本編でも麦野と浜面が和解できたのは良かった。ありきたりかもしれないがあたいはちょっとぐっときたぞ。ああでもー、浜面も好きだけど一番好きなのはやっぱいっつーさんだな。いっつーさんまじかっけー。いっつーさんマジ天使。
いや、これがネタじゃなくほんとに天使だから困る。あ、これってもしかしてネタばれ?
でもいいよね、どうせこんなこえだめ誰もきやしねーから。ブヒヒ。
上条さんはちょっとうっとおしいけどいなくなったらいなくなったでちょっとさびしい。
どこ行っちゃったんでしょうね?天界?

PSのPS...しかし一人称が「あたい」って我ながら気持ち悪いな。まあいいか。どうせ独り言だ。
だれもみやしねえ。
ついでに言うとPSってのはパーフェクトソルジャーの略なんだからね。勘違いしないでよね。プンプン。

2010年11月27日土曜日

物理音原付ハードウェアMIDIプレーヤ―

1.オルゴールの音鳴らす部分(長さの違う鉄の板が並んでるようなの)を用意。
2.ソレノイドを24個用意。高速にスイッチングできるリレーでも良いかな。
3.鉄の板の下にソレノイド取り付けて それぞれの板が叩けるようにしとく。
4.ソレノイドをmbedかなんかで制御できる状態にしとく。
5.MIDIを流すと音階に応じたソレノイドが動くようにしとく。
6.MIDI ファイルを読み込んでオルゴール音源で実際に演奏してくれる2オクターブ対応オルゴール型ハードウェアMIDIプレーヤの出来上がり。フィジカルMIDI音源というべきか。


ってのを考えてみた。ソレノイドっていくらぐらいすんだろね。
一般向けに売ってんの見たことねーや。
ネットワーク対応させた方がいいかなあ。っていうか明和電機っぽいなあ。

Javaで中括弧のみの文。その意味は?

int a = 1;
println("test1."+a);
/////無条件ブロック
{
  int b = 2;//このbはこのブロックの範囲でだけ使える。
  println("test2."+a+"."+b);
}
//////無条件ブロック終わり。
//↓これは通らない。
//println("test3."+a+"."+b);





こういうことだね。うん。

JavaでMMDモデルを読み込むとな。。。

http://www.nicovideo.jp/watch/sm7497680

JavaでMMDモデルを読み込んでる人がいたもンでびくりつ。
これができるなら話は変わってくる。
JBullet+NyAR+MMD+processingで新しい道が見えてくるなあ。

JBullet入門。Java用物理演算ライブラリJBulletを使ってみる。まずはデモを動かそう。

1.eclipseを落としてインストール。

2.JBulletを落として解凍。
eclipseのworkspaceディレクトリ(任意で設置)の上くらいにlibraryとかって名前のディレクトリ用意しといて、さっきの解凍したフォルダごと入れておけばいいと思う。今後ライブラリ持ってくる時もその中に入れとく感じ。で、プロジェクトごとに必要に応じてそこからインポートする感じ。

3.eclipse起動。新規プロジェクト作る。名前はJBullet_testとか。

4.プロジェクトの上で右クリック。インポート→一般→ファイルシステム
ここでさっきlibraryディレクトリの中に入れたJBulletディレクトリを参照。とりあえず.jarと名のつく奴全部とsrcの中のdemoディレクトリにチェックを入れてOKを押す。
プロジェクト内にlibフォルダを作っといて、jarは全部その中にインポートされるようにしとくといいかもしんない。宛先フォルダーを「プロジェクト名/lib」 ってしとくの。

5.プロジェクト内の下の方になんか増えてるから、そん中からjarファイルは全部ビルドパスに追加。ファイル上で右クリ→ビルドパスに追加。「参照ライブラリ」の中になんか追加されればおk。
(一旦インポートした上で追加、でなくとも、すでに追加済みの適当なライブラリの上で右栗→ビルドパスの構成→外部jarの追加、でも構わない。こっちだとワンステップだな。まあ実ファイルをインポート→追加、の方がライブラリの属性とか役割とかがフォルダ構造から分かるような感じで良いとおもうんだけど。)

6.プロジェクトの下のsrcの中にcom.physics.demos...ってのができてることと思うがまだ動かない。dllってファイルをプロジェクトフォルダ直下に置いてやる必要がある。libraryディレクトリの中のJBulletのなかのlibのなかのlwjglのなかの.dllが付いてる奴を全部コピーしてJBullet_testプロジェクトディレクトリ直下に張り付ける。lwjglってのはゲームエンジンか何かみたい。描画系は全部これに任してるのかな。アプレットで動作させてるデモもあるんだけど、そっちでは使ってない。awtだかswingだかのアプレットの描画機能使ってるから。私も描画系はprocessing側でやるつもり。
追記:
直下に置く、と書いたが、libNativeという名のフォルダの中に入れてやっても良い。
というかその方がいいのかな。eclipseの挙動的には。
インポート→一般→ファイルシステム、で、dllと名のつく奴を全部チェック入れる。
宛先フォルダーは「プロジェクト名/libNative」 ってしとく。OK.。

ここら辺の参考:http://www.creativecoding.org/en/beyond/p5/eclipse_as_editor 
とくに下の方のUsing OpenGL...のところ。
ここ見てないとprocessingのOpenGLをeclipseで使えんかってン。
あんちゃんもようみときい。

7.さあ、準備は整った。とりあえずeclipse上でJBullet_testプロジェクトの中のsrcの中のcom...demos.basicのなかのBasicDemo.javaを開いて実行しよう。エラー表示が出てなければなんなく実行できるはず。実行できたら他のデモも試してみよう。


さあ、これでスタート地点に立てたぬら?

2010年11月12日金曜日