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(); } | 
 
		         
							
														
						 
							
														
						




 
					
				




コメントを残す