SlideShare a Scribd company logo
iTamabi13 第2回:
openFrameworks iOS 入門
2013年9月16日
田所 淳
このワークショップでの開発枠組み
‣ iPhone SDK + openFrameworks で!!
+
openFrameworks (for iPhone) 入門
openFrameworks とは?
‣ C++によるクリエイティブなコーディングのためのオープン
ソースのツールキット
‣ http://openframeworks.cc/
簡単な歴史
‣ 2004年、Zachary Liebermanがニューヨークのパーソンズ美
術大学での大学院のクラスの作品制作のためのツールとして開
発
‣ その後、Zachary Lieberman、Theo Watson、Arturo Castro
を主要メンバーとして、世界中の開発者と協力しながら発展
Zachary Lieberman
openFrameworks とは?
‣ 様々なメディアを駆使した作品を作りたい!!
‣ 様々な技術に精通しなくてはならない
‣ サウンド、ビデオ、フォント、画像解析...etc.
‣ openFrameworksを利用すると、
‣ 既存の道具(=ライブラリ)を設定なしに使用可能
‣ 作品制作のための「糊」
開発のための「糊」
‣ oFの構造イメージ
main.cpp
testApp.h testApp.cpp
openGL GLUT freeimage freetype
fmod rtaudio quicktime openCV
ofSimpleApp, ofGraphics, ofImage, ofTruTypeFont,
ofVidePlayer, ofVideoGrabber, ofTexture, ofSoundPlayer,
ofSoundStream, ofSerial, ofMath, ofUtils
プログラムの開始
コードを書くところ
OpenFrameworksの機能
ベースとなるライブラリ群
サンプルを実行してみよう!!
‣ Mac版「of_preRelease_v007_iphone/apps/
iPhoneExamples/」以下にあるフォルダ内のXCodeのプロ
ジェクトファイル「.xcodeproj」を開く
‣ プロジェクトファイルを開くと、自動的にXcodeが起動
‣ 左上のプルダウンより、プロジェクトの名前の項目のiPhone
シミュレータを選択
サンプルを実行してみよう!!
‣ 「Run」ボタンを押す
‣ コード実行のための様々な処理 (コンパイル) を行った後、iOS
シミュレータでサンプルプログラムが実行される(はず)
まずはSimulatorで実行してみる!!
‣ 例:advancedGraphics
新規にプロジェクトを作成する
‣ 新規にプロジェクトを作成するには、空プロジェクトをコピー
‣ 空プロジェクトは、下記のものをコピーしてつかう
‣ apps > iPhoneExamples > emptyExample
‣ 例:apps > iPhoneExamples > emptyExample を下記の場所
にコピー
‣ apps > iTamabi_example110524 > emptyExample
OpneFrameworksのコード構造
‣ さしあたって、編集するのは、testApp.hとtestApp.mm の
み!!
main.cpp
testApp.h testApp.cpp
openGL GLUT freeimage freetype
fmod rtaudio quicktime openCV
ofSimpleApp, ofGraphics, ofImage, ofTruTypeFont,
ofVidePlayer, ofVideoGrabber, ofTexture, ofSoundPlayer,
ofSoundStream, ofSerial, ofMath, ofUtils
プログラムの開始
コードを書くところ
OpenFrameworksの機能
ベースとなるライブラリ群
ココ
プロジェクトの中身を開いてみよう!
‣ testApp.mm を開いてみる!
2つのファイル
‣ testApp.h - ヘッダファイル
‣ プログラム全体で使用される部品 (変数、関数) を宣言
‣ 料理のレシピに例えると…
‣ 材料の一覧
‣ 料理手順の一覧
‣ testApp.mm - 実装ファイル
‣ 実際に何をするかを記述
‣ 料理のレシピに例えると…
‣ 実際の調理内容の全てを記述
重要な3つのブロック
‣ とりあえず今日の段階で重要になるのは、下記の3つブロック
‣ setup - 準備
‣ update - 更新
‣ draw - 描画
‣ つまり...
‣ 絵を描く準備をしたら継続的に更新しながら描画する
#pragma once
#include "ofMain.h"
#include "ofxiPhone.h"
#include "ofxiPhoneExtras.h"
class testApp : public ofxiPhoneApp {
!
public:
! void setup();
! void update();
! void draw();
! void exit();
!
! void touchDown(ofTouchEventArgs &touch);
! void touchMoved(ofTouchEventArgs &touch);
! void touchUp(ofTouchEventArgs &touch);
! void touchDoubleTap(ofTouchEventArgs &touch);
! void touchCancelled(ofTouchEventArgs &touch);
!
! void lostFocus();
! void gotFocus();
! void gotMemoryWarning();
! void deviceOrientationChanged(int newOrientation);
!
};
testApp.h では
‣ testApp.h
準備
#pragma once
#include "ofMain.h"
#include "ofxiPhone.h"
#include "ofxiPhoneExtras.h"
class testApp : public ofxiPhoneApp {
!
public:
! void setup();
! void update();
! void draw();
! void exit();
!
! void touchDown(ofTouchEventArgs &touch);
! void touchMoved(ofTouchEventArgs &touch);
! void touchUp(ofTouchEventArgs &touch);
! void touchDoubleTap(ofTouchEventArgs &touch);
! void touchCancelled(ofTouchEventArgs &touch);
!
! void lostFocus();
! void gotFocus();
! void gotMemoryWarning();
! void deviceOrientationChanged(int newOrientation);
!
};
testApp.h では
‣ testApp.h
更新
#pragma once
#include "ofMain.h"
#include "ofxiPhone.h"
#include "ofxiPhoneExtras.h"
class testApp : public ofxiPhoneApp {
!
public:
! void setup();
! void update();
! void draw();
! void exit();
!
! void touchDown(ofTouchEventArgs &touch);
! void touchMoved(ofTouchEventArgs &touch);
! void touchUp(ofTouchEventArgs &touch);
! void touchDoubleTap(ofTouchEventArgs &touch);
! void touchCancelled(ofTouchEventArgs &touch);
!
! void lostFocus();
! void gotFocus();
! void gotMemoryWarning();
! void deviceOrientationChanged(int newOrientation);
!
};
testApp.h では
‣ testApp.h
描画
#include "testApp.h"
//--------------------------------------------------------------
void testApp::setup(){!
! // register touch events
! ofRegisterTouchEvents(this);
!
! // initialize the accelerometer
! ofxAccelerometer.setup();
!
! //iPhoneAlerts will be sent to this.
! ofxiPhoneAlerts.addListener(this);
!
! //If you want a landscape oreintation
! //iPhoneSetOrientation(OFXIPHONE_ORIENTATION_LANDSCAPE_RIGHT);
!
! ofBackground(127,127,127);
}
//--------------------------------------------------------------
void testApp::update(){
}
//--------------------------------------------------------------
void testApp::draw(){
!
}
testApp.mm では
‣ testApp.mm
準備
#include "testApp.h"
//--------------------------------------------------------------
void testApp::setup(){!
! // register touch events
! ofRegisterTouchEvents(this);
!
! // initialize the accelerometer
! ofxAccelerometer.setup();
!
! //iPhoneAlerts will be sent to this.
! ofxiPhoneAlerts.addListener(this);
!
! //If you want a landscape oreintation
! //iPhoneSetOrientation(OFXIPHONE_ORIENTATION_LANDSCAPE_RIGHT);
!
! ofBackground(127,127,127);
}
//--------------------------------------------------------------
void testApp::update(){
}
//--------------------------------------------------------------
void testApp::draw(){
!
}
testApp.mm では
‣ testApp.mm
更新
#include "testApp.h"
//--------------------------------------------------------------
void testApp::setup(){!
! // register touch events
! ofRegisterTouchEvents(this);
!
! // initialize the accelerometer
! ofxAccelerometer.setup();
!
! //iPhoneAlerts will be sent to this.
! ofxiPhoneAlerts.addListener(this);
!
! //If you want a landscape oreintation
! //iPhoneSetOrientation(OFXIPHONE_ORIENTATION_LANDSCAPE_RIGHT);
!
! ofBackground(127,127,127);
}
//--------------------------------------------------------------
void testApp::update(){
}
//--------------------------------------------------------------
void testApp::draw(){
!
}
testApp.mm では
‣ testApp.mm
描画
図形を描いてみる!
‣ まず円を描いてみましょう
‣ 何を指定したら円を描けるのか、を考える
図形を描いてみる!
‣ 中心の位置 (座標 = x, y) と半径の長さがわかれば円は描ける!
(x,y)
r
図形を描いてみる!
‣ openFrameworksでは、下記のように指定する
‣ ofCircle (中心のx座標, 中心のy座標, 半径の長さ);
‣ 例:
‣ ofCircle (100, 200, 50);
‣ 座標(100, 200) を中心に、半径50の円を描く
#include "testApp.h"
//--------------------------------------------------------------
void testApp::setup(){!
! // iPhone初期設定
! ofRegisterTouchEvents(this);
! ofxAccelerometer.setup();
! ofxiPhoneAlerts.addListener(this);
!
! // 背景色
! ofBackground(0,0,0);
}
//--------------------------------------------------------------
void testApp::update(){
}
//--------------------------------------------------------------
void testApp::draw(){
! // 円を描く
! ofCircle(160, 240, 50);
}
やってみよう!!
‣ testApp.mm
1行追加
やってみよう!!
‣ 円が描けた!
色を塗ってみる
‣ コンピュータの画面はどうなっているのか?
‣ コンピュータの画面を拡大していくと...
‣ 縦横に並んだ点の集合 → ピクセル (Pixel)
‣ 一つのピクセルは赤、緑、青の三原色から成り立っている
色を塗ってみる
‣ 色を指定するには?
‣ R(赤) G(緑) B(青)の三原色で指定する
‣ 加法混色 (光の三原色であることに注意) ←→ 色料の三原色
色を指定するには?
‣ openFrameworks で色を指定するには?
‣ ofSetColor を使用する
‣ ofSetColor (Red, Green, Blue, Alpha);
‣ それぞれの色の範囲は 0 ∼ 255
‣ Alphaは透明度をあらわす
‣ 色を指定した以降の図形に適用される
‣ 例:
‣ ofSetColor(0, 127, 255, 127);
// 前略
void testApp::draw(){
! // 2つの円を描く
! ofEnableAlphaBlending();
! ofSetColor(0, 127, 255, 200);
! ofCircle(130, 240, 50);
! ofSetColor(255, 127, 0, 200);
! ofCircle(190, 240, 50);
}
// 後略
やってみよう!!
‣ testApp.mm - draw( )関数
変更
やってみよう!!
‣ 色がついた!
参考:oFの命令を調べる
‣ たとえば、円以外の形を描きたくなったとき、どうやって調べ
る?
‣ リファレンスを参考にすると良い
‣ http://www.openframeworks.cc/documentation
‣ oFの全ての命令の解説が掲載されています
Let’s Try!
‣ iPhoneのキャンバス上に、円や (余裕があれば) 他の形で自由
に絵を描いてみる!!
応用:アニメーションの第一歩
‣ アニメーションするにはどうする?
‣ setup、update、draw をつかいこなす
‣ 初期値の設定 : setup
‣ 変化する部分 : update
‣ 描画 : draw
画面全体が回転するプログラム
‣ サンプルをみながら解説します!
‣ 01_03_RotateCircles

More Related Content

PDF
メディア・アート II 第1回: ガイダンス openFrameworks入門
PDF
Media Art II 2013 第5回:openFrameworks Addonを使用する
PDF
Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGL
PDF
「クリエイティブ・ミュージック・コーディング」- オーディオ・ビジュアル作品のための、オープンソースなソフトウエア・フレームワークの現状と展望
PDF
coma Creators session vol.2
PDF
メディア・アートII 第3回 openFrameworks基礎 OOoF : オブジェクト指向 oF
PDF
Media Art II 2013 第6回:openFrameworks Addonを使う 2 - ofxOpenCV と ofxCv
PDF
メディア・アートII 第2回 openFrameworks基礎 配列、くりかえし、乱数 ベクトルを使用したアニメーション
メディア・アート II 第1回: ガイダンス openFrameworks入門
Media Art II 2013 第5回:openFrameworks Addonを使用する
Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGL
「クリエイティブ・ミュージック・コーディング」- オーディオ・ビジュアル作品のための、オープンソースなソフトウエア・フレームワークの現状と展望
coma Creators session vol.2
メディア・アートII 第3回 openFrameworks基礎 OOoF : オブジェクト指向 oF
Media Art II 2013 第6回:openFrameworks Addonを使う 2 - ofxOpenCV と ofxCv
メディア・アートII 第2回 openFrameworks基礎 配列、くりかえし、乱数 ベクトルを使用したアニメーション

What's hot (20)

PDF
デジタルアートセミナー#2 openFrameworksで学ぶ、 クリエイティブ・コーディング Session 2: 構造をつくる
PDF
Media Art II openFrameworks 複数のシーンの管理・切替え
PDF
デジタルアートセミナー#2 openFrameworksで学ぶ、 クリエイティブ・コーディング Session 1: openFrameworks入門
PDF
プログラム初級講座 - メディア芸術をはじめよう
PDF
Media Art II 2013 第4回:openFrameworks アニメーションを極める 動きを生みだす様々なアルゴリズム
PDF
Interactive Music II ProcessingとSuperColliderの連携1
PDF
デジタルアートセミナー#2 openFrameworksで学ぶ、 クリエイティブ・コーディング Session 3: アドオンを作ろう!
PDF
BNN CAMP vol.3  インタラクションデザインの現在―プログラミング初心者のためのopenFrameworks入門 1
PDF
openFrameworks Workshop in Kanazawa v001
PDF
coma - creator’s talk session: Code - openFrameworks
PDF
Interactive Music II Processingによるアニメーション
PDF
openFrameworkとCityCompilerでバーチャルとリアルを結ぶ
PDF
Swift 2.0 で変わったところ「後編」 #cswift
PDF
ARコンテンツ作成勉強会:C#ではじめようOpenCV(カラートラッキング編)
PDF
Glfw3,OpenGL,GUI
PDF
iTamabi 13 第7回:ARTSAT API 実践 2 衛星の情報で表現する
PDF
Async design with Unity3D
PDF
OpenCVの入り口
PDF
Webデザイン 第10回:HTML5実践 Three.jsで3Dプログラミング
PDF
Media Art II openFrameworks アプリ間の通信とタンジブルなインターフェイス
デジタルアートセミナー#2 openFrameworksで学ぶ、 クリエイティブ・コーディング Session 2: 構造をつくる
Media Art II openFrameworks 複数のシーンの管理・切替え
デジタルアートセミナー#2 openFrameworksで学ぶ、 クリエイティブ・コーディング Session 1: openFrameworks入門
プログラム初級講座 - メディア芸術をはじめよう
Media Art II 2013 第4回:openFrameworks アニメーションを極める 動きを生みだす様々なアルゴリズム
Interactive Music II ProcessingとSuperColliderの連携1
デジタルアートセミナー#2 openFrameworksで学ぶ、 クリエイティブ・コーディング Session 3: アドオンを作ろう!
BNN CAMP vol.3  インタラクションデザインの現在―プログラミング初心者のためのopenFrameworks入門 1
openFrameworks Workshop in Kanazawa v001
coma - creator’s talk session: Code - openFrameworks
Interactive Music II Processingによるアニメーション
openFrameworkとCityCompilerでバーチャルとリアルを結ぶ
Swift 2.0 で変わったところ「後編」 #cswift
ARコンテンツ作成勉強会:C#ではじめようOpenCV(カラートラッキング編)
Glfw3,OpenGL,GUI
iTamabi 13 第7回:ARTSAT API 実践 2 衛星の情報で表現する
Async design with Unity3D
OpenCVの入り口
Webデザイン 第10回:HTML5実践 Three.jsで3Dプログラミング
Media Art II openFrameworks アプリ間の通信とタンジブルなインターフェイス
Ad

Viewers also liked (10)

PDF
iTamabi 13  第3回:iPhoneアプリ実践開発講座 1 画像ファイルの読み込み 画像でアニメーションを作成する
PDF
「オブジェクト指向設計実践ガイド」を読んだので誰かに意見聞きたい
PPTX
擬人化で考えるオブジェクト指向
PPTX
本当のオブジェクト指向は可読性を上げる
PDF
オブジェクト指向エクササイズのススメ
PDF
最強オブジェクト指向言語 JavaScript 再入門!
PDF
オブジェクト指向できていますか?
PDF
オブジェクト指向の設計と実装の学び方のコツ
PDF
オブジェクト指向プログラミングのためのモデリング入門
PDF
iOSアプリ制作のためのObjective-C入門
iTamabi 13  第3回:iPhoneアプリ実践開発講座 1 画像ファイルの読み込み 画像でアニメーションを作成する
「オブジェクト指向設計実践ガイド」を読んだので誰かに意見聞きたい
擬人化で考えるオブジェクト指向
本当のオブジェクト指向は可読性を上げる
オブジェクト指向エクササイズのススメ
最強オブジェクト指向言語 JavaScript 再入門!
オブジェクト指向できていますか?
オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向プログラミングのためのモデリング入門
iOSアプリ制作のためのObjective-C入門
Ad

Similar to openFrameworks iOS 入門 (20)

PPTX
SwiftのOptionalを理解する
PDF
これからはじめる SwiftPlayground入門
PPTX
iPhoneアプリ開発の歩き方〜Swift編〜
PDF
20140315 JAWS Days OpsWorks
PDF
20120422 日本androidの会 横浜支部 smartwatch開発
PDF
ようこそ! Swift Playgroundsへ
PDF
OnActivityResult - おまえら!もうonActivityResultでswitchとif書く時代は終わりだぞ!
PDF
Xamarin.Forms概要
PDF
ぶっとびケータイ+Firefox OS Apps
PPTX
どこでも動くゲームを作るためのベタープラクティス
PDF
Pythonによる非同期プログラミング入門
PPT
PDF
HoloLensハンズオン:AirTap & SpatialMapping編
PDF
[Japanese] Developing a bot for your workspace 翻訳ボットを作る!
PDF
SwiftのOptionalを理解する
PDF
ハンズオン勉強会 はじめてのJavaScriptとSPARQL
PPTX
Visual Studio App Centerを公式サンプルアプリから学ぼうiOS(swift),Android(java)
PDF
Swift勉強会
PDF
PDF
OpsWorks事例紹介!ソニックガーデンのリモートワークを支えるリアルタイムツール”Remotty”の舞台裏(2014/03/15 - JAWS D...
SwiftのOptionalを理解する
これからはじめる SwiftPlayground入門
iPhoneアプリ開発の歩き方〜Swift編〜
20140315 JAWS Days OpsWorks
20120422 日本androidの会 横浜支部 smartwatch開発
ようこそ! Swift Playgroundsへ
OnActivityResult - おまえら!もうonActivityResultでswitchとif書く時代は終わりだぞ!
Xamarin.Forms概要
ぶっとびケータイ+Firefox OS Apps
どこでも動くゲームを作るためのベタープラクティス
Pythonによる非同期プログラミング入門
HoloLensハンズオン:AirTap & SpatialMapping編
[Japanese] Developing a bot for your workspace 翻訳ボットを作る!
SwiftのOptionalを理解する
ハンズオン勉強会 はじめてのJavaScriptとSPARQL
Visual Studio App Centerを公式サンプルアプリから学ぼうiOS(swift),Android(java)
Swift勉強会
OpsWorks事例紹介!ソニックガーデンのリモートワークを支えるリアルタイムツール”Remotty”の舞台裏(2014/03/15 - JAWS D...

More from Atsushi Tadokoro (19)

PDF
Interactive Music II ProcessingとSuperColliderの連携 -2
PDF
Interactive Music II Processing基本
PDF
Interactive Music II SuperCollider応用 2 - SuperColliderとPure Dataの連携
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
メディア芸術基礎 II Canvas + Javascriptで図形を描く
PDF
Interactive Music II SuperCollider入門 4 - 楽器を定義、変調合成(RM, AM, FM)
PDF
iTamabi 13  第6回:ARTSAT API 実践 1 Web APIから情報を取得する
PDF
Interactive Music II SuperCollider入門 3 - 音を混ぜる(Mix)、楽器を定義(SynthDef)
Interactive Music II ProcessingとSuperColliderの連携 -2
Interactive Music II Processing基本
Interactive Music II SuperCollider応用 2 - SuperColliderとPure Dataの連携
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 時間構造をつくる
メディア芸術基礎 II Canvas + Javascriptで図形を描く
Interactive Music II SuperCollider入門 4 - 楽器を定義、変調合成(RM, AM, FM)
iTamabi 13  第6回:ARTSAT API 実践 1 Web APIから情報を取得する
Interactive Music II SuperCollider入門 3 - 音を混ぜる(Mix)、楽器を定義(SynthDef)

openFrameworks iOS 入門