[ Video ]
[ About ]
気づいたら1000日目越えてた…
Over 1000 days.
[ Source ]
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 |
#pragma once #include "ofMain.h" #include "Actor.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 mouseEntered(int x, int y) {}; void mouseExited(int x, int y) {}; void windowResized(int w, int h) {}; void dragEvent(ofDragInfo dragInfo) {}; void gotMessage(ofMessage msg) {}; ofEasyCam cam; vector<glm::vec3> location_list; vector<vector<int>> next_index_list; vector<int> destination_list; vector<Actor*> actors; vector<ofColor> color_list; }; |
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 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 |
#include "ofApp.h" //-------------------------------------------------------------- void ofApp::setup() { ofSetFrameRate(60); ofSetWindowTitle("openFrameworks"); ofBackground(239); ofEnableDepthTest(); ofFbo fbo; fbo.allocate(ofGetWidth(), ofGetHeight()); fbo.begin(); ofTranslate(ofGetWidth() * 0.5, ofGetHeight() * 0.5); ofRotate(90); ofClear(0); ofSetColor(0); ofTrueTypeFont font; font.loadFont("fonts/Kazesawa-Bold.ttf", 200, true, true, true); /* https://github.com/kazesawa/kazesawa */ font.drawString("1006", font.stringWidth("1006") * -0.5, 0); font.drawString("Days", font.stringWidth("Days") * -0.5, font.stringHeight("Days") * 1); fbo.end(); ofPixels pixels; fbo.readToPixels(pixels); auto span = 10; ofColor pix_color; for (int x = 0; x < fbo.getWidth(); x += span) { for (int y = 0; y < fbo.getHeight(); y += span) { pix_color = pixels.getColor(x, y); if (pix_color != ofColor(0, 0)) { for (int z = span * -1; z <= span * 1; z += span) { this->location_list.push_back(glm::vec3(x - ofGetWidth() * 0.5, y - ofGetHeight() * 0.5, z)); } } } } for (auto& location : this->location_list) { vector<int> next_index = vector<int>(); int index = -1; for (auto& other : this->location_list) { index++; if (location == other) { continue; } float distance = glm::distance(location, other); if (distance <= span) { next_index.push_back(index); } } this->next_index_list.push_back(next_index); } for (int i = 0; i < 2000; i++) { this->actors.push_back(new Actor(this->location_list, this->next_index_list, this->destination_list)); } } //-------------------------------------------------------------- void ofApp::update() { int frame_span = 15; int prev_index_size = 0; if (ofGetFrameNum() % frame_span == 0) { prev_index_size = this->destination_list.size(); } for (auto actor : this->actors) { actor->update(frame_span, this->location_list, this->next_index_list, this->destination_list); } if (prev_index_size != 0) { this->destination_list.erase(this->destination_list.begin(), this->destination_list.begin() + prev_index_size); } } //-------------------------------------------------------------- void ofApp::draw() { this->cam.begin(); ofRotate(90); ofRotateX(180); int index = 0; for (auto actor : this->actors) { actor->draw(); } this->cam.end(); } //-------------------------------------------------------------- int main() { ofSetupOpenGL(720, 720, OF_WINDOW); ofRunApp(new ofApp()); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
#pragma once #include "ofMain.h" class Actor { public: Actor(vector<glm::vec3>& location_list, vector<vector<int>>& next_index_list, vector<int>& destination_list); void update(int& frame_span, vector<glm::vec3>& location_list, vector<vector<int>>& next_index_list, vector<int>& destination_list); void draw(); private: int select_index; int next_index; glm::vec3 location; ofColor color; }; |
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 |
#include "Actor.h" //-------------------------------------------------------------- Actor::Actor(vector<glm::vec3>& location_list, vector<vector<int>>& next_index_list, vector<int>& destination_list) { this->select_index = ofRandom(location_list.size()); while (true) { auto itr = find(destination_list.begin(), destination_list.end(), this->select_index); if (itr == destination_list.end()) { destination_list.push_back(this->select_index); break; } this->select_index = (this->select_index + 1) % location_list.size(); } this->next_index = this->select_index; vector<int> hex_list = { 0x06BEE1, 0x1768AC, 0x2541B2, 0x03256C, 0xEFEFEF }; int color_index = ofRandom(hex_list.size()); this->color.setHex(hex_list[color_index]); } //-------------------------------------------------------------- void Actor::update(int& frame_span, vector<glm::vec3>& location_list, vector<vector<int>>& next_index_list, vector<int>& destination_list) { if (ofGetFrameNum() % frame_span == 0) { auto tmp_index = this->select_index; this->select_index = this->next_index; int retry = next_index_list[this->select_index].size(); this->next_index = next_index_list[this->select_index][(int)ofRandom(next_index_list[this->select_index].size())]; while (--retry > 0) { auto destination_itr = find(destination_list.begin(), destination_list.end(), this->next_index); if (destination_itr == destination_list.end()) { if (tmp_index != this->next_index) { destination_list.push_back(this->next_index); break; } } this->next_index = next_index_list[this->select_index][(this->next_index + 1) % next_index_list[this->select_index].size()]; } if (retry <= 0) { destination_list.push_back(this->select_index); this->next_index = this->select_index; } } auto param = ofGetFrameNum() % frame_span; auto distance = location_list[this->next_index] - location_list[this->select_index]; this->location = location_list[this->select_index] + distance / frame_span * param; } //-------------------------------------------------------------- void Actor::draw() { ofFill(); ofSetColor(this->color); ofDrawBox(this->location, 9); ofNoFill(); ofSetColor(39); ofDrawBox(this->location, 10); } |