[ Video ]
[ About ]
ねじれ円。
Twisting circle.
[ 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  | 
						#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; };  | 
					
| 
					 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  | 
						#include "ofApp.h"	 //-------------------------------------------------------------- void ofApp::setup() { 	ofSetFrameRate(60); 	ofSetWindowTitle("openFrameworks"); 	ofBackground(239); 	ofSetColor(39); 	ofSetLineWidth(3); 	ofEnableDepthTest(); } //-------------------------------------------------------------- void ofApp::update() { 	ofSeedRandom(36); } //-------------------------------------------------------------- void ofApp::draw() { 	this->cam.begin(); 	auto len = 10; 	auto noise_seed_x = ofRandom(1000); 	auto noise_seed_y = ofRandom(1000); 	auto noise_seed_z = ofRandom(1000); 	for (auto radius = 10; radius < 150; radius += len + 2) { 		auto noise_value_x = ofNoise(noise_seed_x, radius * 0.005 + ofGetFrameNum() * 0.005); 		auto angle_x = 0.f; 		if (noise_value_x < 0.2) { angle_x = ofMap(noise_value_x, 0, 0.2, -PI, 0); } 		if (noise_value_x > 0.8) { angle_x = ofMap(noise_value_x, 0.8, 1, 0, PI); } 		auto noise_value_y = ofNoise(noise_seed_y, radius * 0.005 + ofGetFrameNum() * 0.005); 		auto angle_y = 0.f; 		if (noise_value_y < 0.2) { angle_y = ofMap(noise_value_y, 0, 0.2, -PI, 0); } 		if (noise_value_y > 0.8) { angle_y = ofMap(noise_value_y, 0.8, 1, 0, PI); } 		auto noise_value_z = ofNoise(noise_seed_z, radius * 0.005 + ofGetFrameNum() * 0.005); 		auto angle_z = 0.f; 		if (noise_value_z < 0.2) { angle_z = ofMap(noise_value_z, 0, 0.2, -PI, 0); } 		if (noise_value_z > 0.8) { angle_z = ofMap(noise_value_z, 0.8, 1, 0, PI); } 		vector<glm::vec3> out, in, line_out, line_in; 		for (auto deg = 0; deg <= 360; deg++) { 			auto location = glm::vec3((radius + len * 0.5) * cos(deg * DEG_TO_RAD), (radius + len * 0.5) * sin(deg * DEG_TO_RAD), 0); 			auto rotation_x = glm::rotate(glm::mat4(), angle_x, glm::vec3(1, 0, 0)); 			auto rotation_y = glm::rotate(glm::mat4(), angle_y, glm::vec3(0, 1, 0)); 			auto rotation_z = glm::rotate(glm::mat4(), angle_z, glm::vec3(0, 0, 1)); 			location = glm::vec4(location, 0) * rotation_z * rotation_y * rotation_x; 			out.push_back(glm::normalize(location) * (radius + len * 0.5)); 			in.push_back(glm::normalize(location) * (radius - len * 0.5)); 			line_out.push_back(glm::normalize(location) * (radius + len * 0.5 + 1)); 			line_in.push_back(glm::normalize(location) * (radius - len * 0.5 - 1)); 		} 		std::reverse(in.begin(), in.end()); 		ofFill(); 		ofSetColor(239); 		ofBeginShape(); 		ofVertices(out); 		ofVertices(in); 		ofEndShape(true); 		ofNoFill(); 		ofSetColor(39); 		ofBeginShape(); 		ofVertices(line_out); 		ofEndShape(true); 		ofBeginShape(); 		ofVertices(line_in); 		ofEndShape(true); 	} 	this->cam.end(); } //-------------------------------------------------------------- int main() { 	ofSetupOpenGL(720, 720, OF_WINDOW); 	ofRunApp(new ofApp()); }  | 
					
[ Link ]
https://github.com/junkiyoshi/Insta20190827