チュートリアル14

マトリクスのポジショニング


マトリクスのデータのポジショニング

このチュートリアルでは、あるのマトリクスの一部を取り出し、別のマトリクスの中のいくつかの異なった場所に置く方法について検討してみたいと思います。データの場所を移動したいと思う場合には、様々な理由があります。ここでは特にビジュアルイフェクト(視覚効果)に焦点をあてていますが、ここでご紹介するテクニックはマトリクスのデータをあちこちに動かすことを含むあらゆる種類のタスクに役立ちます。
ここでは、マトリクスのある範囲を分離する方法、それを他のマトリクスの特定の位置に置く方法、およびそのサイズを変更して(これは拡大・縮小、ピクセレーション(画素化)、ブラーといったビジュアルイフェクトに役立ちます)動的に移動を行う方法についてご紹介します。

・Jitter Tutorialフォルダの14mMatrixPositioningというチュートリアルパッチを開いて下さい。

jit.windowオブジェクト

パッチの左下隅にはjit.windowオブジェクトがあります。このオブジェクトは、チュートリアル1でご紹介したように、マトリックスの内容を表示するために別のウィンドウを生成するものです。チュートリアルの他のほとんどの章では、代りにjit.pwindowオブジェクトを使っています。

jit.windowjit.pwindowは「一方が別のウィンドウをオープンするのに対してもう一方はパッチャーウィンドウの中の矩形の領域を利用する」という明らかな違いを除いて、非常によく似ています。そしてこの2つは、多くの同じアトリビュートやメッセージを共有しています。しかし若干の違いもあります。ここでは、jit.windowを使ってそのユニークな特徴を2つほどご紹介します。

この時点では、おそらくjit.windowによってオープンされたDisplayウィンドウは見えないと思います。実は、このウィンドウはパッチャーウィンドウの後ろに隠されています。けれども、ご希望であればDisplayウィンドウをフローティングウィンドウにすることができます。フローティングウィンドウとは、たとえ最前面にある(フォアグラウンドの)パッチャーウィンドウを操作している間であっても、絶えずMaxの他のウィンドウのいちばん上に「浮かんで」いるウィンドウのことです。これを行うためには、floating 1 メッセージによってjit.windowのfloatingアトリビュートを変更する必要があります(デフォルトのfloatingアトリビュートは0です)。

・Display as floating windowと表示されたtoggleボックスをクリックしてjit.windowにfloating 1 メッセージを送って下さい。


ウィンドウを他のすべてのウィンドウの前面に「浮かべ」ます

jit.windowオブジェクトに書き込まれた表示領域を示すスクリーン座標−450 60 770 30 −に注意して下さい。これは320ピクセルの幅で240ピクセルの高さの領域を指定しています(jit.windowに対するスクリーン座標の指定の仕方についてはチュートリアル1、及び(或いは)この章のこの後の記述を見て下さい)。


1つのjit.matrixから他へ

画像を読み込んで、いくつかの加工を施してみましょう。

・importmovie sunset.jpg というメッセージボックスをクリックして、パッチの上部にあるjit.matrix オブジェクトに画像を読み込んで下さい。Display ON/OFF と表示されたmetroオブジェクトをスタートさせて、jit.matrixにbangメッセージを送っている状態にして下さい。

jit.winodowにイメージが表示される前に、bangによってマトリクスが(jit.hueを通って)2番目の jit.matrixオブジェクトに送られます。この2番目のjit.matrixオブジェクトによってマトリクスのどの部分を表示するかを変更するためのアトリビュートを加工することができます。


マトリクスは(jit.hueオブジェクトを通って)他のjit.matrixへ送られ、jit.windowに表示されます

パッチの中央にあるpresetオブジェクトには、ウィンドウのユーザインターフェイスオブジェクトのためのプリセット設定がいくつか保存されています。

presetオブジェクトのプリセット1をクリックして下さい。

これは、dim 16 12 というメッセージを下側のjit.matrixオブジェクトに送り、大きさを16×12に変更します。


dim メッセージはjit.matrixの持つマトリクスの大きさを変更します。

入力されるマトリクスは320×240の大きさですが、入力を受けるjit.matrixは16×12の大きさしか持っていません。このため、jit.matrixは受け取ったマトリクス全体を表示するためにベストを尽くそうとするのですが、必然的に多くの情報を捨てざるを得ません。結果は、非常にピクセレート(画素化)された画像になります。(ピクセレーション(pixelation)という語は、イメージを正しく表示するためには不十分な画面解像度(不十分なピクセル数)を使用した結果生じるモザイク効果のことを指します。) jit.windowオブジェクトは320×240のイメージを完全な解像度で表示できることができる(ウィンドウの大きさはアーギュメントによって初期設定されています)にもかかわらず、この状態では、受け取るマトリクスはたった16×12の大きさになります。jit.windowは16×12のマトリクスを表示するために320×240に「拡大」し、そのために必要なだけピクセルを複製します。

・Change actual matrix dimennsions と表示されたナンバーボックスをドラッグして、違ったピクセレーション効果を見て下さい。

補間


・ナンバーボックスオブジェクトを16と12に戻し、パッチの下部にある青い領域のInterpolate to smooth pixelation と表示されたtoggleをクリックして、interp 1 というメッセージをjit.winodow に送って下さい。


jit.windowの補間をオンに切り替えます


このとき、jit.windowオブジェクトは−単に16×12のマトリクスのピクセルを複製して一連の20×20ピクセルブロックを作る代りに−、入力されるマトリクスを320×240に拡大する際にその値の間の補間を行います。これは、イメージを拡大する際に入力されるマトリクスの各セル値と隣り合うセル値の間に色の滑らかなグラデーションを作るもので、そのため表示される320×240のマトリクスのセルからセルへの変化はできる限り緩やかなものとなります。入力されるマトリクスのサイズと表示サイズの差が非常に大きいので、補間によって極端なブラ−効果が生じています。

・補間をオフにするために、toggleを再びクリックして下さい。これによってinterp 0というメッセージがjit.windowに送られ、interpアトリビュートを0(オフ)に設定します。Change actual matrix dimensionsと表示されたナンバーボックスに新しいマトリクスのサイズ(80、60など)を入力して、イメージがあまりピクセレートされないようにして下さい(この場合にはピクセレートされるブロックが4×4にしかならないのを見ることができるはずです)。toggleをクリックして補間をオンに戻して下さい。この場合、補間が4ピクセル間でしか起らないため、ブラ−効果があまり極端ではない点に注意して下さい。再度 toggleをクリックして補間をオフにして下さい。

jit.matrixオブジェクトのすぐ上にある、同じ表示を持ったの別のtoggleを見つけてクリックし、 jit.matrix上(jit.window上ではありません)での補間をオンにして下さい。


マトリクスの大きさを小さくしてもほとんど補間は行われません


これによって、ほとんど効果は生じない点に注意して下さい。その理由はjit.matrixは依然として80×60 のマトリクスを出力しているだけだからです。この場合の補間は(マトリクスのサイズを増やすのではなく、 減らしている場合)非常にムダなものになります。

・再びtoggleをクリックして、jit.matrix上での補間をオフにして下さい。


マトリクスの一部の分離


それでは、マトリクスの一部に注目する方法について見ていきましょう。

presetオブジェクトのプリセット2をクリックして下さい。画像の小さな一部分だけが見えます。

このプリセットではjit.matrixの大きさを320×240に戻しています。にもかかわらずsrcdimstart 、srcdimend、usesrcdimという、また違ったアトリビュートを使用することによって、マトリクス全体の実際の大きさを変更せずにマトリクスの特定の部分を分離することができます。これらのアトリビュートを設定するために、dimstart 40 150、dimend 119 209、usesrcdim 1 という新しい3つのメッセージが送信されていることに注目して下さい。これらのメッセージによって、インレットで受け取ったマトリクス全体のサブセットを指定し、これらの値をフルサイズ(このケースでは320×240)のマトリクスとして送信することができます。この、入力マトリクスのより小さなサブセットは、jit.matrix自身の中で「拡大」(必要に応じてセルが複製)され、出力マトリクスサイズに合わせられます。usesrcdim 1 というメッセージは、「入力マトリクス全体の代りに、指定した入力マトリクスのサブセットを使う」ということを意味しています(デフォルトでは、usesrcdimアトリビュートは0に設定されているので、srcdimstart及びsrcdimendアトリビュートは無視されます)。srcdimstart及びsrcdimendアトリビュートを設定するメッセージでは、srcdimstart及びsrcdimsendという語の後に各次元の始まりと終わりの点のセルインデックスが続けられます。dimstar 40 150及びdimend119 209というメッセージによって、水平方向はセル40からセル119まで(これらのセルは含まれます)、垂直方向はセル150からセル209までの、指定した80×60の領域を使用するようにjit.matrixに伝えています。

注記:この章では、矩形の領域を指定するための3つの異なった方法について説明してきました。個々のケースで「何を指定しているか」について明確にしておくことは重要です。

jit.windowオブジェクトボックスにはウィンドウの表示領域を「スクリーン座標」で書き込みました。コンピュータのオペレーティングシステムでは、スクリーン座標は左上隅の点を原点として指定されます。スクリーン全体の左上隅は0,0になります。右へ2ピクセル進んだ点(左上すみの左から3つめのピクセル)は2,0になります。さらに、この点から5ピクセル下(左上隅から下へ6つめ)の点は2,5になります。スクリーン上の矩形の領域を記述するためには、矩形の左、上、右、下の境界の座標を初期設定アーギュメントとして書き込みます。

jit.matrixのdimアトリビュートの中では、オブジェクトのマトリクス用に各々の次元の大きさを与えました。これは、各次元の「セル数」です。

srcdimstart及びsrcdimendアトリビュートの中では、マトリクスの中の、始まりの「セルのインデックス」(それ自身も含まれます)を指定しました。セルには、0から始まりその次元のセル数より1少ない数までのインデックスナンバが与えられていたことを思い出して下さい。(ちなみに、複数のプレーンは同様にインデックス付けされます。)このため、320×240のマトリクスの場合、最初の次元のセルのためのインデックスは0から319まで、2番目の次元のセルのためのインデックスは0から239までとなります。 jit.matrixオブジェクトのソースの大きさをセットするためには、srcdimstartの後に範囲の始まりのセルインデックスをマトリクスの次元ごとに続けたもの、及びsrcdimendの後に範囲の終わりのセルインデックスを次元ごとに続けたものを使って、セル範囲を指定する必要があります。

これらの、領域を記述する違った方法は混乱を招く可能性もありますが、注意深く何を指定しているのかを正確に考えれば、必要な事柄を記述するのに適した方法を導き出すことができるでしょう。


ソースとして使用したいのは入力されるマトリクスの内の80×60ピクセルの範囲だけですが、送り先のマトリクスは320×240の大きさを持っています。この小さなマトリクスから大きなマトリクスへの拡大によってもまた、ピクセレーション効果が発生します。しかし、この場合の拡大は、jit.matrixjit.window の間(これまでの所で、jit.matrixの実際の大きさを減じた際に行ったもの)でではなく、 jit.matrix内部(すなわち、「ソース」の領域と「行き先」のサイズの間)で行われます。従って、補間によってピクセレーションを滑らかにしてしまいたい場合、これをjit.matrix内部で行わなければなりません。この場合 jit.windowでは補間をオンにする必要はありません。それは、jit.window がすでにjit.matrixから320×240のマトリクスを受け取るようになっているからです。

・このことを確かめたいとお思いであれば、toggleをオンにしてinterp 1メッセージをjit.windowに送って下さい。全く何の効果も現れません。320×240のマトリクスを320×240の表示領域に対して補間しようとしているため、何の変化も起らないのです。同じtoggleをオフにしてjit.windowのinterpアトリビュートを0に戻して下さい。今度は別ののtoggleを使って、jit.matrixにinterp 1メッセージを送って下さい。この場合は、期待したようなスムージング効果を得ることができます。

・ナンバーボックスオブジェクトに新しい値を入力してsrcdimstartとsrcdimendアトリビュートのアーギュメントを変更して下さい。これにより、画像の中のどのような特定な部分でも「ソース」領域として分離することができます。当然ながら、ソース領域として選んだ部分によって、画像が320×240の出力マトリクスに当てはめられる際の拡大によって被る画像の歪み方が決定されます。


イメージの反転

srcdimendアトリビュートのアーギュメント(ソース領域の最後のセルのインデックス)はsrcdimstartアトリビュートのインデックスナンバより大きくなければならないとお思いになるかも知れません。しかし、必ずしもその必要はありません。

presetオブジェクトのプリセット3をクリックして下さい。画像は垂直方向に反転されています。


2番目の次元ではtopとbottomが入れ替えられています

この例は、垂直方向の次元の終点のセルインデックスに開始点のインデックスより小さい値を指定した場合を示しています。この場合jit.matrixは、依然としてそれらのインデックスを送り先のマトリクスの垂直方向の次元の始まりと終わりの点と関係付けていて、効果的に値の上下の順序を逆にします。(ここで述べたことは、送り先のマトリクスの方向付けに対して同じような反転が行われていないことを前提としています)

イメージを水平方向に反転させるために、水平方向(1番目)の次元に対して同様な入れ替えを行うこともできます。ソース領域の両方の次元で入れ替えを行った場合、イメージを180度回転したのと同じ視覚効果を得ることができます。

presetオブジェクトのプリセット4をクリックして下さい。

この例では、ソース領域を両方の次元で反転させています。ソース領域は160×120に縮められ、interpアトリビュートをオンにしてピクセレーションを滑らかなものにしています。

出力マトリクスのサイズ変更

マトリクスの「ソース」領域を指定した場合と全く同様に、そのソースの送り先(ディスティネーション)を指定することができます。この場合でも、出力マトリクスのサイズの変更は行われず、dimアトリビュートで指定された通りの320×240のままです。しかし、指定された「ソース」領域をおくための領域の変更を行います。入力マトリクスのソース領域は、出力マトリクスのディスティネーション領域に(必要に応じて拡大/縮小が行われて)置かれます。出力マトリクスのディスティネーション領域の外にあるセルは変更されないままです。

・presetオブジェクトのプリセット5をクリックして下さい。マトリクス全体は、出力マトリクスの中央に置かれた80×60の矩形領域に押し込められています。

最初に注意すべき点は、usesrcdimアトリビュートがオフにされていることです。これによって、入力マトリクス全体をソースとして使用するように設定が戻されています。(この時、srcdimstartとsrcdimendアトリビュートは無視されます。)usedstdimアトリビュートはオンにされています。これによって入力マトリクスは出力マトリクスの指定した部分に置かれます。dstdimstart及びdstdimendアトリビュート(dstdimstart 120 90、dstdimend 199 149)はディスティネーションとしてマトリクスの中央部分のセルを指定しています。ここではイメージを拡大するのではなく、縮小しているので、interpアトリビュートはオフにしてあります。

Erase previous image と表示されたtoggleがオンになっている点にも注意して下さい。これによってif $i2 then clear オブジェクトに数1を送っています。この時、ステートメント(文)のif部分は真になるので、オブジェクトが左インレットでメッセージを受け取る毎に、メッセージclearが出力されます。このメッセージは、イメージが表示された直後にjit.matrixオブジェクトの中身をクリアし、jit.matrixが次のマトリクスを受け取るための準備をします。これによってディスティネーション領域の外にある全てのセルの値は確実に0になり、出力マトリクス中の使用されない部分は黒く表示されます。

ディスティネーションの大きさを指定するナンバーボックスオブジェクトの値を変えて、ディスプレイウィンドウの中にある画像を動かして(そしてサイズ変更を行って)下さい。

Erase previous imageと表示されたtoggleをオフにして、clearメッセージが送信されるのを止めて下さい。dstdimstart及びdstdimendのアーギュメントを更に変更し、先程とどのような違いがあるか注意して下さい。変更前のディスティネーション領域は、依然としてディスプレイウィンドウに描画されたままになっています。その理由は、マトリクスのこれらのセルはクリアされず、新しいディスティネーション領域の外側にある場合には、書き換えられずそのままにされてしまうためです。これによって前のイメージの「軌跡」を背面に残す効果を得ることができます。この結果は特定の視覚効果として使用できる可能性を秘めています


マトリクスがクリアされないと、それまでのディスティネーション領域が
新しいディス
ティネーション領域の外にある場合には背後に残されたまま になります。これにより、
連続して変更を行った場合、過去のイメージの「軌跡」が残されます


マトリクスの中でのイメージの移動

dstdimstart及びdstdimendアトリビュートの変更を行う自動的なMaxの処理を設定することによって、データをマトリクスの中で移動させ、イメージがディスプレイの中を動き回るように見せることができます。

presetオブジェクトのプリセット6をクリックして下さい。

これによって、patcher move_aroundサブパッチの中にある、dstdimset及びdstdimendアトリビュートに新しいアーギュメントの連続したストリームを提供するための自動処理がスタートします。patcherの上にあるtoggleがこのプロセスをオンにし、ナンバーボックスは新しいディスティネーションへ移動する時間をミリ秒単位で指定します。

patcher move_aroundオブジェクトをダブルクリックして、サブパッチの内容を見て下さい。これまでのところでは、パッチの右半分しか使用していません。


サブパッチ[move_around]にあるディスティネーション移動処理

右インレットに入力される"rate"の値は、metroオブジェクトのインターバル時間です。このオブジェクトは、4つのrandomオブジェクトに対して定期的にbangを送り、4つのrandomオブジェクトは新しい左、上、右、下のセルインデックスをランダムに選びます。このディスティネーションの4つの点は時間の値と共に lineオブジェクトに送られます。lineオブジェクトは、ディスティネーション領域をこの新規のランダムな点に徐々に移動させるために、50ミリ秒(イメージを表示する速さ)ごとに新しい値を送信します。サブパッチの外部では、これらの値はjit.matrixオブジェクトのdstdimstart及びdstdimendアトリビュートのアーギュメントとして使用されます。

このサブパッチには、覚えておく価値のある2つのトリックがあります。第1のトリックは、このサブパッチが、dstdimendのアーギュメントがマトリクスの320×240の範囲をこえる可能性を含めて作られているということです。例えば、水平方向の大きさを指定するためにrandom 640オブジェクトを使っていますが、この結果から160を引いた値は、終点のセルインデックスとして-160〜479をもたらします。このようにしたのは、より大きなディスティネーション領域の可能性を高めるためですが、これによって、イメージが動き回る際により大きなイメージの表示を見ることができ、さらにイメージがウィンドウの端までのすべての範囲を頻繁に動き回るようになります。マトリクスの実際のセルの範囲を超えてディスティネーションの境界を指定することが可能で、jit.matrix はできる限りその領域にイメージを置こうとする(マトリクスの大きさの限界を超えた場合にはクリッピングされます)ということは覚えておくとよいでしょう。2番目のトリックは、平凡ですが役に立ちます。詳しくは次のようなものです。ここでは、sel 0オブジェクトを使って metroオブジェクトがオフになったことを検出し、これをトリガとして各lineオブジェクトにstopメッセージを送信します。これによって、ユーザがプロセスをオフにした後にlineオブジェクトが値を送り続けないようにしています。

・[move_around]サブパッチウィンドウを閉じて下さい。


ソースイメージの変更、リサイズ、移動

同様に、ソースイメージの変更を自動化してみましょう。

presetオブジェクトのプリセット7をクリックして下さい。

ディスティネーション領域に対して行ったのと全く同様な方法で、今度はイメージのソース領域を連続して変化させてみましょう。実際にソースマトリクスのサブセットの矩形領域が(srcdimstart及びsrcdimendによって)絶えず変化している様子、さらにこの領域が(dstdimstart及びdstdimendによって)絶えずサイズを変え、ウインドウ内を動き回っている様子がわかると思います。ソース及びディスティネーションの矩形領域は[move_around]サブパッチによってランダムに選ばれるので、イメージは時として反転することもあります。ここでは、jit.matrixのinterpアトリビュートをオンにして、ソースイメージが引き延ばされた場合に生じるピクセレーションを滑らかにしています。

・どんなことが起っているかを少しでも明白にするために、Erase previous imageと示されたtoggleをオンにして下さい。

次元についてもう一言

このチュートリアルでは、jit.matrixオブジェクトの大きさを変更する方法、そしてオブジェクトの中のソース及びディスティネーション領域を指定する方法について見てきました。説明を解りやすく、またビジュアライゼーション(視覚化)するために、ここでは2次元のマトリクスを使い、マトリクスの中のソースとディスティネーションの矩形領域を指定しました。しかし、これらの考え方がどんな次元数を持つマトリクスにでも適用できるということは指摘しておかなければならないでしょう。(srcdimstart、srcdimend、dstdimstart、dstdimendのアーギュメントの数は、jit.matrixオブジェクトの持つ次元の数に対応します。)例えば、3次元のマトリクスを扱う場合、これらのアーギュメントはマトリクスのバーチャルな3D空間における6面体を指定するために使用されます。

注記:jit.qt.movieのように、2Dマトリクスだけを扱う特定のオブジェクトでは、ソースとディスティネーションの領域は常に矩形領域になります。このため、これらのオブジェクトではソース及びディスティネーション領域はsrcrect及びdstrectという1つのアトリビュートによって定義されます。このアトリビュートは、矩形の境界にあるセル(左上隅と右下隅)を指定するための4つのアーギュメントを取ります。



色相の回転(ローテーション)

ちょっとした色の変化を追加するために、2つのjit.matrixオブジェクトの間にjit.hueオブジェクトを挟んであります。(jit.hueについてはチュートリアル7で詳しく述べています。)

presetオブジェクトのプリセット9をクリックしてjit.hueの動作を観察して下さい。


色相角を変化させています

このプリセットではusedstdimはオフにされていますが、usesrcdimはオンのままです。そして、 jit.matrixの補間もオンのままなので拡大されたイメージにはブラ−効果が現れます。patcher rotateサブパッチの自動的な処理によってjit.hueの色相は絶えず回転させられています。


patcher rotateをダブルクリックして、サブパッチの内容を見て下さい。


[rotate]サブパッチの内容

右インレットへ送られる値は、色相が360度回転するための時間をミリ秒単位で与えます。左インレットに1が送られると、360という数値がその時間値と組にされ、lineオブジェクトにその時間をかけて0から360 まで進むように指示します。そして、lineオブジェクトは50ミリ秒ごとに新しい角度の値を出力します。 lineオブジェクトに書き込まれた最初のアーギュメントが小数点を含んでいることに注意して下さい。これは、より高い精度が得られるように(そして、jit.hueのhue_angleメッセージはfloatのアーギュメントを前提にしているので)、lineに対してintではなくfloatの値を出力するよう指示します。lineは360に達すると右アウトレットからbangを出力します。このbangを使ってlineの内部の値を0に戻し、 packオブジェクトにbangを与えて次のローテーションをスタートさせます。左インレットから0が入力されると、sel 1オブジェクトはそれを直接lineに送り、lineを止めて色相角を0にリセットします。

・[rotate]サブパッチウィンドウを閉じて下さい。

・presetオブジェクトのプリセット9をクリックして下さい。この例ではこのパッチの全ての自動処理(オートメーション)とイメージ操作テクニックを仮想的に組合わせています。ここではjit.matrixのディスティネーションの大きさの変更は200ミリ秒ごとに設定され、より速いなリズミカルな効果を作り出しています。


フルスクリーン表示

あなたが欲しかったとおりの映像を作り出すMaxパッチができた時、そしてそれをもっと洗練された方法で表示したいと思う時には、jit.windowに指示をしてスクリーン全体に表示させることができます。 jit.windowはfullscreenと呼ばれるアトリビュートを持っています。このfullscreenがオンの場合、 jit.windowは表示領域としてスクリーン全体を使用します。また、hidemenubarメッセージを使って、Maxにメニューバーを非表示にすることができます。(詳しくは、MaxドキュメンテーションのTopicsセクションにある"Message to Max"を参照して下さい。)

jit.windowのフルスクリーン機能を使うにあたって、覚えておきたいことがいくつかあります。

まず最初に、いったんスクリーン全面にイメージを表示した場合(特にメニューバーをも非表示にした場合)、もはやフルスクリーンをオフにするためにマウスを使用することはできないということです。そのため、そのMaxパッチの中に、fullscreenアトリビュートを0に戻す手段をプログラムしておく必要があります。

次に、1つのjit.windowだけが1度に1つのスクリーンに対してフルスクリーン表示をできるという点です。フルスクリーンへのアクセスにおいて複数のjit.windowオブジェクトが競合した場合、一番最後にfullscreenアトリビュートに1をセットされたjit.windowオブジェクトがフルスクリーン表示できます。

もう1つ、jit.windowがフルスクリーン表示をしている場合でもその解像度は実際の大きさ(すなわち、rectアトリビュートのアーギュメントによるもの)によって決定されるという点です。このためrectアトリビュートに320×240の長方形が指定されている場合、スクリーンの大きさがこれより大きい場合でもこの値が画像の解像度になります。

パッチの下部には、キーボードのスペースバーを利用して、jit.windowのfullscreenアトリビュートのオン/オフ(そしてメニューバーの非表示/表示)を切り替えることのできる機能を用意してあります。


スペースバーを使ってウィンドウをフルスクリーン表示に切り替えます

・スペースバーを利用して、フルスクリーンのオン/オフを切り替えてみて下さい。

・より抽象的なビジュアルイフェクトを得るために、colorswatch.pictイメージをパッチの上部にある jit.matrixに読込んで、他のプリセットを試してみて下さい。

このチュートリアルでは、提示される効果(イフェクト)が見やすいように、ソース素材として静止画を使いましたが、l基本となる素材としてビデオ(jit.qt.movieまたは他のビデオソース)を使うことができないわけではありません。(このパッチの中身を新しいパッチャーウィンドウにコピーし、パッチの左上の部分を加工していろいろ試してみたいとお思いかもしれませんね。)


まとめ

マトリクスのデータを取り出したり、再配置したりする方法はいくつかあります。jit.matrixのdimアトリビュートはマトリクスの実際の(各次元の)大きさやサイズを設定します。jit.matrixのusesrcdim及びusedstdimアトリビュートをオンにすると、入力及び出力マトリクス(これらはマトリクスの「ソース」及び「ディスティネーション」領域と呼ばれます)の特定の一部分を使用するようにjit.matrixに指示することができます。これらの領域のセルの境界は(ソース領域の境界の最初と最後のセルをセットするためには)srcdimstart及びsrcdimendアトリビュート、(ディスティネーション領域の場合には)dstdimstart及びdstdimendアトリビュートによって指定します。これらのアトリビュートはマトリクスの実際のサイズを変更するものではありませんが、(usesrcdim及びusedstdimがオンの場合)入力マトリクスのどの部分が、出力マトリクスのどの部分に渡されるかを指定します。ソース領域とディスティネーション領域が異なる形またはサイズである場合、jit.matrixはソース領域を拡大または縮小し、ディスティネーション領域にちょうど収まるようにします。この結果、データは複製されたり失われたりしますが、これによって、面白い引き延ばしやピクセレーション効果を与えることができます。ソース及びディスティネーション領域をMaxパッチの他の箇所から提供される数値によって動的に変化させ、インタラクティブな、或いはオートメーション(自動処理)によるイメージのサイズ、形、位置の加工を行うことができます。

interpアトリビュートがオンになっているとき、jit.matrixはディスティネーション領域がソース領域より大きい場合に値と値の間の補間(中間値の生成)を行います。これによってピクセレーション効果は滑らかにされ、隣接したセルの値の変化をぼやけさせます。

jit.windowオブジェクトは受け取ったマトリクスのサイズに関わらず、rectアトリビュートで指定されたどのような長方形のディスプレイ領域にでも表示することができます。入力されたマトリクスのサイズが表示領域と異なる場合、イメージはjit.windowによって拡大、縮小されたり、歪められたりします。これもまた、引き延ばし及びピクセレーション効果として利用できます。jit.windowもまたinterpアトリビュートを持っていて、これがオンの時にはイメージの拡大や引き延ばしによって生じるピクセレーションの平滑化を行います。

jit.windowのfullscreenアトリビュートをオンにしてイメージをスクリーン全体に表示することができ、さらに、;max hidemenubar メッセージによってメニューバーを非表示にできます。(パッチャーウィンドウを再びもとの状態にもどす手段がユーザ自身に任されていることを忘れないようにして下さい)。

ここでは、引き延ばし、ディストーション、ブラ−、ピクセレーション(画素化)といったビジュアルイフェクト(視覚効果)を作り出すために、マトリクスデータのサイズ変更、再配置、反転、補間を行うテクニックをご紹介しました。