SlideShare a Scribd company logo
1 
Graphics with Processing 
2013-05 複雑な図形の描画 
http://vilab.org 
塩澤秀和
2006-2013 H. SHIOZAWA http://vilab.org 
2 
5.1 頂点列による図形描画 
複雑な図形描画 
 beginShape(図形) 
 頂点列モードの開始 
 図形が空欄なら頂点を線で結ぶ 
(折れ線か多角形になる) 
 その他,下記図形を指定できる 
POINTS, LINES, 
TRIANGLES, 
TRIANGLE_FAN, 
TRIANGLE_STRIP, 
QUADS, QUAD_STRIP 
 endShape() 
 頂点列モードの終了 
 endShape(CLOSE): 最初の 
点と最後の点を結ぶ線を描く 
 塗りつぶし 
 fill()とnoFill()で指定できる 
頂点の追加 
 vertex(x, y) 
 図形に次の頂点を加える 
 色は頂点の前にstrokeで指定 
 curveVertex(x, y) 
 曲線でつなぐ頂点を追加する 
 bezierVertex(x1, y1, x2, 
y2, x3, y3) 
 ベジエ曲線をつなげる 
例(塗りつぶさない多角形) 
noFill(); 
beginShape(); 
vertex(30, 20); vertex(30, 75); 
vertex(50, 75); vertex(50, 20); 
endShape(CLOSE);
2006-2013 H. SHIOZAWA http://vilab.org 
3 
5.2 図形の回転・拡大(予習) 
基本的な書きかた 
簡単な意味 
 pushMatrix()~popMatrix() 
 座標の変更部分を囲む 
 translate(x, y) 
 座標原点(回転・拡大の中心)を 
(x, y)に移動する 
 rotate(a) 
 原点を中心に,aラジアン回転 
 scale(s), scale(sx, sy) 
 原点を中心に,拡大または縮小 
図形の回転の例 
int angle = 0; 
void setup() { 
size(400, 400); 
rectMode(CENTER); 
} 
void draw() { 
background(255); 
fill(#ffa0a0); 
pushMatrix(); 
translate(width/2, height/2); 
rotate(radians(angle)); 
ellipse(0, 0, 200, 100); 
popMatrix(); 
angle++; 
} 
pushMatrix(); 
translate(x, y); 
rotate(a); 
/* (x,y)からの相対位置で描画*/ 
popMatrix(); 
新しい 
原点 
(0, 0)は新しい 
原点の位置
2006-2013 H. SHIOZAWA http://vilab.org 
4 
5.3 タイポグラフィ(文字表示) 
// 描画用フォントの変数(PFont型) 
PFont font1, font2; 
void setup() { 
size(300, 300); 
// Processing用フォント 
// (フォントファイルはあらかじめメニューの 
// Tools→Create Font... で作っておく) 
font1 = loadFont("Impact-48.vlw"); 
// JavaまたはOSのフォント名のフォント 
// (バージョン1では下の行が必要) 
// hint(ENABLE_NATIVE_FONTS); 
font2 = createFont("メイリオ", 48); 
// 座標指定モード(通常はMODEL) 
textMode(MODEL); 
} 
void draw() { 
background(255); 
// xy方向の位置あわせ方法 
textAlign(CENTER, BOTTOM); 
pushMatrix(); 
translate(width/2, height/2); 
rotate(radians(frameCount)); 
fill(128, 0, 0); // 文字の色 
textFont(font1, 32); // フォントとサイズ 
text("Processing", 0, 0); // 文字列と座標 
fill(0, 0, 128); 
textFont(font2, 48); 
text("角度" + frameCount, 0, 100); 
popMatrix(); 
}
2006-2013 H. SHIOZAWA http://vilab.org 
5 
5.4 対話的入力処理 
システム変数 
 mouseX, mouseY 
 mousePressed 
 既出 
 pmouseX, pmouseY 
 前フレームでのマウス位置 
 mouseButton 
 押されたマウスボタン 
 LEFT, RIGHT, CENTER 
 keyPressed 
 キーが押されていればtrue 
 key 
 押された文字 
 keyCode 
 特殊キーのキーコード 
コールバック関数 
 void mousePressed() 
 この関数があると,マウスボタン 
が押されたときに自動的に実行 
 void mouseReleased() 
 同様に,ボタンが離されたとき 
 void mouseMoved() 
 マウスが動かされたとき(ただし, 
ボタンは押されていないとき) 
 void mouseDragged() 
 マウスがドラッグされたとき 
 void keyPressed() 
 キーが押されたとき 
 void keyReleased() 
 キーが離されたとき
2006-2013 H. SHIOZAWA http://vilab.org 
6 
5.5 ファイル入出力 
簡易ファイル入出力 
 loadStrings("ファイル") 
 ファイルから1行ごとに文字列と 
して読み出して配列に入れる 
 画像と同様, ファイルは事前に 
Sketch → Add File…でデー 
タフォルダにコピーしておく 
 saveStrings("ファイル", 配列) 
 ファイルに文字列を保存 
 loadStringsの逆(行単位) 
文字列処理 
 float(文字列), int(文字列) 
 文字列を数値に変換 
 str(数値) 
 数値を文字列に変換 
 hex(整数) 
 整数を16進文字列に変換 
 unhex(文字列) 
 16進文字列を数値に変換 
 trim(文字列) 
 文字列から前後の空白を除去 
 join(文字列配列) 
 文字列の連結 
 split(文字列) 
 文字列を空白で分割(joinの逆) 
String lines[] = 
loadStrings("data.txt"); 
for (int i = 0; i < lines.length; 
i++) { 
// lines[i]の処理 
}
5.6 ファイル処理の例 
// データファイルの形式: 
// -100〜100の数値を1行に1ずつ入れる 
float[] data; 
void setup() { 
size(400, 200); noLoop(); 
stroke(100); fill(255); 
rectMode(CORNER); 
} 
void draw() { 
background(200); 
line(0, height/2, width, height/2); 
if (data == null) return; 
int w = width / data.length; 
for (int i = 0; i < data.length; i++) { 
rect(w * i + w/2, height/2, 
w, -data[i]); 
} 
} 
void mouseClicked() { 
// ファイル選択ダイアログを開く 
selectInput("Open", "fileSelected"); 
} 
//ファイル選択後の処理 
void fileSelected(File file) { 
if (file == null) 
println("File not found. "); 
else 
loadData(file.getAbsolutePath()); 
} 
void loadData(String fname) { 
String[] lines = loadStrings(fname); 
data = new float[lines.length]; 
for (int i = 0; i < lines.length; i++) 
data[i] = float(lines[i]); 
redraw(); 
} 
2006-2013 H. SHIOZAWA http://vilab.org 
7
5.7 拡張ライブラリ 
動画再生/カメラ利用 
 videoパッケージ 
 import processing.video.*; 
 動画再生 
 Movieクラスを使用 
 Examples→video→Movie 
 ビデオキャプチャ 
 Captureのクラスを使用 
 Examples→video→Capture 
ネットワーク 
 netパッケージ 
 import processing.net.*; 
 TCP接続による通信 
 クライアント/サーバ方式 
 Clientクラス& Serverクラス 
 Examples → net 
2006-2013 H. SHIOZAWA http://vilab.org 
サウンド/音楽再生 
 minimパッケージ 
 import ddf.minim.*; 
 まずMinimオブジェクトを作成 
 サウンド再生 
 AudioPlayerクラスを使用 
 周波数解析や,映像との同期の 
ための再生位置の取得も可能 
 Examples → minim 
その他のライブラリ 
 付属ライブラリ 
 シリアル通信,出力結果のPDF 
およびDXFでの書き出し 
 ライブラリの追加(ver2以降) 
 Sketch → Import Library → 
Add Library 
8
2006-2013 H. SHIOZAWA http://vilab.org 
9 
5.8 演習課題 
課題 
 マウスでクリックした点の座標を 
順に結ぶ“折れ線”を描くプログ 
ラムを作成しなさい 
 条件: beginShape() を使って 
折れ線を書くこと 
 beginShapeとendShapeは, 
ループの中に入れない 
 右のプログラム(部分)を参考に 
して改造するとよい 
 できた人は,ファイルから頂点列 
を読み込めるようにしてみなさい 
注意!! 
 見やすいプログラムを提出せよ 
 Edit → Auto Format でプロ 
グラムを整形できる(かも…) 
int npos = 0; // 点の数 
int x[] = new int[100]; 
int y[] = new int[100]; 
void setup() { 
// 途中省略 
noLoop(); // アニメーション停止 
} 
void draw() { 
background(0); 
// ここにbeginShape 
for (int i = 0; i < npos; i++) { 
// 下の行を削除して変更 
ellipse(x[i], y[i], 10, 10); 
} 
// ここにendShape 
} 
void mousePressed() { 
x[npos] = mouseX; 
y[npos] = mouseY; 
npos++; 
redraw(); // 点が増えたら再描画 
}

More Related Content

What's hot

Processingによるプログラミング入門 第4回
Processingによるプログラミング入門 第4回Processingによるプログラミング入門 第4回
Processingによるプログラミング入門 第4回
Ryo Suzuki
 
Rの初歩: 6. グラフィックス
Rの初歩:  6. グラフィックスRの初歩:  6. グラフィックス
Rの初歩: 6. グラフィックス
Teiko Suzuki
 
Processingによるプログラミング入門 第2回
Processingによるプログラミング入門 第2回Processingによるプログラミング入門 第2回
Processingによるプログラミング入門 第2回
Ryo Suzuki
 
The boolean operation for Cubic Bezier
The boolean operation for Cubic BezierThe boolean operation for Cubic Bezier
The boolean operation for Cubic Bezier
mikanplus
 
CG2013 08
CG2013 08CG2013 08
CG2013 08
shiozawa_h
 
【Unity道場スペシャル 2017博多】クォータニオン完全マスター
【Unity道場スペシャル 2017博多】クォータニオン完全マスター【Unity道場スペシャル 2017博多】クォータニオン完全マスター
【Unity道場スペシャル 2017博多】クォータニオン完全マスター
Unity Technologies Japan K.K.
 
CG2013 12
CG2013 12CG2013 12
CG2013 12
shiozawa_h
 
CG2013 09
CG2013 09CG2013 09
CG2013 09
shiozawa_h
 
【Unity道場】ゲーム制作に使う数学を学習しよう
【Unity道場】ゲーム制作に使う数学を学習しよう【Unity道場】ゲーム制作に使う数学を学習しよう
【Unity道場】ゲーム制作に使う数学を学習しよう
Unity Technologies Japan K.K.
 
【Unite Tokyo 2018】誘導ミサイル完全マスター
【Unite Tokyo 2018】誘導ミサイル完全マスター【Unite Tokyo 2018】誘導ミサイル完全マスター
【Unite Tokyo 2018】誘導ミサイル完全マスター
Unity Technologies Japan K.K.
 
x86x64 SSE4.2 POPCNT
x86x64 SSE4.2 POPCNTx86x64 SSE4.2 POPCNT
x86x64 SSE4.2 POPCNT
takesako
 
3次元図形をSchemeで造ろう!
3次元図形をSchemeで造ろう!3次元図形をSchemeで造ろう!
3次元図形をSchemeで造ろう!
vi-iv
 
論理指向とプログラミング2010年度秋学期第9回
論理指向とプログラミング2010年度秋学期第9回論理指向とプログラミング2010年度秋学期第9回
論理指向とプログラミング2010年度秋学期第9回Noritada Shimizu
 
【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計
【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計
【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計
UnityTechnologiesJapan002
 
プログラムを高速化する話
プログラムを高速化する話プログラムを高速化する話
プログラムを高速化する話
京大 マイコンクラブ
 
Popcntによるハミング距離計算
Popcntによるハミング距離計算Popcntによるハミング距離計算
Popcntによるハミング距離計算
Norishige Fukushima
 
関数の近似方法(MATLAB)
関数の近似方法(MATLAB)関数の近似方法(MATLAB)
関数の近似方法(MATLAB)
Tsuyoshi Horigome
 
数列で学ぶ初めての CommonLisp #fibonacci
数列で学ぶ初めての CommonLisp #fibonacci数列で学ぶ初めての CommonLisp #fibonacci
数列で学ぶ初めての CommonLisp #fibonacci
pgf2alpha
 
20150725 オープンキャンパス資料
20150725 オープンキャンパス資料20150725 オープンキャンパス資料
20150725 オープンキャンパス資料
Takeo Kunishima
 

What's hot (20)

Processingによるプログラミング入門 第4回
Processingによるプログラミング入門 第4回Processingによるプログラミング入門 第4回
Processingによるプログラミング入門 第4回
 
Rの初歩: 6. グラフィックス
Rの初歩:  6. グラフィックスRの初歩:  6. グラフィックス
Rの初歩: 6. グラフィックス
 
Processingによるプログラミング入門 第2回
Processingによるプログラミング入門 第2回Processingによるプログラミング入門 第2回
Processingによるプログラミング入門 第2回
 
The boolean operation for Cubic Bezier
The boolean operation for Cubic BezierThe boolean operation for Cubic Bezier
The boolean operation for Cubic Bezier
 
CG2013 08
CG2013 08CG2013 08
CG2013 08
 
【Unity道場スペシャル 2017博多】クォータニオン完全マスター
【Unity道場スペシャル 2017博多】クォータニオン完全マスター【Unity道場スペシャル 2017博多】クォータニオン完全マスター
【Unity道場スペシャル 2017博多】クォータニオン完全マスター
 
CG2013 12
CG2013 12CG2013 12
CG2013 12
 
CG2013 09
CG2013 09CG2013 09
CG2013 09
 
【Unity道場】ゲーム制作に使う数学を学習しよう
【Unity道場】ゲーム制作に使う数学を学習しよう【Unity道場】ゲーム制作に使う数学を学習しよう
【Unity道場】ゲーム制作に使う数学を学習しよう
 
【Unite Tokyo 2018】誘導ミサイル完全マスター
【Unite Tokyo 2018】誘導ミサイル完全マスター【Unite Tokyo 2018】誘導ミサイル完全マスター
【Unite Tokyo 2018】誘導ミサイル完全マスター
 
x86x64 SSE4.2 POPCNT
x86x64 SSE4.2 POPCNTx86x64 SSE4.2 POPCNT
x86x64 SSE4.2 POPCNT
 
3次元図形をSchemeで造ろう!
3次元図形をSchemeで造ろう!3次元図形をSchemeで造ろう!
3次元図形をSchemeで造ろう!
 
Ssaw08 0916
Ssaw08 0916Ssaw08 0916
Ssaw08 0916
 
論理指向とプログラミング2010年度秋学期第9回
論理指向とプログラミング2010年度秋学期第9回論理指向とプログラミング2010年度秋学期第9回
論理指向とプログラミング2010年度秋学期第9回
 
【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計
【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計
【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計
 
プログラムを高速化する話
プログラムを高速化する話プログラムを高速化する話
プログラムを高速化する話
 
Popcntによるハミング距離計算
Popcntによるハミング距離計算Popcntによるハミング距離計算
Popcntによるハミング距離計算
 
関数の近似方法(MATLAB)
関数の近似方法(MATLAB)関数の近似方法(MATLAB)
関数の近似方法(MATLAB)
 
数列で学ぶ初めての CommonLisp #fibonacci
数列で学ぶ初めての CommonLisp #fibonacci数列で学ぶ初めての CommonLisp #fibonacci
数列で学ぶ初めての CommonLisp #fibonacci
 
20150725 オープンキャンパス資料
20150725 オープンキャンパス資料20150725 オープンキャンパス資料
20150725 オープンキャンパス資料
 

Similar to CG2013 05

openFrameworks Workshop in Kanazawa v001
openFrameworks Workshop in Kanazawa v001openFrameworks Workshop in Kanazawa v001
openFrameworks Workshop in Kanazawa v001
Teruaki Tsubokura
 
Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGL
Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGLMedia Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGL
Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGLAtsushi Tadokoro
 
openFrameworks基礎 たくさんの図形を動かす 静的配列と動的配列 - 芸大グラフィックスプログラミング演習B
openFrameworks基礎 たくさんの図形を動かす 静的配列と動的配列 - 芸大グラフィックスプログラミング演習BopenFrameworks基礎 たくさんの図形を動かす 静的配列と動的配列 - 芸大グラフィックスプログラミング演習B
openFrameworks基礎 たくさんの図形を動かす 静的配列と動的配列 - 芸大グラフィックスプログラミング演習BAtsushi Tadokoro
 
Processing授業テキスト
Processing授業テキストProcessing授業テキスト
Processing授業テキスト
Suzuki Junko
 
Siv3Dで楽しむゲームとメディアアート開発
Siv3Dで楽しむゲームとメディアアート開発Siv3Dで楽しむゲームとメディアアート開発
Siv3Dで楽しむゲームとメディアアート開発
Ryo Suzuki
 
TypeScript と Visual Studio Code
TypeScript と Visual Studio CodeTypeScript と Visual Studio Code
TypeScript と Visual Studio Code
Akira Inoue
 
ももち浜TECHカフェ:OpenCVとKinectで作ろう壁面タッチパネル
ももち浜TECHカフェ:OpenCVとKinectで作ろう壁面タッチパネルももち浜TECHカフェ:OpenCVとKinectで作ろう壁面タッチパネル
ももち浜TECHカフェ:OpenCVとKinectで作ろう壁面タッチパネル
Takashi Yoshinaga
 
C++でのゲームプログラミングをしたときのお話 札幌C++勉強会 #4 〜スタートゲームプログラミング〜
C++でのゲームプログラミングをしたときのお話 札幌C++勉強会 #4 〜スタートゲームプログラミング〜C++でのゲームプログラミングをしたときのお話 札幌C++勉強会 #4 〜スタートゲームプログラミング〜
C++でのゲームプログラミングをしたときのお話 札幌C++勉強会 #4 〜スタートゲームプログラミング〜
勝成 鈴江
 
2012 ce116 crowbar_snct_shirai
2012 ce116 crowbar_snct_shirai2012 ce116 crowbar_snct_shirai
2012 ce116 crowbar_snct_shirai
鈴鹿工業高等専門学校
 
板ポリだけで めちゃカッコいい グラフィックスを出す!
板ポリだけで めちゃカッコいい グラフィックスを出す!板ポリだけで めちゃカッコいい グラフィックスを出す!
板ポリだけで めちゃカッコいい グラフィックスを出す!
notargs
 
fanscala1 1 インストールとreplまで
fanscala1 1 インストールとreplまでfanscala1 1 インストールとreplまで
fanscala1 1 インストールとreplまでToshiki Shinozaki
 
Scalaの限定継続の応用と基本(改訂版)
Scalaの限定継続の応用と基本(改訂版)Scalaの限定継続の応用と基本(改訂版)
Scalaの限定継続の応用と基本(改訂版)
Kota Mizushima
 
Scalaの限定継続の応用と基本
Scalaの限定継続の応用と基本Scalaの限定継続の応用と基本
Scalaの限定継続の応用と基本
Kota Mizushima
 
T90 きっと怖くないmvvm & mvpvm
T90 きっと怖くないmvvm & mvpvmT90 きっと怖くないmvvm & mvpvm
T90 きっと怖くないmvvm & mvpvm伸男 伊藤
 
Javaセキュアコーディングセミナー東京第1回演習の解説
Javaセキュアコーディングセミナー東京第1回演習の解説Javaセキュアコーディングセミナー東京第1回演習の解説
Javaセキュアコーディングセミナー東京第1回演習の解説JPCERT Coordination Center
 
Canvas de shooting 制作のポイント
Canvas de shooting 制作のポイントCanvas de shooting 制作のポイント
Canvas de shooting 制作のポイントYohei Munesada
 

Similar to CG2013 05 (19)

openFrameworks Workshop in Kanazawa v001
openFrameworks Workshop in Kanazawa v001openFrameworks Workshop in Kanazawa v001
openFrameworks Workshop in Kanazawa v001
 
Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGL
Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGLMedia Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGL
Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGL
 
openFrameworks基礎 たくさんの図形を動かす 静的配列と動的配列 - 芸大グラフィックスプログラミング演習B
openFrameworks基礎 たくさんの図形を動かす 静的配列と動的配列 - 芸大グラフィックスプログラミング演習BopenFrameworks基礎 たくさんの図形を動かす 静的配列と動的配列 - 芸大グラフィックスプログラミング演習B
openFrameworks基礎 たくさんの図形を動かす 静的配列と動的配列 - 芸大グラフィックスプログラミング演習B
 
Processing授業テキスト
Processing授業テキストProcessing授業テキスト
Processing授業テキスト
 
Siv3Dで楽しむゲームとメディアアート開発
Siv3Dで楽しむゲームとメディアアート開発Siv3Dで楽しむゲームとメディアアート開発
Siv3Dで楽しむゲームとメディアアート開発
 
TypeScript と Visual Studio Code
TypeScript と Visual Studio CodeTypeScript と Visual Studio Code
TypeScript と Visual Studio Code
 
ももち浜TECHカフェ:OpenCVとKinectで作ろう壁面タッチパネル
ももち浜TECHカフェ:OpenCVとKinectで作ろう壁面タッチパネルももち浜TECHカフェ:OpenCVとKinectで作ろう壁面タッチパネル
ももち浜TECHカフェ:OpenCVとKinectで作ろう壁面タッチパネル
 
C++でのゲームプログラミングをしたときのお話 札幌C++勉強会 #4 〜スタートゲームプログラミング〜
C++でのゲームプログラミングをしたときのお話 札幌C++勉強会 #4 〜スタートゲームプログラミング〜C++でのゲームプログラミングをしたときのお話 札幌C++勉強会 #4 〜スタートゲームプログラミング〜
C++でのゲームプログラミングをしたときのお話 札幌C++勉強会 #4 〜スタートゲームプログラミング〜
 
2012 ce116 crowbar_snct_shirai
2012 ce116 crowbar_snct_shirai2012 ce116 crowbar_snct_shirai
2012 ce116 crowbar_snct_shirai
 
Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7
 
板ポリだけで めちゃカッコいい グラフィックスを出す!
板ポリだけで めちゃカッコいい グラフィックスを出す!板ポリだけで めちゃカッコいい グラフィックスを出す!
板ポリだけで めちゃカッコいい グラフィックスを出す!
 
fanscala1 1 インストールとreplまで
fanscala1 1 インストールとreplまでfanscala1 1 インストールとreplまで
fanscala1 1 インストールとreplまで
 
Processing
ProcessingProcessing
Processing
 
Scalaの限定継続の応用と基本(改訂版)
Scalaの限定継続の応用と基本(改訂版)Scalaの限定継続の応用と基本(改訂版)
Scalaの限定継続の応用と基本(改訂版)
 
Scalaの限定継続の応用と基本
Scalaの限定継続の応用と基本Scalaの限定継続の応用と基本
Scalaの限定継続の応用と基本
 
T90 きっと怖くないmvvm & mvpvm
T90 きっと怖くないmvvm & mvpvmT90 きっと怖くないmvvm & mvpvm
T90 きっと怖くないmvvm & mvpvm
 
Javaセキュアコーディングセミナー東京第1回演習の解説
Javaセキュアコーディングセミナー東京第1回演習の解説Javaセキュアコーディングセミナー東京第1回演習の解説
Javaセキュアコーディングセミナー東京第1回演習の解説
 
Canvas de shooting 制作のポイント
Canvas de shooting 制作のポイントCanvas de shooting 制作のポイント
Canvas de shooting 制作のポイント
 
boost - std - C#
boost - std - C#boost - std - C#
boost - std - C#
 

Recently uploaded

FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)
fisuda
 
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdfCO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
yamamotominami
 
受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf
受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf
受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf
ooishi1
 
Grokking Simplicity探訪
Grokking Simplicity探訪Grokking Simplicity探訪
Grokking Simplicity探訪
Yoshitaka Kawashima
 
NIST Cybersecurity Framework 2.0の変更点整理をしよう
NIST Cybersecurity Framework 2.0の変更点整理をしようNIST Cybersecurity Framework 2.0の変更点整理をしよう
NIST Cybersecurity Framework 2.0の変更点整理をしよう
You&I
 
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
You&I
 

Recently uploaded (6)

FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)
 
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdfCO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
 
受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf
受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf
受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf
 
Grokking Simplicity探訪
Grokking Simplicity探訪Grokking Simplicity探訪
Grokking Simplicity探訪
 
NIST Cybersecurity Framework 2.0の変更点整理をしよう
NIST Cybersecurity Framework 2.0の変更点整理をしようNIST Cybersecurity Framework 2.0の変更点整理をしよう
NIST Cybersecurity Framework 2.0の変更点整理をしよう
 
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
 

CG2013 05

  • 1. 1 Graphics with Processing 2013-05 複雑な図形の描画 http://vilab.org 塩澤秀和
  • 2. 2006-2013 H. SHIOZAWA http://vilab.org 2 5.1 頂点列による図形描画 複雑な図形描画  beginShape(図形)  頂点列モードの開始  図形が空欄なら頂点を線で結ぶ (折れ線か多角形になる)  その他,下記図形を指定できる POINTS, LINES, TRIANGLES, TRIANGLE_FAN, TRIANGLE_STRIP, QUADS, QUAD_STRIP  endShape()  頂点列モードの終了  endShape(CLOSE): 最初の 点と最後の点を結ぶ線を描く  塗りつぶし  fill()とnoFill()で指定できる 頂点の追加  vertex(x, y)  図形に次の頂点を加える  色は頂点の前にstrokeで指定  curveVertex(x, y)  曲線でつなぐ頂点を追加する  bezierVertex(x1, y1, x2, y2, x3, y3)  ベジエ曲線をつなげる 例(塗りつぶさない多角形) noFill(); beginShape(); vertex(30, 20); vertex(30, 75); vertex(50, 75); vertex(50, 20); endShape(CLOSE);
  • 3. 2006-2013 H. SHIOZAWA http://vilab.org 3 5.2 図形の回転・拡大(予習) 基本的な書きかた 簡単な意味  pushMatrix()~popMatrix()  座標の変更部分を囲む  translate(x, y)  座標原点(回転・拡大の中心)を (x, y)に移動する  rotate(a)  原点を中心に,aラジアン回転  scale(s), scale(sx, sy)  原点を中心に,拡大または縮小 図形の回転の例 int angle = 0; void setup() { size(400, 400); rectMode(CENTER); } void draw() { background(255); fill(#ffa0a0); pushMatrix(); translate(width/2, height/2); rotate(radians(angle)); ellipse(0, 0, 200, 100); popMatrix(); angle++; } pushMatrix(); translate(x, y); rotate(a); /* (x,y)からの相対位置で描画*/ popMatrix(); 新しい 原点 (0, 0)は新しい 原点の位置
  • 4. 2006-2013 H. SHIOZAWA http://vilab.org 4 5.3 タイポグラフィ(文字表示) // 描画用フォントの変数(PFont型) PFont font1, font2; void setup() { size(300, 300); // Processing用フォント // (フォントファイルはあらかじめメニューの // Tools→Create Font... で作っておく) font1 = loadFont("Impact-48.vlw"); // JavaまたはOSのフォント名のフォント // (バージョン1では下の行が必要) // hint(ENABLE_NATIVE_FONTS); font2 = createFont("メイリオ", 48); // 座標指定モード(通常はMODEL) textMode(MODEL); } void draw() { background(255); // xy方向の位置あわせ方法 textAlign(CENTER, BOTTOM); pushMatrix(); translate(width/2, height/2); rotate(radians(frameCount)); fill(128, 0, 0); // 文字の色 textFont(font1, 32); // フォントとサイズ text("Processing", 0, 0); // 文字列と座標 fill(0, 0, 128); textFont(font2, 48); text("角度" + frameCount, 0, 100); popMatrix(); }
  • 5. 2006-2013 H. SHIOZAWA http://vilab.org 5 5.4 対話的入力処理 システム変数  mouseX, mouseY  mousePressed  既出  pmouseX, pmouseY  前フレームでのマウス位置  mouseButton  押されたマウスボタン  LEFT, RIGHT, CENTER  keyPressed  キーが押されていればtrue  key  押された文字  keyCode  特殊キーのキーコード コールバック関数  void mousePressed()  この関数があると,マウスボタン が押されたときに自動的に実行  void mouseReleased()  同様に,ボタンが離されたとき  void mouseMoved()  マウスが動かされたとき(ただし, ボタンは押されていないとき)  void mouseDragged()  マウスがドラッグされたとき  void keyPressed()  キーが押されたとき  void keyReleased()  キーが離されたとき
  • 6. 2006-2013 H. SHIOZAWA http://vilab.org 6 5.5 ファイル入出力 簡易ファイル入出力  loadStrings("ファイル")  ファイルから1行ごとに文字列と して読み出して配列に入れる  画像と同様, ファイルは事前に Sketch → Add File…でデー タフォルダにコピーしておく  saveStrings("ファイル", 配列)  ファイルに文字列を保存  loadStringsの逆(行単位) 文字列処理  float(文字列), int(文字列)  文字列を数値に変換  str(数値)  数値を文字列に変換  hex(整数)  整数を16進文字列に変換  unhex(文字列)  16進文字列を数値に変換  trim(文字列)  文字列から前後の空白を除去  join(文字列配列)  文字列の連結  split(文字列)  文字列を空白で分割(joinの逆) String lines[] = loadStrings("data.txt"); for (int i = 0; i < lines.length; i++) { // lines[i]の処理 }
  • 7. 5.6 ファイル処理の例 // データファイルの形式: // -100〜100の数値を1行に1ずつ入れる float[] data; void setup() { size(400, 200); noLoop(); stroke(100); fill(255); rectMode(CORNER); } void draw() { background(200); line(0, height/2, width, height/2); if (data == null) return; int w = width / data.length; for (int i = 0; i < data.length; i++) { rect(w * i + w/2, height/2, w, -data[i]); } } void mouseClicked() { // ファイル選択ダイアログを開く selectInput("Open", "fileSelected"); } //ファイル選択後の処理 void fileSelected(File file) { if (file == null) println("File not found. "); else loadData(file.getAbsolutePath()); } void loadData(String fname) { String[] lines = loadStrings(fname); data = new float[lines.length]; for (int i = 0; i < lines.length; i++) data[i] = float(lines[i]); redraw(); } 2006-2013 H. SHIOZAWA http://vilab.org 7
  • 8. 5.7 拡張ライブラリ 動画再生/カメラ利用  videoパッケージ  import processing.video.*;  動画再生  Movieクラスを使用  Examples→video→Movie  ビデオキャプチャ  Captureのクラスを使用  Examples→video→Capture ネットワーク  netパッケージ  import processing.net.*;  TCP接続による通信  クライアント/サーバ方式  Clientクラス& Serverクラス  Examples → net 2006-2013 H. SHIOZAWA http://vilab.org サウンド/音楽再生  minimパッケージ  import ddf.minim.*;  まずMinimオブジェクトを作成  サウンド再生  AudioPlayerクラスを使用  周波数解析や,映像との同期の ための再生位置の取得も可能  Examples → minim その他のライブラリ  付属ライブラリ  シリアル通信,出力結果のPDF およびDXFでの書き出し  ライブラリの追加(ver2以降)  Sketch → Import Library → Add Library 8
  • 9. 2006-2013 H. SHIOZAWA http://vilab.org 9 5.8 演習課題 課題  マウスでクリックした点の座標を 順に結ぶ“折れ線”を描くプログ ラムを作成しなさい  条件: beginShape() を使って 折れ線を書くこと  beginShapeとendShapeは, ループの中に入れない  右のプログラム(部分)を参考に して改造するとよい  できた人は,ファイルから頂点列 を読み込めるようにしてみなさい 注意!!  見やすいプログラムを提出せよ  Edit → Auto Format でプロ グラムを整形できる(かも…) int npos = 0; // 点の数 int x[] = new int[100]; int y[] = new int[100]; void setup() { // 途中省略 noLoop(); // アニメーション停止 } void draw() { background(0); // ここにbeginShape for (int i = 0; i < npos; i++) { // 下の行を削除して変更 ellipse(x[i], y[i], 10, 10); } // ここにendShape } void mousePressed() { x[npos] = mouseX; y[npos] = mouseY; npos++; redraw(); // 点が増えたら再描画 }