jit.gl.lua + jit.gl.gridshape で Jitterらしく

BY TOMOHIRO NAGASAKI

Max6のjit.gl.luaオブジェクトを使うと、LuaでOpenGLを使うことが出来ます。可能性は感じるものの、どうもJitterの良さが半減してしまうような気がします。そこで、jit.gl.gridshapeで作ったシェイプをLuaで描画する方法をスタディしてみました。

スタディ方針

  • gridshapeで基本的な形を作る
  • 頂点データを入れたmatrixを作る
  • Luaで頂点データmatrixを読み込んで描画する


準備

OpenGLの描画パッチを準備します。

※Githubからダウンロードできます。

Lua01

シェイプを作る

jit.gl.gridshapeで描画します。@matrixoutput 1を設定すると、シェイプが 12プレーン / float32 形式のmatrixデータで取り出せます。

Lua05

0〜2プレーンの頂点座標のみに分けて、matrixに入れます。jit.unpackで分けられますが、jit.genのswizで分けるのも簡単です。

Lua03

Luaで描く

jit.gl.luaからmatrixにアクセスするには matrix名を使って参照を取得します。

各セルのデータを取得するgetcellメソッドを実行します。x,y,zの座標リストが受け取れるのですが、戻り値を受け取る際に、Luaの可変個(…)を使う必要があるようです。ここでは、可変個パラメータを配列に入れ直す関数を挟んでみました。

これでx,y,zの配列にアクセス出来るようになりましたので、得られたデータを描画します。

Lua006

シェイプが描けました。

Jitterらしく

Max6付属のJitterサンプルパッチを真似て、2つのシェイプをモーフィングさせてみます。もうひとつのgridshapeを、同じく頂点座標プレーンに分け、jit.xfadeにてデータをクロスフェードさせます。

Lua04

SphereとCubeがモーフィングされた状態のシェイプが描けました。

Lua08

今回のスタディでは、あまりLuaが活用出来てない感じですが、matrixデータの包括的な処理など、パッチでは作りにくいようなデータ処理に向いているのかもしれません。隙あらば使っていこうと思います。

# 使用したjit.gl.luaの全コード