[ Video ]
[ About ]
座標の値をNoise()の引数にして、角度を算出。
そのノイズの角度に線を伸ばす。
そして伸ばした先でまた計算する。
The angle is calculated by using the coordinate value as the argument of Noise().
Extend the line to the angle of that noise.
Then calculate it again at the end of the stretch.
[ 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 |
#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 windowResized(int w, int h) {}; void dragEvent(ofDragInfo dragInfo) {}; void gotMessage(ofMessage msg) {}; vector<glm::vec3> base_location_list; vector<ofColor> base_color_list; vector<vector<glm::vec2>> log_list; vector<ofColor> color_list; vector<float> life_list; float base_radius; }; |
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 |
#include "ofApp.h" //-------------------------------------------------------------- void ofApp::setup() { ofSetFrameRate(60); ofSetWindowTitle("openFrameworks"); ofBackground(0); ofEnableBlendMode(ofBlendMode::OF_BLENDMODE_ADD); ofNoFill(); ofColor color; vector<int> hex_list = { 0xf72585, 0xb5179e, 0x7209b7, 0x480ca8, 0x3f37c9, 0x4cc9f0 }; for (auto hex : hex_list) { color.setHex(hex); this->base_color_list.push_back(color); } } //-------------------------------------------------------------- void ofApp::update() { this->base_radius = ofMap(ofNoise(30, ofGetFrameNum() * 0.05), 0, 1, 0, 250); if (ofGetFrameNum() % 60 == 0) { this->base_location_list.clear(); for (int deg = 0; deg < 360; deg++) { this->base_location_list.push_back(glm::vec3(this->base_radius * cos(deg * DEG_TO_RAD), this->base_radius * sin(deg * DEG_TO_RAD), 0)); } } int radius = 3; while (this->log_list.size() < 500) { int font_location_index = ofRandom(this->base_location_list.size()); vector<glm::vec2> log; log.push_back(this->base_location_list[font_location_index]); this->log_list.push_back(log); this->color_list.push_back(this->base_color_list[(int)ofRandom(this->base_color_list.size())]); this->life_list.push_back(ofRandom(30, 50)); } for (int i = this->log_list.size() - 1; i >= 0; i--) { this->life_list[i] -= 1; if (this->life_list[i] < 0) { this->log_list.erase(this->log_list.begin() + i); this->color_list.erase(this->color_list.begin() + i); this->life_list.erase(this->life_list.begin() + i); continue; } auto deg = ofMap(ofNoise(glm::vec3(this->log_list[i].back() * 0.008, ofGetFrameNum() * 0.003)), 0, 1, -360, 360); this->log_list[i].push_back(this->log_list[i].back() + glm::vec2(radius * cos(deg * DEG_TO_RAD), radius * sin(deg * DEG_TO_RAD))); while (this->log_list[i].size() > 100) { this->log_list[i].erase(this->log_list[i].begin()); } } } //-------------------------------------------------------------- void ofApp::draw() { ofTranslate(ofGetWidth() * 0.5, ofGetHeight() * 0.5); for (int i = 0; i < this->log_list.size(); i++) { ofSetColor(this->color_list[i]); if (this->life_list[i] > 30) { ofSetLineWidth(1.5); } else { ofSetLineWidth(ofMap(this->life_list[i], 0, 30, 0, 1.5)); } ofBeginShape(); ofVertices(this->log_list[i]); ofEndShape(); } } //-------------------------------------------------------------- int main() { ofSetupOpenGL(720, 720, OF_WINDOW); ofRunApp(new ofApp()); } |
[ Link ]
https://github.com/junkiyoshi/Insta20210628
[ Kinako ]