[ Video ]
[ About ]
Twitterで見かけたマスゲーム(?)の動画が面白かったのでやってみた。
Box number.
[ 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 |
#pragma once #include "ofMain.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; ofFbo fbo; ofPixels pixels; ofTrueTypeFont font; int size; vector<pair<glm::vec3, float>> box_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 |
#include "ofApp.h" //-------------------------------------------------------------- void ofApp::setup() { ofSetFrameRate(60); ofSetWindowTitle("openFrameworks"); ofBackground(239); ofSetColor(39); ofSetLineWidth(2); ofEnableDepthTest(); this->font.loadFont("fonts/Kazesawa-bold.ttf", 500, true, true, true); this->fbo.allocate(ofGetWidth(), ofGetHeight()); this->size = 30; for (int x = size * 0.5; x <= ofGetWidth() - size * 0.5; x += this->size) { for (int y = size * 0.5; y <= ofGetWidth() - size * 0.5; y += this->size) { this->box_list.push_back(make_pair(glm::vec3(x, y, 0), this->size)); } } } //-------------------------------------------------------------- void ofApp::update() { this->fbo.begin(); ofClear(0); ofSetColor(39); string word = to_string((ofGetFrameNum() / 90) % 10); this->font.drawString(word, this->fbo.getWidth() * 0.5 - this->font.stringWidth(word) * 0.5, this->fbo.getHeight() * 0.5 + this->font.stringHeight(word) * 0.5); this->fbo.end(); this->fbo.readToPixels(this->pixels); for (auto& box : this->box_list) { auto location = box.first; auto& height = box.second; if (this->pixels.getColor(location.x, location.y) != ofColor(0, 0)) { if (height < this->size * 5) { height += 2; } } else { if (height > this->size) { height -= 2; } } } } //-------------------------------------------------------------- void ofApp::draw() { this->cam.begin(); ofTranslate(ofGetWidth() * -0.5, ofGetHeight() * -0.5); for (auto& box : this->box_list) { auto location = box.first; auto height = box.second; ofFill(); ofSetColor(ofMap(height, this->size, this->size * 5, 239, 39)); ofDrawBox(location - glm::vec3(0, 0, height * 0.5), this->size - 1, this->size - 1, -height + 1); ofNoFill(); ofSetColor(ofMap(height, this->size, this->size * 5, 39, 239)); ofDrawBox(location - glm::vec3(0, 0, height * 0.5), this->size, this->size, -height); } this->cam.end(); } //-------------------------------------------------------------- int main() { ofSetupOpenGL(720, 720, OF_WINDOW); ofRunApp(new ofApp()); } |