[work 39] Radial lines
Movie
Source code
about
- 放射状の線
file
- 上部にあるファイル名が表示されているボタンを押すと、表示されるファイルが切り替わります
- 別ウィンドウ表示したい時や行番号などが無いRawMode表示したい時は、コード内右上のボタンを押してください(ボタンはマウスオーバーすると表示されます)
#include "ofMain.h" #include "ofApp.h" //================================ int main( ){ // 4K:4096x2160 // 2K:2048x1080 // FullHD:1920x1080 // HD:1440x1080 // HD720p:1280x720 // DVD:720x480 // setup the GL context // ofSetupOpenGL(1280,720, OF_WINDOW); ofSetupOpenGL(1024,1024, OF_WINDOW); // this kicks off the running of my app // can be OF_WINDOW or OF_FULLSCREEN // pass in width and height too: ofRunApp( new ofApp()); }
#pragma once #include "ofMain.h" #include "LoopNoise.hpp" #ifdef USE_MYCOLLIB #include "myColorLib.hpp" #endif class ofApp : public ofBaseApp{ public: ofApp(); ~ofApp(); 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); private: std::vector<shared_ptr<ofFbo>> fbos; std::vector<shared_ptr<LoopNoise>> lns; std::vector<ofColor> colors; float angle; #ifdef USE_MYCOLLIB myColorLib mc; #endif };
#include "ofApp.h" ofApp::ofApp(){ } ofApp::~ofApp(){ } //-------------------------------------------------------------- void ofApp::setup(){ double fps = 30; ofSetFrameRate(fps); ofBackground(255); ofSetBackgroundAuto(true); ofSetVerticalSync(true); #ifdef USE_MYCOLLIB mc.addColorSet(MYCOL_CUTE1); mc.addColorSet(MYCOL_CUTE2); #endif for (int i = 0; i < 8; i++) { fbos.push_back(make_shared<ofFbo>()); fbos.back()->allocate(ofGetWidth(), ofGetHeight()); #ifdef USE_MYCOLLIB colors.push_back(mc.getColor(ofRandom(1))); #else colors.push_back(ofColor(ofRandom(255), ofRandom(255), ofRandom(255))); #endif lns.push_back(make_shared<LoopNoise>()); } angle = 0; } //-------------------------------------------------------------- void ofApp::update(){ for (int i = 0; i < 8; i++) { fbos[i]->begin(); ofPushMatrix(); ofTranslate(ofGetWidth() / 2, ofGetHeight() / 2); ofSetColor(colors[i]); ofSetLineWidth(1); float rad = TWO_PI * ((float)angle / 360.f); float x = std::cos(rad) * (100 * (8 - i) + 10 * (lns[i]->getSignedLoopNoise(rad))); float y = std::sin(rad) * (100 * (8 - i) + 10 * (lns[i]->getSignedLoopNoise(rad))); ofDrawLine(0, 0, x, y); ofVec2f ext = ofVec2f(x, y); ext *= 1.02; ofSetColor(ofColor(255)); ofDrawLine(x, y, ext.x, ext.y); ofPopMatrix(); fbos[i]->end(); } angle += 0.5; } //-------------------------------------------------------------- void ofApp::draw(){ for (shared_ptr<ofFbo> &f : fbos) { f->draw(0, 0); } }
#ifndef LoopNoise_hpp #define LoopNoise_hpp #include <stdio.h> #include "ofMain.h" class LoopNoise { public: LoopNoise(); ~LoopNoise(); float getLoopNoise(float angle); float getSignedLoopNoise(float angle); private: ofVec2f center; float radius; }; #endif /* LoopNoise_hpp */
#include "LoopNoise.hpp" LoopNoise::LoopNoise() { center.x = ofRandom(1000); center.y = ofRandom(1000); radius = 10; } LoopNoise::~LoopNoise() { } float LoopNoise::getLoopNoise(float angle) { return ofNoise(center.x + std::cos(angle) * radius, center.y + std::sin(angle) * radius); } float LoopNoise::getSignedLoopNoise(float angle) { return ofSignedNoise(center.x + std::cos(angle) * radius, center.y + std::sin(angle) * radius); }
Link to the reference page
ソースコードで使用したAPIの中から要点になりそうなものをいくつか選んでリストアップしました。
category | API/Lib |
openframeworks | ofFbo |
Development environment
- openframeworks 0.10.1
- c++
- macOS
- Xcode