coma Creator's session vol.2
田所 淳
1/13, 2014.
自己紹介
自己紹介
‣ 田所淳 (たどころ あつし)
‣ クリエイティブ・コーダー?
‣ 大学非常勤講師 (多摩美術大学、東京藝術大学) など
自己紹介
‣ http://yoppa.org/

screenshot_679
自己紹介
‣ 『Beyond Interaction[改訂第2版] -クリエイティブ・コーディ
ングのためのopenFrameworks実践ガイド』絶賛販売中!!

screenshot_679
今日の内容
今日の内容
‣ ライブ種明かし編!!
‣ coma discotheque ver 0.03 でのライブ
‣ http://www.youtube.com/watch?v=gbVPbc9faXw
ライブのおおまかなシステム構成
‣ だいたいこんな感じ

映像

音

openFrameworks

SuperCollider

GLSL
ライブのおおまかなシステム構成
‣ だいたいこんな感じ
!

‣ openFrameworks :
‣ 全体の構造、操作(Key, Mouse)
!

‣ GLSL :
‣ グラフィック、アニメーション
!

‣ SuperCollider :
‣ 音
ライブのおおまかなシステム構成
‣ openFrameworks + GLSL + SuperCollider
‣ それぞれの内容を、紹介していきます!!
openFrameworks
openFrameworks
‣ openFrameworks (2005 - )
‣ Processingの思想を受けつぎつつ、さらに高速化、拡張性を追
求した環境
‣ C++による実装
‣ http://www.openframeworks.cc/
openFrameworks
‣ openFrameworksを何に使用していたか?
!

‣ マウスやキーボードの入力
‣ 全体の構造 (シーンの切り替え)
openFrameworks
‣ openFrameworksを何に使用していたか?
!

‣ マウスやキーボードの入力
‣ 全体の構造 (シーンの切り替え) ← こちらの説明
openFrameworks + ofxStateMachine
openFrameworks + ofxStateMachine
‣ 今回のプロジェクトの構造
‣ 複数のシーン(状態)の間を自由に移動したい!

Scene A

Scene C

Scene B
Scene D
openFrameworks + ofxStateMachine
‣ mainApp内で、条件によって場合分け? … 面倒くさい
void testApp::update(){
switch (state) {
case 1:
// ... 状態1の処理 ... //
break;
case 2:
// ... 状態2の処理 ... //
break;
case 3:
// ... 状態3の処理 ... //
break;

}

}

// ...
openFrameworks + ofxStateMachine
‣ 便利なアドオン紹介
‣ ofxStateMachine
‣ https://github.com/neilmendoza/ofxStateMachine
openFrameworks + ofxStateMachine
‣ ofxStateMachine
‣ 有限状態機械 (finite state machine)を使用したデザインパター
ンを実装

Finite State Machine
有限状態機械…??
openFrameworks + ofxStateMachine
‣ 有限状態機械 → oFで解釈すると…
‣ 複数の状態(State)をテンプレートから生成

StateA

StateB

StateC

State
Template
openFrameworks + ofxStateMachine
‣ 有限状態機械 → oFで解釈すると…
‣ それぞれの状態(State)を相互に行き来可能

StateA

StateB

StateC
openFrameworks + ofxStateMachine
‣ 使い方は簡単!
‣ ofxState : それぞれの状態のテンプレートとなるクラス、継承
して使用する
‣ SharedData : 全てのクラスで共有するデータ

ofxState

継承

State A
State B
State C

SharedData
参照
openFrameworks + ofxStateMachine
‣ ofxStateには、ofBaseApp (つまりtestAppクラス) で定義され
ているメソッドが組込まれている
‣ setup(), update(), draw(), mouseReleased(), keyPressed() …
!

‣ つまり、一つのプロジェクトの中に、沢山のoFアプリが入って
いるような感覚でコーディング可能!!

project
ofBaseApp
ofBaseApp
ofBaseApp
openFrameworks + ofxStateMachine
‣ Stateのテンプレート
class MyState : public itg::ofxState<> {
public:
void setup();
void update();
void draw();

!
!

};

...
string getName();
openFrameworks + ofxStateMachine
‣ Stateのテンプレート
class MyState : public itg::ofxState<> {
public:
void setup();
void update();
void draw();

!
!

};

...
string getName();

← ココ重要!
openFrameworks + ofxStateMachine
‣ 各Stateは、名前を呼ぶと表示される
‣ 《Stateのインスタンス》.getName() で名前を返すようにする
‣ testAppから名前を呼ぶと、Stateが選択される

testApp

State A

state_a

State B

state_b

State C

state_c
openFrameworks + ofxStateMachine
‣ 各Stateは、名前を呼ぶと表示される
‣ 《Stateのインスタンス》.getName() で名前を返すようにする
‣ testAppから名前を呼ぶと、Stateが選択される

changeState( state_b )
testApp

State A

state_a

State B

state_b

State C

state_c
openFrameworks + ofxStateMachine
‣ 各Stateは、名前を呼ぶと表示される
‣ 《Stateのインスタンス》.getName() で名前を返すようにする
‣ testAppから名前を呼ぶと、Stateが選択される

changeState( state_b )
testApp

State A
表示

state_a

State B

state_b

State C

state_c
ofxStateMachine
Demo: コード実例でみてみる!
GLSL (Shader)
GLSL (Shader)
‣ 今回の画面の表示は、全てGLSL (OpenGL Shading Language)
をつかった
‣ とっつきずらいが、綺麗、速い!
GLSL (Shader)
‣ GLSLを試行錯誤したい!!
‣ addonを作成しました → ofxGLSLSandbox
‣ https://github.com/tado/ofxGLSLSandbox
GLSL (Shader)
‣ ofxGLSLSandbox
‣ ウリは、Live Edit機能!!
‣ プログラムを動作させながら、Shaderを書き換えできる
‣ やりかたは後で
GLSL (Shader)
‣ ofxGLSLSandbox
‣ ウリは、Live Edit機能!!
‣ プログラムを動作させながら、Shaderを書き換えできる
‣ やりかたは後で
GLSL (Shader)
‣ ofxGLSLSandboxで、Shaderを書きながら基本を学ぼう!
GLSL (Shader)
‣ まずは、基本形
uniform float time;
uniform vec2 mouse;
uniform vec2 resolution;

!

void main(void){
gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0); // Red.
}
GLSL (Shader)
‣ 真っ赤な画面になるはず
‣ gl_FlagColor → 全てのピクセルの色を指定している
‣ vec4(…); → 色を指定(RGBA)
GLSL (Shader)
‣ 上にある3つの「uniform」は何か?
‣ openFrameworksから渡されている値
!

‣ uniform float time; → 経過時間(Second)
‣ uniform vec2 mouse; → マウスの位置 (x, y)
‣ uniform vec2 resolution; → 画面の大きさ (x, y)
!

‣ 手始めに、resolutionをつかってみる
GLSL (Shader)
‣ 座標の値を利用してグラデーションをつくる
uniform float time;
uniform vec2 mouse;
uniform vec2 resolution;

!

void main(void){
float br = gl_FragCoord.x / resolution.x;
gl_FragColor = vec4(br, br, br, 1.0);
}
GLSL (Shader)
‣ x軸方向へのグラデーションになる
GLSL (Shader)
‣ gl_FragCoord → ウィンドウ上でのフラグメントの位置(x, y)
‣ gl_FragCoord.x : x方向
‣ gl_FragCoord.y : y方向
‣ gl_FragCoord.xy : 2次元平面 (vec2)
GLSL (Shader)
‣ RGBごとに別の値に
uniform float time;
uniform vec2 mouse;
uniform vec2 resolution;

!

void main(void){
vec3 color;
color.r = gl_FragCoord.x / resolution.x;
color.g = 0.2;
color.b = gl_FragCoord.y / resolution.y;
gl_FragColor = vec4(color, 1.0);
}
GLSL (Shader)
‣ カラフルなグラデーション完成!!
GLSL (Shader)
‣ 次に時間を操作してみる
‣ timeを使用
!

‣ 時間によって色の濃度を変化させるとどうなるか?
‣ 定期的な色の変化を、時間とsin関数で生成してみる
GLSL (Shader)
‣ 時間変化
uniform float time;
uniform vec2 mouse;
uniform vec2 resolution;

!

void main(void){
vec3 color;
color.r = sin(time * 1.0);
color.g = sin(time * 1.7);
color.b = sin(time * 2.3);
gl_FragColor = vec4(color, 1.0);
}
GLSL (Shader)
‣ 時間によって、色が変化していくはず!
GLSL (Shader)
‣ sin関数に、gl_FragCoord(座標) を入れるとどうなるか?
‣ 実験!!
GLSL (Shader)
‣ gl_FragCoordとSin関数
uniform float time;
uniform vec2 mouse;
uniform vec2 resolution;

!

void main(void){
vec3 color;
color.r = sin(gl_FragCoord.x / 10.0);
color.g = sin(gl_FragCoord.x / 13.0);
color.b = sin(gl_FragCoord.x / 17.0);
gl_FragColor = vec4(color, 1.0);
}
GLSL (Shader)
‣ 縞々模様に!
GLSL (Shader)
‣ さらに時間(time)を足してみる
uniform float time;
uniform vec2 mouse;
uniform vec2 resolution;

!

void main(void){
vec3 color;
color.r = sin(gl_FragCoord.x / 10.0 + time * 5.0);
color.g = sin(gl_FragCoord.x / 13.0 + time * 6.0);
color.b = sin(gl_FragCoord.x / 17.0 + time * 7.0);
gl_FragColor = vec4(color, 1.0);
}
GLSL (Shader)
‣ 縞模様が左右に動く(はず)
GLSL (Shader)
‣ 濃度ではなく、(x, y)座標にsinwaveを描いてみる
‣ ちょっと複雑…
!

‣ 少しずつやってみる
GLSL (Shader)
‣ はじめの一歩: y座標の位置で色を変化 = グラデーション
uniform float time;
uniform vec2 mouse;
uniform vec2 resolution;

!

void main(void){
vec2 pos = ( gl_FragCoord.xy / resolution.xy );
vec3 color = vec3(pos.y);
gl_FragColor = vec4(color, 1.0);
}
GLSL (Shader)
‣ グラデーション
GLSL (Shader)
‣ グラデーションのy座標を、sin関数で変化させてみる
uniform float time;
uniform vec2 mouse;
uniform vec2 resolution;

!

void main(void){
vec2 pos = ( gl_FragCoord.xy / resolution.xy );
pos.y -= 0.5;
pos.y += sin(pos.x * 10.0 + time) * 0.2;
vec3 color = vec3(pos.y);
gl_FragColor = vec4(color, 1.0);
}
GLSL (Shader)
‣ 波うつグラデーションができた
GLSL (Shader)
‣ 明度の絶対値を表示してみる

1

1

明度

明度

-1

-1
y座

y座
GLSL (Shader)
‣ 明度の絶対値を表示してみる
uniform float time;
uniform vec2 mouse;
uniform vec2 resolution;

!

void main(void){
vec2 pos = ( gl_FragCoord.xy / resolution.xy );
pos.y -= 0.5;
pos.y += sin(pos.x * 10.0 + time) * 0.2;

!
!

}

vec3 color = vec3(abs(pos.y));
gl_FragColor = vec4(color, 1.0);
GLSL (Shader)
‣ 波の形が見えてきた!!
GLSL (Shader)
‣ さらに1から引いて、乗算する

1

1

明度

明度

-1

-1
y座

y座
GLSL (Shader)
‣ さらに1から引いて、乗算する
uniform float time;
uniform vec2 mouse;
uniform vec2 resolution;

!

void main(void){
vec2 pos = ( gl_FragCoord.xy / resolution.xy );
pos.y -= 0.5;
pos.y += sin(pos.x * 10.0 + time) * 0.2;

!
!

}

vec3 color = vec3(1.0 - pow(abs(pos.y),0.2));
gl_FragColor = vec4(color, 1.0);
GLSL (Shader)
‣ きれいなSin波が描けた!!
GLSL (Shader)
‣ 色合いを工夫してみる
uniform float time;
uniform vec2 mouse;
uniform vec2 resolution;

!

void main(void){
vec2 pos = ( gl_FragCoord.xy / resolution.xy );
pos.y -= 0.5;
pos.y += sin(pos.x * 10.0 + time) * 0.2;
vec3 color = vec3(1.0 - pow(abs(pos.y),0.2));

!
!

}

gl_FragColor = vec4(color.r*0.2, color.g*0.5, color.b*1.0, 1.0);
GLSL (Shader)
‣ 自分の好みの色に!!
GLSL (Shader)
‣ さらに時間で振幅を変化させてみたり
uniform float time;
uniform vec2 mouse;
uniform vec2 resolution;

!

void main(void){
vec2 pos = ( gl_FragCoord.xy / resolution.xy );
pos.y -= 0.5;

!
!

}

pos.y += sin(pos.x * 10.0 + time) * 0.2 * sin(time);
vec3 color = vec3(1.0 - pow(abs(pos.y),0.2));
gl_FragColor = vec4(color.r*0.2, color.g*0.5, color.b*1.0, 1.0);
GLSL (Shader)
‣ 完成!!
GLSL (Shader)
‣ openFrameworksとGLSLの連携をしてみる
‣ このSin波のパラメータを、oFで生成して渡してみる
!

‣ oF側 → float array[] を生成し、setUniform1fv() で渡す
‣ GLSL側 → uniform float array[] で受ける
!

‣ oF側でランダムにパラメータ生成して、Shaderに入れてみる!
GLSL (Shader)
‣ Shader側
#include "testApp.h"

!

//波の数
static const int NUM = 20;
//Shaderへ渡す周波数の配列
float freq[NUM];

!

void testApp::setup(){
//Shaderの画面サイズ設定
width = 400;
height = 300;
fbo.allocate(width, height);
//Shaderファイルの読込み
shader.load("shader");
//ランダムに周波数の配列を生成
for (int i = 0; i < NUM; i++) {
freq[i] = ofRandom(4.0, 10.0);
}
}
GLSL (Shader)
‣ openFrameworks: testApp.cpp
#include "testApp.h"

!

//波の数
static const int NUM = 20;
//Shaderへ渡す周波数の配列
float freq[NUM];

!

void testApp::setup(){
//Shaderの画面サイズ設定
width = 400;
height = 300;
fbo.allocate(width, height);
//Shaderファイルの読込み
shader.load("shader");
//ランダムに周波数の配列を生成
for (int i = 0; i < NUM; i++) {
freq[i] = ofRandom(4.0, 10.0);
}
}
GLSL (Shader)
‣ openFrameworks: testApp.cpp
void testApp::draw(){
//Shaderパラメータ設定
float resolution[] = {width, height};
float mousePoint[] = {mouse.x, mouse.y};
float time = ofGetElapsedTimef();
//FBO開始
fbo.begin();
shader.begin();
//Shaderに渡す値(時間、解像度、マウスの位置)
shader.setUniform1f("time", time);
shader.setUniform2fv("resolution", resolution);
shader.setUniform2fv("mouse", mousePoint);
//freqの配列をShaderに渡す

!

shader.setUniform1fv("freq", freq, NUM);
//画面全体に描画する
ofRect(0, 0, ofGetWidth(), ofGetHeight());
shader.end();
fbo.end();
fbo.draw(0, ofGetHeight(), ofGetWidth(), -ofGetHeight());

}
GLSL (Shader)
‣ 折り重なる様々な周波数のSin波
SuperCollider
SuperCollider Basics

‣ Sup
SuperCollider Basics
‣ SuperColliderとは?
‣ リアルタイムな音響合成やアルゴリズミック・コンポジション
のためのプログラミング言語
‣ SmallTalkライクなオブジェクト指向言語
‣ リアルタイムに音響を生成できる → ライブコーディング!
SuperCollider Basics
‣ 1996年にJames McCartneyによりリリース
‣ James McCartneyの就職(Apple!)などの事情で、オープソース
として公開
‣ 現在は、GPLライセンスとして多くの開発者により更新されて
いる
SuperCollider Basics
‣ 参考図書:The SuperCollider Book
‣ Wilson, S., Cottle, D. and Collins, N. (eds). 2011. The
SuperCollider Book. Cambridge, MA: MIT Press
SuperCollider Basics
‣ Website: http://supercollider.sourceforge.net/
SuperCollider Basics
‣ SuperColliderをダウンロード
‣ 最新版は、version 3.6.5 (2013年10月現在)
‣ http://supercollider.sourceforge.net/downloads/
The SuperCollider Language
‣ SuperColliderの独特な文法
‣ Smalltalkのオブジェクト指向な言語構造と、C言語系の制御構
造などの機能を足したような感じ
// print "Hello world!"!
"Hello world!".postln;!
// play a mixture of an 800 Hz sine tone and pink noise!
{ SinOsc.ar(800, 0, 0.1) + PinkNoise.ar(0.01) }.play;!
// modulate a sine frequency and a noise amplitude with another sine!
// whose frequency depends on the horizontal mouse pointer position!
{ !
var x = SinOsc.ar(MouseX.kr(1, 100));!
SinOsc.ar(300 * x + 800, 0, 0.1) !
+ !
PinkNoise.ar(0.1 * x + 0.1) !
}.play;!
// list iteration: multiply the elements of a collection by their indices!
[1, 2, 5, 10, -3].collect { !
arg elem, idx;!
elem * idx;!
};!
// factorial function!
f = {!
arg x;!
if(x == 0) { 1 } { f.(x-1) * x }!
};
The SuperCollider Language
‣ 冒頭のドローン系の音を解説
‣ 楽器はこんな感じ - 1.5倍の比率でノコギリ波を重ねている
//楽器基本
SynthDef("col_closesaw", {
arg fadeTime = 10, n = 0, rq = 0.3, detune = 0.001, base = 20,
ratio = 1.5, harm = 1.5, amp = 0.2, gate=0;
var lfo, env, out;
env = EnvGen.kr(Env.new([0,1], [fadeTime], 'sine'));
lfo = SinOsc.ar(rrand(0.03, 0.05), 0, 100, 600);
out = Saw.ar([base+detune.rand, base+detune.rand]
* (ratio ** n)) * amp
+ Saw.ar([base*harm+detune.rand, base*harm+detune.rand]
* (ratio ** n)) * amp;
out = out * env;
out = RLPF.ar(out, lfo * (1.5 ** n), rq).clip2 * 0.5;
out = out * EnvGen.kr(Env.adsr(releaseTime:20), gate,
doneAction: 2);
Out.ar(0, out);
}).store;
The SuperCollider Language
‣ 演奏してみる
‣ …ちょっと味気ない
Synth("col_closesaw",["n", 1, "gate", 1]);
The SuperCollider Language
‣ エフェクトを加えてみる
‣ オールパス・フィルタを幾重にも重ねていく
!

SynthDef("col_closefx", {
arg lpf=440, rq=0.5, amp=0.8;
var in, out;
in = In.ar(0, 2);
12.do({ in = AllpassL.ar(in, 0.1, LFNoise2.kr([rrand(0.0,
0.1),rrand(0.0, 0.1)],0.01,0.06), 4.0) });
out = CompanderD.ar(in) * amp;
ReplaceOut.ar(0, out);
}).store;
The SuperCollider Language
‣ エフェクト付きで演奏してみる
‣ ぐっと深みが増した
Synth("col_closefx");
Synth("col_closesaw",["n", 0, "gate", 1]);
The SuperCollider Language
‣ どんどん倍音を足していく
‣ ある値を境に、突然非線形に歪んでドラマチックな展開へ
Synth("col_closesaw",["n",
Synth("col_closesaw",["n",
Synth("col_closesaw",["n",
Synth("col_closesaw",["n",
Synth("col_closesaw",["n",
Synth("col_closesaw",["n",
Synth("col_closesaw",["n",
Synth("col_closesaw",["n",
Synth("col_closesaw",["n",
Synth("col_closesaw",["n",
Synth("col_closesaw",["n",
...

1, "gate", 1]);
2, "gate", 1]);
3, "gate", 1]);
4, "gate", 1]);
5, "gate", 1]);
6, "gate", 1]);
7, "gate", 1]);
8, "gate", 1]);
9, "gate", 1]);
10, "gate", 1]);
11, "gate", 1]);
まとめ
まとめ
‣ 駆け足で、それぞれの要素を解説してきた

映像

音

openFrameworks

SuperCollider

GLSL
まとめ
‣ openFrameworks
‣ SuperCollider
‣ GLSL
!

‣ どれもフリーウェア
‣ ネットで調べると、情報もたくさん

SuperCollider

!

‣ 適材適所で開発環境を使い分け

GLSL
まとめ
‣ 今後も様々な情報を交換していきましょう!!

SuperCollider

GLSL

More Related Content

PDF
Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGL
PDF
メディア・アート II 第1回: ガイダンス openFrameworks入門
PDF
Media Art II 2013 第5回:openFrameworks Addonを使用する
PDF
Media Art II 2013 第6回:openFrameworks Addonを使う 2 - ofxOpenCV と ofxCv
PDF
メディア・アートII 第3回 openFrameworks基礎 OOoF : オブジェクト指向 oF
PDF
デジタルアートセミナー#2 openFrameworksで学ぶ、 クリエイティブ・コーディング Session 1: openFrameworks入門
PDF
Media Art II openFrameworks 複数のシーンの管理・切替え
PDF
Media Art II 2013 第4回:openFrameworks アニメーションを極める 動きを生みだす様々なアルゴリズム
Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGL
メディア・アート II 第1回: ガイダンス openFrameworks入門
Media Art II 2013 第5回:openFrameworks Addonを使用する
Media Art II 2013 第6回:openFrameworks Addonを使う 2 - ofxOpenCV と ofxCv
メディア・アートII 第3回 openFrameworks基礎 OOoF : オブジェクト指向 oF
デジタルアートセミナー#2 openFrameworksで学ぶ、 クリエイティブ・コーディング Session 1: openFrameworks入門
Media Art II openFrameworks 複数のシーンの管理・切替え
Media Art II 2013 第4回:openFrameworks アニメーションを極める 動きを生みだす様々なアルゴリズム

What's hot (19)

PDF
openFrameworks Workshop in Kanazawa v001
PDF
メディア・アートII 第2回 openFrameworks基礎 配列、くりかえし、乱数 ベクトルを使用したアニメーション
PDF
プログラム初級講座 - メディア芸術をはじめよう
PDF
「クリエイティブ・ミュージック・コーディング」- オーディオ・ビジュアル作品のための、オープンソースなソフトウエア・フレームワークの現状と展望
PDF
coma - creator’s talk session: Code - openFrameworks
PDF
デジタルアートセミナー#2 openFrameworksで学ぶ、 クリエイティブ・コーディング Session 2: 構造をつくる
PDF
ARコンテンツ作成勉強会:C#ではじめようOpenCV(カラートラッキング編)
PDF
デジタルアートセミナー#2 openFrameworksで学ぶ、 クリエイティブ・コーディング Session 3: アドオンを作ろう!
PDF
Interactive Music II Processingによるアニメーション
PDF
Interactive Music II ProcessingとSuperColliderの連携1
PDF
Webデザイン 第10回:HTML5実践 Three.jsで3Dプログラミング
PDF
openFrameworks基礎 たくさんの図形を動かす 静的配列と動的配列 - 芸大グラフィックスプログラミング演習B
PDF
BNN CAMP vol.3  インタラクションデザインの現在―プログラミング初心者のためのopenFrameworks入門 2
PDF
openFrameworkとCityCompilerでバーチャルとリアルを結ぶ
PPTX
UniRxことはじめ
PDF
Android上での3D(OpenGL)描画の基礎とNDKによる実践的高速化手法
PDF
Androidプログラミング初心者のためのゲームアプリ開発入門
PDF
基礎からのCode Contracts
PDF
怪しいWindowsプログラミング
openFrameworks Workshop in Kanazawa v001
メディア・アートII 第2回 openFrameworks基礎 配列、くりかえし、乱数 ベクトルを使用したアニメーション
プログラム初級講座 - メディア芸術をはじめよう
「クリエイティブ・ミュージック・コーディング」- オーディオ・ビジュアル作品のための、オープンソースなソフトウエア・フレームワークの現状と展望
coma - creator’s talk session: Code - openFrameworks
デジタルアートセミナー#2 openFrameworksで学ぶ、 クリエイティブ・コーディング Session 2: 構造をつくる
ARコンテンツ作成勉強会:C#ではじめようOpenCV(カラートラッキング編)
デジタルアートセミナー#2 openFrameworksで学ぶ、 クリエイティブ・コーディング Session 3: アドオンを作ろう!
Interactive Music II Processingによるアニメーション
Interactive Music II ProcessingとSuperColliderの連携1
Webデザイン 第10回:HTML5実践 Three.jsで3Dプログラミング
openFrameworks基礎 たくさんの図形を動かす 静的配列と動的配列 - 芸大グラフィックスプログラミング演習B
BNN CAMP vol.3  インタラクションデザインの現在―プログラミング初心者のためのopenFrameworks入門 2
openFrameworkとCityCompilerでバーチャルとリアルを結ぶ
UniRxことはじめ
Android上での3D(OpenGL)描画の基礎とNDKによる実践的高速化手法
Androidプログラミング初心者のためのゲームアプリ開発入門
基礎からのCode Contracts
怪しいWindowsプログラミング
Ad

Similar to coma Creators session vol.2 (20)

PDF
Android OpenGL HandsOn
PDF
簡単!OpenGL ES 2.0フラグメントシェーダー
PDF
【TechBuzz】第9回cocos2d-x勉強会「シェーダ書いてますか?」
PDF
PDF
FiltersでGLSLを楽しく学んじゃおう!
PDF
ng-japan 2015 TypeScript+AngularJS 1.3
ODP
こんにちはGroovy
PDF
㉑CSSでアニメーション!その2
PDF
Swiftのアプリ開発でハマったこと
PDF
EmacsとGlossでお絵描きしてみるよ
PPTX
シェーダー伝道師 第一回
PPTX
どこでも動くゲームを作るためのベタープラクティス
PPT
7 lines glsl graphics compo
PPT
Javascriptで無限ループを実現する5つの方法
PPTX
zxでシェルスクリプトから逃げよう ~javascriptでシェルを書く~
PDF
kyotolisp#1 LT3 美しいLispの書き方 (1)
KEY
Sencha study
PDF
どきっ!三行で作るランダムダンジョン!?~WEBもあるよ!~ - 2010/8/21 群馬Web研究会(勉強会)
KEY
シェーダーしよっ☆ Let's play shaders!
PDF
p5.js 授業テキスト
Android OpenGL HandsOn
簡単!OpenGL ES 2.0フラグメントシェーダー
【TechBuzz】第9回cocos2d-x勉強会「シェーダ書いてますか?」
FiltersでGLSLを楽しく学んじゃおう!
ng-japan 2015 TypeScript+AngularJS 1.3
こんにちはGroovy
㉑CSSでアニメーション!その2
Swiftのアプリ開発でハマったこと
EmacsとGlossでお絵描きしてみるよ
シェーダー伝道師 第一回
どこでも動くゲームを作るためのベタープラクティス
7 lines glsl graphics compo
Javascriptで無限ループを実現する5つの方法
zxでシェルスクリプトから逃げよう ~javascriptでシェルを書く~
kyotolisp#1 LT3 美しいLispの書き方 (1)
Sencha study
どきっ!三行で作るランダムダンジョン!?~WEBもあるよ!~ - 2010/8/21 群馬Web研究会(勉強会)
シェーダーしよっ☆ Let's play shaders!
p5.js 授業テキスト
Ad

More from Atsushi Tadokoro (20)

PDF
Interactive Music II ProcessingとSuperColliderの連携 -2
PDF
Interactive Music II Processing基本
PDF
Interactive Music II SuperCollider応用 2 - SuperColliderとPure Dataの連携
PDF
Media Art II openFrameworks アプリ間の通信とタンジブルなインターフェイス
PDF
Interactive Music II SuperCollider応用 - SuperColliderと OSC (Open Sound Control)
PDF
iTamabi 13 ARTSAT API 実践 5 - 衛星の軌道を描く
PDF
メディア芸術基礎 II 第11回:HTML5実践 表現のための様々なJavaScriptライブラリ
PDF
芸術情報演習デザイン(Web) 第8回: CSSフレームワークを使う
PDF
Interactive Music II SuperCollider応用 JITLib - ライブコーディング 2
PDF
iTamabi 13 第9回:ARTSAT API 実践 3 ジオコーディングで衛星の位置を取得
PDF
Tamabi media131118
PDF
Interactive Music II SuperCollider応用 JITLib - ライブコーディング 1
PDF
iTamabi 13 第8回:ARTSAT API 実践 2 衛星アプリを企画する
PDF
Interactive Music II SuperCollider実習 オリジナルの楽器を作ろう!
PDF
Geidai music131107
PDF
Interactive Music II SuperCollider入門 5 時間構造をつくる
PDF
iTamabi 13 第7回:ARTSAT API 実践 2 衛星の情報で表現する
PDF
メディア芸術基礎 II Canvas + Javascriptで図形を描く
PDF
Interactive Music II SuperCollider入門 4 - 楽器を定義、変調合成(RM, AM, FM)
PDF
iTamabi 13  第6回:ARTSAT API 実践 1 Web APIから情報を取得する
Interactive Music II ProcessingとSuperColliderの連携 -2
Interactive Music II Processing基本
Interactive Music II SuperCollider応用 2 - SuperColliderとPure Dataの連携
Media Art II openFrameworks アプリ間の通信とタンジブルなインターフェイス
Interactive Music II SuperCollider応用 - SuperColliderと OSC (Open Sound Control)
iTamabi 13 ARTSAT API 実践 5 - 衛星の軌道を描く
メディア芸術基礎 II 第11回:HTML5実践 表現のための様々なJavaScriptライブラリ
芸術情報演習デザイン(Web) 第8回: CSSフレームワークを使う
Interactive Music II SuperCollider応用 JITLib - ライブコーディング 2
iTamabi 13 第9回:ARTSAT API 実践 3 ジオコーディングで衛星の位置を取得
Tamabi media131118
Interactive Music II SuperCollider応用 JITLib - ライブコーディング 1
iTamabi 13 第8回:ARTSAT API 実践 2 衛星アプリを企画する
Interactive Music II SuperCollider実習 オリジナルの楽器を作ろう!
Geidai music131107
Interactive Music II SuperCollider入門 5 時間構造をつくる
iTamabi 13 第7回:ARTSAT API 実践 2 衛星の情報で表現する
メディア芸術基礎 II Canvas + Javascriptで図形を描く
Interactive Music II SuperCollider入門 4 - 楽器を定義、変調合成(RM, AM, FM)
iTamabi 13  第6回:ARTSAT API 実践 1 Web APIから情報を取得する

coma Creators session vol.2