jit.gl.lua 内の jit.gl.videoplane へ jit_matrix の入力からテクスチャを貼る : #max6 #maxmsp #jitter

スクリーンショット 2014-05-14 3.17.17

解説

[javascript]
function jit_matrix(name)

    plane:jit_matrix(name);

end
[/javascript]

緑線(jit_matrix)をjit.gl.luaにそのまま繋げる場合のコード。

[javascript]
function tex(…)

    local jit_matrix = {…}
   plane:jit_matrix(jit_matrix[2])

end
[/javascript]

texをprependして,tex関数をコールした場合のコード。可変長配列で受け取ると2番めの要素にjit_matrixの名前が入っています。

緑線(jit_matrix)は、単に{ “jit_matrix” , jit_matrix の 名前 } のリストを送ってるだけなんですね。

コード

[javascript]

autogarbage = 1
autowatch = 1
gc = 1

local plane = jit.new("jit.gl.videoplane",this.drawto);
plane.blend_enable = 1;
plane.blend = "alphablend";

–1
function jit_matrix(name)

    plane:jit_matrix(name);

end

–2
function tex(…)

    local jit_matrix = {…}
    plane:jit_matrix(jit_matrix[2])

end

[/javascript]

jit.gl.lua 疑問点メモ : #jitter #maxmsp #max6

  • jit.qt.movie を jit.listener を使って、コールバック監視の方法がわからない。asyncreadを行ないたいが、listenerが使えないため困っている。

追記

jit.gl.luaの中でlistenerをつかった jit.qt.mov asyncread 後のevent受ける処理は、実装されてないそうです。Cycling74のサポートからのメールより

jit.gl.lua 内でjit.qt.mov + jit.gl.videoplane を使ってテクスチャを描画 : #maxmsp #jitter #max6

スクリーンショット 2014-05-12 17.55.48

 

Lua内でJitterのオブジェクトを使ってテクスチャ描画しよう!Lua以外は、jit.gl.* 系 で使ういつものパターンです。

結果

スクリーンショット 2014-05-12 17.54.52

解説

[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)

jit.qt.movie & jit.gl.videoplane で透過PNG/MOVを扱う時のメモ : #maxmsp #max6 #jitter

スクリーンショット 2014-05-09 23.01.50

jit.qt.movie

  • jit.gl.videoplane へ マトリクスを送るときに @adapt 1 としておくと元の解像度で出る

jit.gl.videoplane

  • @blend_enable 1 @blend alphablend  @depth_enable 0 :鉄板の設定
  • @automatic 0 : jit.gl.*は描画順が謎なので、bangで直接指定する。

透過MOV

  • Hapというコーデックがアツいらしい

jit.gl.lua の出力に jit.gl.pix をかける : #maxmsp #max6 #jitter

スクリーンショット 2014-05-08 23.44.12

jit.gl オブジェクトのTIPSです。表題の通り、jit.gl.luaの出力にjit.gl.pixのエフェクトをかけたかったので、やってみました。jit.gl.luaのテクスチャ出力をゲットするのが少し難しかったです。

やり方

  1. 一旦 jit.gl.node へ jit.gl.luaを描画。※ jit.gl.luaの出力から青線( gpu上のtexture? ) を直接取得できなかったためです。他にやり方はありそうですが・・・
  2. jit.gl.node のアトリビュート @capture 1 にしておくと、第1outletからtexture出力(青い線)
  3. jit.gl.pix でテクスチャに画像処理
  4. jit.gl.videoplane にテクスチャを貼り付け
  5. jit.gl.render で jit.gl.window へ描画

補足 – Syphonを使う場合

jit.gl.*の描画をSyphonへ送る場合も、テクスチャかマトリクスをjit.gl.syphonserver送る必要があるため、上記の方法でluaで描画したtexture取得すると良さそうでした。jit.gl.renderから直接@matrixout 1 / @capture 1などしてマトリクスかテクスチャ取得出来た気がするけど、何故か上手くいかなかったです。