SWARM OF WATER – Light box studio aoyama

01.08.15

/ / / /

Role
Sound design, concept, art direction , design and animation

“Swarm of Water”
We had to put a lot of effort and long hours to teach a computer to simulate something streaming and rippling like water just a few years ago. But now we can afford a computer fast and wiz at googol numbers. This piece simulates rippling liquidity along with the form of the studio walls. The calculated output of this art is from MacBook Air, in which no special Spec is installed, which indicates there are a lot of possibilities slumbering in your own computer, awaiting your touch to be awaken.

///////////////////////

つい数年前までのコンピューターにとって、水のような流体をシミュレートするのは大変な時間と負荷のかかる作業でした。しかし、ほんの4〜5年の間に、私達は高速な計算のできるコンピューターを簡単に導入することができるようになっています。この作品は、スタジオ壁面の形状に合わせて波状の流体をシミュレーションしたものです。作品を計算し出力しているのはMacBook Airというコンピューターで、特別なスペックのものではありません。つまり、あなたのコンピューターにもまだたくさんの可能性が眠っていて、使われるのを待っているかもしれない、ということです。

 

OFでつまづいたのでメモ【 Beyond Interaction 3-4-a ofxBox2d 】

26.01.14

/

ws02

こんにちわFLIGHTGRAFです。

OFを始めていきなりつまづいたのでメモ。

おそらく書籍購入者相当数の人がここでつまづいてるんじゃないかと思って、ここに書いときます。

田所氏著の「Beyond Interaction-2版」で、【3−4−a】アドオンの利用において、この書籍が出てしばらくというか、一年もたってないうちにいろんな環境が変わってしまった様で、「ofxBox2d」が参考コードでは利用できなくなっていたのでつまづきました。

自分は以下環境+コードで利用できるようになったので参考にしてください。

Xcode5.0.2/ofxbox2d(2014現在)/OFv8.0.2(書籍ではv0.7.4ですが、これだとofxbox2dが動かない。他のサイトにあるようなエラーは無く、いろいろ調べたら既に8.0に最適化されてる模様)

ofxBox2dをダウンロードし、「ofxBox2d-master」が展開されるので、フォルダを「ofxBox2d」にrenameしてaddonの中に入れます。

書籍を参考にprojectorGeneratorで新規プロジェクトを生成し、”testApp.h”から書いていきます”

testApp.h

#pragma once

#include "ofMain.h"
#include "ofxBox2d.h"



class testApp : public ofBaseApp{

	public:
		void setup();
		void update();
		void draw();

		void keyPressed(int key);
		void keyReleased(int key);
		void mouseMoved(int x, int y );
		void mouseDragged(int x, int y, int button);
		void mousePressed(int x, int y, int button);
		void mouseReleased(int x, int y, int button);
		void windowResized(int w, int h);
		void dragEvent(ofDragInfo dragInfo);
		void gotMessage(ofMessage msg);
    
    ofxBox2d box2d;
    vector <ofPtr<ofxBox2dCircle> > circles;
    //beyondでは vector <ofxBox2dCircle> > circles;

};

testApp.cpp

#include "testApp.h"

//--------------------------------------------------------------
void testApp::setup(){
    ofSetFrameRate(60);
    ofSetVerticalSync(true);
    ofBackground(0, 0, 0);

    box2d.init();
    box2d.setGravity(0, 5);
    box2d.createBounds(0,0,ofGetWidth(),ofGetHeight());
    box2d.setFPS(30);

//Beyondには無い宣言
	box2d.registerGrabbing();
    //ofSetLogLevel(OF_LOG_NOTICE);//無くてもいい

}

//--------------------------------------------------------------
void testApp::update(){
    box2d.update();

}

//--------------------------------------------------------------
void testApp::draw(){

    for (int i=0; i<circles.size(); i++) {
        ofFill();
        ofSetColor(0, 127, 255);
        //circles[i].draw();//Beyondではこう宣言している
        circles[i].get()->draw();
    }

    box2d.drawGround();//宣言しなくてもいい(一応)

}

//--------------------------------------------------------------
void testApp::keyPressed(int key){

}

//--------------------------------------------------------------
void testApp::keyReleased(int key){

}

//--------------------------------------------------------------
void testApp::mouseMoved(int x, int y ){

}

//--------------------------------------------------------------
void testApp::mouseDragged(int x, int y, int button){

}

//--------------------------------------------------------------
void testApp::mousePressed(int x, int y, int button){
    float r =ofRandom(10,40);
    //ofxBox2dCircle circle;//Beyondではインスタンスを生成しているが、そうするとうまくいかなかった。なので下記に変更
    circles.push_back(ofPtr(new ofxBox2dCircle));//push_backは始めにに宣言しないと以下のものが動かない
    circles.back().get()->setPhysics(1.0, 0.8, 0.5);
    circles.back().get()->setup(box2d.getWorld(), mouseX, mouseY, r);

}

//--------------------------------------------------------------
void testApp::mouseReleased(int x, int y, int button){

}

//--------------------------------------------------------------
void testApp::windowResized(int w, int h){

}

//--------------------------------------------------------------
void testApp::gotMessage(ofMessage msg){

}

//--------------------------------------------------------------
void testApp::dragEvent(ofDragInfo dragInfo){ 

}

こうするとうまく動くようになりました。

ofxBoxtest