![]() |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Processingは電子メディアより実現されるコンセプチュアルな空間を作り出す環境である。 Processingは電子的な芸術作品を作成する過程を通じてコンピュータプログラミングの基礎を学ぶための環境であり、 またアイディアを描き試すためのスケッチブックでもある。 Processingはインタラクティブな画像マルチメディアのプログラミング環境として有名なJAVAを使用している。 システムはブラウザに埋め込まれたJAVAアプレットのようにWEB上で動作する作品を出力することができる。 また、このシステムは、本来のJAVAと教育を目的としたグラフィックプログラミング環境とのギャップを埋める架け橋となるべく設計されており、 ProcessingはJAVA等の練習台としても使用できる。www.Proce55ing.net このチュートリアルの目標はProcessingという環境をMacromedia FlashとDirectorの利用者に紹介することである。 Macromedia社の製品より得た知識は、Processingに必要なものに応じて分割すれば簡単に真似ることが出来るはずであると考える。 その際ユーザはMacromedia製品に関する基本的な理解が必要となる。 しかしこのチュートリアルを読み終えるころには自らが作成するProcessing(またはJAVA)の作品を創造できるようになるだろう。 また、シリアルポートやBX-24 chipを用いた通信も可能となるだろう。 索引 Introduction Obtaining the Processing Software A tour of the interface Lower Level Media Manipulation Syntax Structure Static 2D Drawing Time and Motion Mouse & Keyboard Presentation / Exporting Drawing Image Files 3D Form Pixels Typography Serial The Future |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
コンピュータによるインタラクティブデザインの教材としてFlashやDirectorが既に多く用いられている。 学生は幾何学的かつ動的な要素を含むデザインを又複雑なアルゴリズムを用いて作成するようになった。 以前ITPのある教室にて次のような実験が行われた。 DirectorLingoに取り組んでいる際一週間JAVAに関する講義を行った。 Lingo以外の言語に触れさせ、新しい言語やシステムの異なる点や見方について学ばせた。 基本となるテンプレートと簡単なリファレンスを学生らに与えプログラムを変更させた。 この一週間に及ぶJAVAの講義の後、何人かの学生はJAVAを学ぶことに関心を抱いていた。 しかし、本来大学におけるJAVAの講義はテキストコンソールを用いており、 グラフィックアプレットを対象としていない。 以下のレッスンを通してProcessingがプログラムとグラフィックデザイン間の差を乗り越える手助けとなることを期待している。 これは決してJAVAの講義の代役として学ぶことを意味してはいない。 ProcessingはJAVAの深いニュアンスを伝える以前の段階を学ぶ上でのサプリメントとして使用してもらいたい。 また、ProcessingとJAVAはMacromediaの製品ほど高レベルでは無いが、他の低レベルなシステムよりはよいプログラミングと実行環境を提供してくれる。 柔軟な考えをもつインストラクターが居れば、JAVAの講義を受講している者が提出物を作成する際にProcessingを使用できるかもしれない。 このチュートリアルはCasey ReasとBen Fryの作成したProce55inのサイトより得られた情報を筆者独自の観点よりまとめたものである。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Processingは現在開発段階ではあるが無料で配布されており、完成した後も無料配布が予定されている。 このソフトウェアは現在開発・改良の必要なALPHA段階にある。バグは直され、新たな機能が追加されている。 開発テストの協力者、又ダウンロードを希望する者は一度開発者にメールで問い合わせてもらいたい。 将来的にはProcessing websiteにてダウンロードを予定している。 またα版のテスト協力者間のメッセージボードが存在する。参加は登録制であるが、 そのコミュニティーに参加することは質問や疑問を解決する最もよい方法であるといえる。 ここでは他のユーザを含め製作者側にも直接声を投げかけることが出来る。 方法としてはProcessingのサイトにてDiscourseを選び登録してもらいたい. Processingとそのサイトは定期的に更新されている。Referenceにて更新機能を確認してもらいたい。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Processingに関する他の環境や命令についてはProcessing Environment reference参照。
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Directorでは, キャスト(cast)にメディアの読込み又は作成を行い、 次にステージ(stage) と呼ばれる画面部にスプライト(sprite)を生成・配置する。 Flashではライブラリ(library)にメディアの読込み又は作成を行い、 Directorと同じようなステージにムービークリップ(movieclips)としてインスタンス化する。 一方のProcessing(そしてJAVA)においてメディアの読み込みはコードにより既に終了しており、 これはHTMLの働きと似ている。さらにどのようなメディアであれ(ベクターシステム, DNAデータ, フィルムからのカラーサンプル, Fargo)JAVA言語の一部として埋め込まれている。 その結果外部からの画像や音等を1つのファイルにまとめることが何の制限も無しに実現できる。 何故なら画像のピクセルもプログラムコードの一部として変換され、 音データも巨大なデータ配列として格納されるためである。 ライブラリやキャストをもつことの利点としてフォーマット時の制御の良さ、 順序良くディスク(メモリ)の空き領域に保存できる等が挙げられる。 またスプライトやムービークリップを持つ利点として視覚的であること、 スクリーン上に見える物体であるため簡単にボタン、ゲームのキャラクタ、 独立したグラフィック素材を作成することが可能であること、視覚的に制御可能かつ明確な空間上の素材等が挙げられる。 Processingでは複雑なレイヤーは実現されておらず、基本的な描画ルーチンとマウス、キーボード、 シリアルポート接続によるイベントのみを提供している。 入力と時間の調整により、ある1シーンを繰り返し描画することもできる。 問題としては自らが個々のスプライトやムービークリップを描かなくてはならないが、 Processingでは必要とされていない。 他の方法を発明することはアーティストとして便利なものを作ることになる。 更によくスポットを当てるMacromedia社の関連物に対して芸術的に深い変化を生じる機会を与える。 この先のセクションではまずスクリーンに画像を描画する方法を、 次に時間とアニメーションについて、最後にマウス、キーボード、シリアルポートを用いたインタラクションについて紹介していく。 世の中にはユーザの行う作業を順に創造してくれるを高度なソフトウェアがあるが、 それらの作業を自らが組み立てていくことを頭におけば、JAVAを用いて作業することもすぐに受け入れることができるだろう。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
またJAVAの変数については次に示す。
Flashユーザへ:Processingには変数(var)という概念が無い。
条件分岐における比較部分の記述方法がLingoと若干異なる。Processingのプログラムは一つの''=''を変数の値を代入する際に使用する。
また、二つの''==''を双方の値を比較して同じ値か否かを調べる際に使用する。このとき同じ値ではないという記号は
''<>''ではなく''!=''と記載されることに注意してほしい。その他の比較記号(''<'',''>'',''<='',''>='')の使用方法
はLingoと同様である。比較条件に関する詳細情報は
consult
the authorityを参照すること。
Lingoユーザへ:このプログラムは''repeat with i = 0 to 4''と同じ意味を持つ。
()の中身は三つの特別な構文がセミコロンで分けられて並んでいる。一つ目の構文は一時的な変数を作成。
二つ目の構文は何度繰り返し処理を行うかの状態を定める。変数iが5を超えた大きな数値となった後に繰り返し処理が終了する。三つ目の構文はiの変化量を定めることができる。''i++''は''i = i + 1''の省略した形である。
JAVAを提供するSunならば
繰り返し文に関するさらに多くの知識を与えてくれる。
If you are
この現象について興味のある者はJAVAチュートリアル内に記述されている
the
part about flow-controlについてを参照するとよい。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
次にこのコードを行ごとにわけて解説していく。
次に組み立て式の形を紹介する。
triangle関数
は三つの頂点を持つ図形を描く。これには六つのパラメータがあり、
パラメータ1,2は一番目の頂点のx-y座標、パラメータ3,4は二番目の頂点のx-y座標、
パラメータ5,6は三番目の頂点のx-y座標を示す。
noFill関数を使用すれば図形の中を塗りつぶさない線分のみのアウトライン図形を描くことが出来る。
また、これと同様にstrokeにもnoStroke関数が存在する。noStroke関数は図形のアウトラインを無くした状態の図形を描画できる。
凸面多角形の作品例またそれらのプログラムはサイト内に展示してあるものを見てもらいたい。
ベクター描画に関しての詳細はProcessing Form Examples、Processing Shape referenceを参照してもらいたい。 ここに紹介した以外の描画方法もProcessingに用意されているが、次にインタラクティブアクションやアニメーションの作成方法について説明する。 その後に残りの描画方法について解説する。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Directorにおいてはスコアが存在し、頭出しや先送りを行いコマを補完していく。 ビデオ、FlashSWF, QTVRsや音はそれぞれの時間軸を持つ。更なる動的なアニメーション 作成に取り組む場合、一つのフレームとコードをExitFrameやPrepareFrameイベントで 使用する可能性もある。 Flashではタイムラインが与えられ、Directorよりも更に複雑な制御が可能である。 通常ActionScriptを用いて作業する場合、ユーザは二つのフレームを使用する。一つは繰り返されるフレームを 呼ぶセット用、もう一つは永久にループさせるためのものである。 更にActionScriptはonClipEventなるマウス操作に対応する関数も存在する。 しかし、Processingにはタイムラインもスコアも補完機能も無いため、 LingoやActionScriptのようなスクリプトとなるコードをユーザが構築しなければならない。 Processingは連続するフレームに応答するユーザ独自の関数を取り扱うことが出来る。 今まで解説してきたものはBasic Modeと呼ばれる段階である。 このモードは静的な画像を描くためのもので単に順序立てて並べていくに過ぎない。 Processingにはbasic, standard, そしてadvancedからなる三つのモードが存在する。 advancedモードは通常のJAVAであり、JAVA熟練者用である。 時間と動作を実現する上で、次のステップであるstandardモードに移行する。 ここに簡単な例を示す:
setup関数に囲まれた部分はプログラムの開始後一度だけ実行される。 loop関数に囲まれた部分はプログラムが終了するまで永久に繰り返される。 setup関数はLingoのbeginSpriteやstartMovieに、またloop関数はExitFrameやPrepareFrameに似ている。 Flashにおいてsetup関数は実行後一度しか動作しない最初のアニメーションフレームに似ている。 setup, loopは共に関数である。また、複雑な関数を集約したり組織化するような ユーザ独自の関数を作成することも出来る。 JAVAで新しい関数を作成する際の情報源としてはSunのJAVAチュートリアルを参照すること。 初めの関数を記載したとたんにProcessingのモードはstandardモードに移行する。 関数でまとめられた部分以外に何かを記載しても、変数宣言以外の構文は実行ボタンを押した際は無視される。 コードはsetup関数、もしくはloop関数の中に入れること。 グローバル変数を必要とする場合、両関数の間では無くプログラムの先頭に記述すること。 例に用いたコードではxがグローバル変数として定義されている。 Processingにおいてはframerate(n)関数がスケッチ全体の動作スピードを調節するのに利用できる。 しかし、ものをそれぞれ異なるスピードで動かすことも変数の変動具合により調節できる。 一方で小数値を用いてわずかな変化を生じさせることも可能である。 更に長い期間や微小な時間制御のために、Processingでは日付や時間等へのアクセスも可能である。 Processingにはコンピュータより得られる日付けや時間を取得する様々な方法が存在する。 year関数 // 現在の西暦を返す(i.e. 2002, 2003, etc.) month関数 // 現在の月を返す(1..12) day関数 // 現在の日にちを返す(1..31) hour関数 // 現在の時数を返す(0..23) minute関数 // 現在の分数を返す(0..59) second関数 // 現在の秒数を返す(0..59) 特殊な関数でmillis関数がある。これはアプレット開始後のミリ秒(1000分の1秒)を返す。 主にアニメーションのタイミングを計る際に使用する。 millis( ) // アプレット開始後のミリ秒(1000分の1秒)を返す。 It is 更に遅延関数を用いることによりアプレットを待機させることも可能である。 delay関数を用いてフレームの動作を遅延させることが出来る。 delay(40); // takes a nap for 40 milliseconds
これは良い例とは言えないが、簡単に理解することが出来る。更に複雑な例については次の作品を見ることを 推奨する。時計、 by Mescobosa、Milliseconds、 by REASまた、アニメーション動作のためのサンプルも挙げておく。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
マウスとキーボードを利用する場合、FlashやDirectorとの違いは少ない。 Lingoではマウスは''the mouseLoc'', ''the mouseH'', そして''the mouseV''というコマンドで状態を得る。 更にon mouseDownイベントハンドラでマウスのクリック等も認識できる。 FlashではonClipEventが存在し、これもマウスの状態や座標を得ることが出来る。 これらに対しProcessingではマウスがクリックされる度にmousePressed関数を呼び出され、 マウスボタンを離す度にmouseReleased関数が呼び出される。 そのためマウスの動作に対して何かをさせたい場合はloop関数同様に、動作を関数の中に組み込めば良い。
マウスに関する命令の詳細情報はProcessing Mouse referenceに、また、興味深いサンプル集のチェックも忘れずに。 キーボード入力についてはDirectorやFlashと全くかわらない。
またキーボード入力はイベントハンドル用関数としても利用できる。
キーボード入力に関する機能についてはProcessing Keyboard referenceを参照、また、興味深いサンプル集のチェックも忘れずに。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Processing Folder/ sketchbook/ default/ your_sketch_name/ applet/ your_sketch_name.java your_sketch_name.class your_sketch_name.jar index.html ScreenGrab( ) また、先ほどとは逆に出力先をインタラクティブな動作の無い形式にすることも可能である。 screenGrab関数を移用することにより表示されている画面を.tif形式にすることができる。 loop関数の末尾にこの関数を配置することによりスクリーン上のイメージを保存する。 この関数は複数回呼ばれた際は次のような画像の連鎖を生成する。 (screen-0001, screen-0002, ...)これらは簡単にQuicktimeや他のビデオプログラムに移し Processingの生きたドキュメントとして動作させることも出来る。 しかし未だProcessingの画像保存関数は簡単なものである。将来的には他のフォーマットでも 出力できるように開発を進める。ここに一例としてAdobe Illustrator形式で出力するものがある。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
ユーザがtwombly.jpgを以下の場所にコピー終えるとコードを打ち込む準備が出来る。:
Bimageは事項されているファイルを描き終わるまで保持するオブジェクトである。
bはこの画像につけた適当な名前である。そしてimage関数が実際に画像をスクリーンに描画する。
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
vertex(x, y, z); line(x1, y1, z1, x2, y2, z2); bezierVertex(x, y, z); curveVertex(x, y, z); ![]() box(size); box(width, height, depth); sphere(size);
注意しなければならないのはbox関数やsphere関数はその配置位置を指定するのでは無く、 動かす際はtranslate関数やrotate関数を使用する必要があると言うことである。 更にscale関数、対になっているpush,pop関数が 移動させた情報等をきれいに整頓し記録してくれる。上手な描画方法についてはProcessing Transform Reference、Processing Transform Examplesを参考にして欲しい。 一方でこれらの方法を利用しない3Dの描画方法も存在する。 これのついてはalways a solutionを参考にしてもらいたい。 また、lights関数とnoLights関数にも注意してもらいたい。light関数を使用することにより3Dをシェーディングした 状態を得ることが出来る。光源の詳細については Processing Lights Referenceを参照すること。 "何?3Dについてはこれだけで終わり!?" と思われるかもしれないが、3Dに対するプログラムは現在はこれだけである。将来的にはより多くの機能も期待できるだろう。 しかし今現在あるだけの機能でここまで素晴らしい作品をつくり出すことも出来ることを知ってもらいたい。 Processing Software. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ピクセル毎に操作を行うことはFlashでは難しい処理であった。 同操作を可能とする機能SetPixelとGetPixelが最近Directorに追加されたばかりである。 しかしながら、このDirectorの低速なアドレッシングシステムに向かうのは難しいとも考えられる。 ITPの学生はDanny Rozin氏の講義であるThe World - Pixel by Pixelを受講し、プログラムを Cを用いて作成し始めた。なぜならそれがLingoやMAXと言う選択肢よりも彼等の概念を完成させる 最も高速な言語であると判明したためである。ITPの学生はDannyのC言語の講義を受講するようになった。 Processingにおいてピクセルを扱う場合、Lingoを使用するよりもCのほうが遥かに簡易かつ 処理が高速であった。しかしその早さはJAVAには遠く及ばなかった。 getPixel(x, y); // Returns an integer setPixel(x, y, color); pixels[index]; // Array containing the display window
ピクセルを制御する際ユーザは独自の関数を作成することも出来る。詳細は transparencyを参照すること。 ピクセルの操作を行うサンプルとしてはProcessing Image reference、Processing Image Examplesを参照にするのも良い。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Processingの文字レンダリングシステムは主に特有のフォントファイルフォーマットを利用している。 開発者はよりフレキシブルで自由にカスタマイズできるシステムを目指していた。 以前は開発スタッフのプログラマの用意と選ぶべき豊富なフォントの用意をしていた。 ここに利用できるフォントの一覧が設置してある。 これらのイメージはすべてビットマップ形式で保存されている。ここにテキストをスケッチに 描画するとても簡単な方法がある。まずはエラーを覚悟した上で実行してもらいたい。
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
シリアルポートを通じてコンピュータは手動操作される機械装置とコミュニケーションをとることができる。 エレクトロニックアートの世界ではシリアルポートを利用しデバイスを利用することが知られている。 Directorにおいても中継装置を用いれば可能である。 しかしFlashではこのようなシリアルポートに関するサポートはなく、中継装置となるプラグインも存在しない。 これらに対しProcessingはシリアルポートを使用できる環境が組み込まれている。 以下の例では回転可能なつまみとProcessingスケッチとが相互に作用する。 注意として、このセクションは前のセクションに対して基礎的な電気回路の知識が必要となる。 回路としてはBX-24, ITPにて又他の似たような場所でよく利用されているプロトタイプ集積回路を使用する。BX-24の設定に関する情報については Tom Igoe's Physical Computing reference、ITPの講義''Physical Computing''で使用されたlab assignmentsを参照すること。
Processingではインターフェイス上のSketch -> Serial Portサブメニューを選び、 どのシリアルポートを使用するかの選択を行う。
シリアルに関する詳細についてはProcessing serial referenceを参照すること。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Original tutorial : last updated October 31, 2005 日本語チュートリアル : last updated October 31, 2005 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||