#ShaderToy+openFrameworks
画像処理とかビデオアートとかVJとかで、ShaderToy+openFrameworksって最強の組み合わせだと思うんですが、ofxShadertoyのサンプルが見当たらないのは何故でしょう?ShaderToyに興味ある人は達人が多いので、初歩的な技術解説は不要なのでしょうか?<本当に無いんです。>
私が見落としているだけでしょうか?
というわけで、自力で試行錯誤しながら、たどりついたところまでメモ代わりに記録しておきます。<その1>はopenFameWorksでShaderToyのコードを表示するところまでです。
先ず、openFrameworksのShaderToyのアドオン、ofxShadertoyをサーチしてダウンロードし、
addonsフォルダにコピーします。
(windows版用にコードを多少変更したような気がしますが、忘れましたので、思い出したら情報を追加します。)
そして、projectGenerator.exeを起動して、アドオンにofxShaderToyを指定し、適当なプロジェクト名を【下図】のように設定して、緑のGenerateボタンをプレスします。
ここでプロジェクトが開きますので、
main.cpp をShaderToyの表示用に変更します。
int main( ){
ofGLFWWindowSettings settings;
settings.setGLVersion(3, 2); // <--- ofxShadertoy NEEDS the GL Programmable Renderer
settings.setSize(640, 480);
ofCreateWindow(settings); // <-------- setup the GL context
// this kicks off the running of my app
ofRunApp(new ofApp());
}
次に ofApp.h に
#include "ofxShadertoy.h"
と、
ofxShadertoy shadertoy;
を追加します。
そして、ofApp.cppのseup()と、draw()に下記のようなコードを追加します。
void ofApp::setup(){
shadertoy.load("shaders/00.frag");
ofSetFrameRate(60);
shadertoy.setAdvanceTime(true);
ofDisableArbTex(); // very important!!!
}
これは、ShaderToyのコードを読み込んで、表示の準備をします。
void ofApp::draw(){
shadertoy.draw(0, 0);
}
上は、ShaderToyのGLSLを描画します。
コードの基本はこれだけです。
###ShaderToyのデータを用意する。
https://www.shadertoy.com/ にシェーダートイの例が沢山ありますので、この中からopenFrameworksで表示したいコードをコピペします。たとえば、
https://www.shadertoy.com/view/Msl3WH
00.fragいうテキストファイルにコードをコピーして、dataフォルダの下にshadersフォルダを作成し、ここに00.fragを置きます。
これはBufferを使っていない例です。
以下のようにBufferを使ってWebcamの入力にイフェクトを加えることもできます。この例ではレイヤーは3層になってます。
https://www.shadertoy.com/view/wttSRM
(このようなopenFrameworks+ofxShadertoyでBufferの使う方法は<その2>以降で解説いたします。)
これで、準備ができました。
windowsのプロジェクトをgit
https://github.com/ultrahamlet/example01
に置きましたので、ビルドして走らせてみてください。
###Bufferを使った例や音声データを入力する例は<その2で>###