RELATIVE LIGHT
人の手によって創りだされた無機質な光が生物のように宙を舞い、それぞれの光は集団として関係を保つために寄り添って飛び回る。
ofBoids
このデモではopenFrameworks + ofBoidsを使っています。Boidsというのは下記のように鳥の群衆をシュミレートできるプログラムのことです。ofBoidsではそのBoidsを簡単に使えるようになっています。
ボイド(Boids)は、アメリカのアニメーション・プログラマ、クレイグ・レイノルズが考案・作製した人工生命シミュレーションプログラムである。名称は「鳥もどき(bird-oid)」から取られている。
引用:wikipedia
source
ofApp.h
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
#pragma once #include "ofMain.h" #include "Flock3d.h" class ofApp : 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); Flock3d flock; ofLight pointLight; }; |
ofApp.cpp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
#include "ofApp.h" //-------------------------------------------------------------- void ofApp::setup(){ // num, center x, center y, center z, dev flock.setup(500, ofGetWidth()/2, ofGetHeight()/2,-ofGetWidth()/2, 50000); flock.setBounds(0,0,-ofGetWidth(),ofGetWidth(), ofGetHeight(),0); flock.setBoundmode(1)->setDt(2.5); ofEnableBlendMode(OF_BLENDMODE_ADD); ofBackground(20); ofSetColor(255,100); ofSetSmoothLighting(true); pointLight.setDiffuseColor( ofFloatColor(1.0, 1.0, .75) ); } //-------------------------------------------------------------- void ofApp::update(){ flock.update(); } //-------------------------------------------------------------- void ofApp::draw(){ ofPoint prePos; ofPushMatrix(); ofEnableAlphaBlending(); for(int i=0; i<flock.size(); i++){ Boid3d * b = flock.get(i); ofPushMatrix(); ofEnableLighting(); pointLight.enable(); ofTranslate(b->x, b->y, b->z); float rnd = ofRandom(0.3, 2.5); ofSetColor(int(255*0.3*rnd), int(255*0.8*rnd), int(255*0.9*rnd), ofRandom(90, 100)); ofEllipse(-2,-2,4,4); ofSetColor(int(255*0.8*rnd), int(255*0.8*rnd), int(255*0.5*rnd), ofRandom(60, 70)); ofEllipse(-2,-2,10,10); ofSetColor(255, 255, 255, ofRandom(6, 8)); ofEllipse(-2,-2,20*rnd,20*rnd); ofPopMatrix(); ofPushMatrix(); float lm = 9; ofSetColor(255, 255, 255, 30); ofSetLineWidth(10); ofLine(b->x, b->y, b->z, b->x - b->vx*lm, b->y - b->vy*lm, b->z - b->vz*lm); ofSetColor(255, 255, 255, 4); ofSetLineWidth(1); ofLine(b->x, b->y, b->z, prePos.x, prePos.y, prePos.z); ofDisableLighting(); ofPopMatrix(); prePos.x = b->x; prePos.y = b->y; prePos.z = b->z; } ofPopMatrix(); } |
コメントを残す