- jit.qt.movie を jit.listener を使って、コールバック監視の方法がわからない。asyncreadを行ないたいが、listenerが使えないため困っている。
追記
jit.gl.luaの中でlistenerをつかった jit.qt.mov asyncread 後のevent受ける処理は、実装されてないそうです。Cycling74のサポートからのメールより
Lua内でJitterのオブジェクトを使ってテクスチャ描画しよう!Lua以外は、jit.gl.* 系 で使ういつものパターンです。
[javascript]
local mov = jit.new("jit.qt.movie");
local plane = jit.new("jit.gl.videoplane",this.drawto)
[/javascript]
jitterのオブジェクトをインスタンス化します。jit.qt.movieは、pngを読み込みテクスチャに変換できます。jit.gl.videoplaneは、テクスチャを使って描画をしてくれます。
[javascript]
mov.adapt = 1
mov:read("cobalt_logo_sun.png")
[/javascript]
ここではファイル名を指定して画像を読み込んでいます。luaにおけるオブジェクトのメソッド呼び出しは、 :(コロン)でプロパティは.(ドット)のようです。
[javascript]
local frame = jit.matrix(4,"char");
mov:matrixcalc(frame.name, frame.name)
plane:jit_matrix(frame.name);
[/javascript]
jit.gl.videoplane へ jit.qt.movieのテクスチャの流し込み方になります。直接テクスチャを渡せれば良かったのですが出来なくて、一旦、jit.matrixへテクスチャを描画 (mov:matrixcalc(frame.name,frame.name)し、それをplaneへマッピングしています。jitter系のオブジェクトの受け渡しは、名前でやってるのが理解できます。(内部的にはポインタ渡してるのかな?)
[javascript]
autogarbage = 1
autowatch = 1
gc = 1
local mov = jit.new("jit.qt.movie");
local plane = jit.new("jit.gl.videoplane",this.drawto)
function scriptload()
mov.adapt = 1
mov:read("cobalt_logo_sun.png");
local frame = jit.matrix(4,"char");
mov:matrixcalc(frame.name, frame.name)
plane:jit_matrix(frame.name);
plane.blend_enable = 1;
plane.blend = "alphablend";
end
local rotate = 0;
function draw()
plane.rotate = {rotate,0,0,1};
rotate = rotate + 2;
end
[/javascript]
jit.gl.lua の勉強は参考文献が少なくて中々はかどりませんが、jitterオブジェクトをガンガン使えるようになると、また世界が広がりそうです。(テキストのコーディングが増えたら、oFとかUnity使ったら良いんじゃないかという話にもなりそうw)
Max for Live のデバイス .amxd 内で自信 が挿入されているトラック番号を、jsオブジェクトで取得してみます。
[javascript]
//init
"use strict";
inlets = 1;
outlets = 1;
autowatch = 1;
function bang(){
var api = new LiveAPI(this.patcher);
api.path = "this_device";
var pathStr = api.path;
var paths = pathStr.split(" ");
outlet(0,parseInt(paths[2]));
}
[/javascript]
LiveAPIのインスタンスへ”this_device”を指定する事で、api.pathはLive Object Modelにおける自信が挿入されている箇所の絶対パスを返します (例えば “live_set tracks 2 devices 1” になり、.amxdのパスが2番めのトラックの1番目のデバイスと分かる)。pathをスプリットしてトラック番号をゲットできました!
jit.gl オブジェクトのTIPSです。表題の通り、jit.gl.luaの出力にjit.gl.pixのエフェクトをかけたかったので、やってみました。jit.gl.luaのテクスチャ出力をゲットするのが少し難しかったです。
jit.gl.*の描画をSyphonへ送る場合も、テクスチャかマトリクスをjit.gl.syphonserver送る必要があるため、上記の方法でluaで描画したtexture取得すると良さそうでした。jit.gl.renderから直接@matrixout 1 / @capture 1などしてマトリクスかテクスチャ取得出来た気がするけど、何故か上手くいかなかったです。