[openFrameworks]画面にいろんなエフェクトを簡単にかけてみる


この記事を読んでできるようになること

<動画>
https://youtu.be/SsKdUQJesNk

このように今回はpcカメラの映像にリアルタイムでキーをおしたら画面に何層ものエフェクトをかけることができるようになる、というものをつくれるようにします。
だいぶ前につくられたaddonなのですがとても面白いことが簡単にできるのでしっかりと残しておきます。

使用するもの

openframeworks : http://openframeworks.cc/ja/
ちなみに僕のバージョンはv0.9.8です。

addon : ofxPostGlitch
https://github.com/maxillacult/ofxPostGlitch

いやそれどんなaddon?

FBOへのいろんなエフェクトが簡単にかけることができるようになるaddonです。
たくさんのエフェクトが用意されています。もちろんカスタムも可能です。

紹介動画(?) : https://vimeo.com/58698980

用意されているエフェクトの文字(たぶんあとでつかいます)

名前集

    OFXPOSTGLITCH_CONVERGENCE
    OFXPOSTGLITCH_GLOW
    OFXPOSTGLITCH_SHAKER
    OFXPOSTGLITCH_CUTSLIDER
    OFXPOSTGLITCH_TWIST
    OFXPOSTGLITCH_OUTLINE
    OFXPOSTGLITCH_NOISE
    OFXPOSTGLITCH_SLITSCAN
    OFXPOSTGLITCH_SWELL
    OFXPOSTGLITCH_INVERT
    OFXPOSTGLITCH_CR_HIGHCONTRAST
    OFXPOSTGLITCH_CR_BLUERAISE
    OFXPOSTGLITCH_CR_REDRAISE
    OFXPOSTGLITCH_CR_GREENRAISE
    OFXPOSTGLITCH_CR_REDINVERT
    OFXPOSTGLITCH_CR_BLUEINVERT
    OFXPOSTGLITCH_CR_GREENINVERT

使用手順

・ofxPostGlitchをダウンロードしてaddonsのフォルダに追加します。
・projectGeneratorで

このようにaddonsとして追加してプロジェクトを作成します

・<重要>つくったプロジェクトのbin>dataの中に"ofxPostGlitch-master"に入っているShadersというファイルをコピーしてきておきます

・projectを開き、早速コードを書いていきます!

コード

ofApp.h
#include "ofxPostGlitch.h"

インスタンス化

ofApp.h
ofxPostGlitch postGlitch;
ofFbo buffer;

//pcカメラに使用
ofVideoGrabber video;
//音楽に使用
ofSoundPlayer soundplayer;
//キーの判定に使用
bool pressedKey = false;

ofFboとは? : http://qiita.com/gantyu/items/5df79b025205aafa3dc8

ofApp.cpp
void ofApp::setup(){

    buffer.allocate(512, 384);
    postGlitch.setup(&buffer);

    //pcカメラについて
    video.initGrabber(ofGetWidth(), ofGetHeight());

    //音楽について
    soundplayer.load("音楽ファイルの名前:bin>dataの中に入れておく");
    soundplayer.setLoop(true);
    soundplayer.setVolume(1.0);
    soundplayer.play();

}
ofApp.cpp
void ofApp::update(){
    //pcカメラについて
    video.update();
}
ofApp.cpp
void ofApp::draw(){

    // pcカメラで撮影している映像を描画する処理
    buffer.begin();
    video.draw(0,0);
    buffer.end();

    // エフェクト選択
    //ここのOFXPOSTGLITCH_TWISTのところをかえればいろんなエフェクトにできます
    postGlitch.setFx(OFXPOSTGLITCH_TWIST, pressedKey);

    // エフェクトをかける(エフェクトを描画できるようにする)
    postGlitch.generateFx();

    //bufferで囲んだ部分の処理を描画
    buffer.draw(0,0);

}
ofApp.cpp
void ofApp::keyReleased(int key){
   //1のキーがはなされ時エフェクトがかかる
    if(key == '1'){
        pressedKey = !pressedKey;
    }

}

どうでしょう?
エフェクトがかかったのではないでしょうか?
ここからさらに配列などを使用していくつもエフェクトを使えるようにすれば重ねることができるので面白い映像が出来上がっていくとおもいます。
ぜひこのaddonを活用して面白いopenframeworksの作品をどんどん作っていきましょう!

このコードきたないよ、とかこここうしたほうがいいんじゃない?とか意見があればぜひいってください!
よろしくお願いします!

では。

参考資料

https://note.mu/loveandsheep/n/n0d7cfafa9794
http://d.hatena.ne.jp/shu223/20141011/1413030973