#include "ofApp.h"
//--------------------------------------------------------------
void ofApp::setup() {
ofSetFrameRate(60);
ofSetWindowTitle("openFrameworks");
ofBackground(239);
ofEnableDepthTest();
this->frame.setMode(ofPrimitiveMode::OF_PRIMITIVE_LINES);
}
//--------------------------------------------------------------
void ofApp::update() {
this->face.clear();
this->frame.clear();
ofSeedRandom(39);
for (int n = 0; n < 4; n++) {
glm::vec3 noise_seed = glm::vec3(ofRandom(1000), ofRandom(1000), ofRandom(1000));
for (int i = 0; i < 50; i++) {
auto location = glm::vec3(
ofMap(ofNoise(noise_seed.x, i * 0.01 + ofGetFrameNum() * 0.005), 0, 1, -500, 500),
ofMap(ofNoise(noise_seed.y, i * 0.01 + ofGetFrameNum() * 0.005), 0, 1, -500, 500),
ofMap(ofNoise(noise_seed.z, i * 0.01 + ofGetFrameNum() * 0.005), 0, 1, -500, 500));
for (int k = 0; k < i * 0.5; k++) {
auto tmp_location = glm::vec3(ofRandom(-1, 1), ofRandom(-1, 1), ofRandom(-1, 1));
tmp_location = glm::normalize(tmp_location) * ofRandom(10, 45);
auto rotate_deg = glm::vec3(ofRandom(360), ofRandom(360), ofRandom(360));
this->setBoxToMesh(this->face, this->frame, location + tmp_location, 15, 15, 15, rotate_deg);
}
}
}
}
//--------------------------------------------------------------
void ofApp::draw() {
this->cam.begin();
ofSetColor(39);
this->face.draw();
ofSetColor(239);
this->frame.drawWireframe();
this->cam.end();
}
//--------------------------------------------------------------
void ofApp::setBoxToMesh(ofMesh& face_target, ofMesh& frame_target, glm::vec3 location, float height, float width, float depth, glm::vec3 rotate_deg) {
int index = face_target.getVertices().size();
auto rotation_x = glm::rotate(glm::mat4(), rotate_deg.x * (float)DEG_TO_RAD, glm::vec3(1, 0, 0));
auto rotation_y = glm::rotate(glm::mat4(), rotate_deg.y * (float)DEG_TO_RAD, glm::vec3(0, 1, 0));
auto rotation_z = glm::rotate(glm::mat4(), rotate_deg.z * (float)DEG_TO_RAD, glm::vec3(0, 0, 1));
vector<glm::vec3> vertices;
vertices.push_back(glm::vec3(width * -0.5, height * 0.5, depth * -0.5));
vertices.push_back(glm::vec3(width * 0.5, height * 0.5, depth * -0.5));
vertices.push_back(glm::vec3(width * 0.5, height * 0.5, depth * 0.5));
vertices.push_back(glm::vec3(width * -0.5, height * 0.5, depth * 0.5));
vertices.push_back(glm::vec3(width * -0.5, height * -0.5, depth * -0.5));
vertices.push_back(glm::vec3(width * 0.5, height * -0.5, depth * -0.5));
vertices.push_back(glm::vec3(width * 0.5, height * -0.5, depth * 0.5));
vertices.push_back(glm::vec3(width * -0.5, height * -0.5, depth * 0.5));
for (auto& vertex : vertices) {
vertex = location + glm::vec4(vertex, 0) * rotation_z * rotation_y * rotation_x;
}
face_target.addVertices(vertices);
frame_target.addVertices(vertices);
face_target.addIndex(index + 0); face_target.addIndex(index + 1); face_target.addIndex(index + 2);
face_target.addIndex(index + 0); face_target.addIndex(index + 2); face_target.addIndex(index + 3);
face_target.addIndex(index + 4); face_target.addIndex(index + 5); face_target.addIndex(index + 6);
face_target.addIndex(index + 4); face_target.addIndex(index + 6); face_target.addIndex(index + 7);
face_target.addIndex(index + 0); face_target.addIndex(index + 4); face_target.addIndex(index + 1);
face_target.addIndex(index + 4); face_target.addIndex(index + 5); face_target.addIndex(index + 1);
face_target.addIndex(index + 1); face_target.addIndex(index + 5); face_target.addIndex(index + 6);
face_target.addIndex(index + 6); face_target.addIndex(index + 2); face_target.addIndex(index + 1);
face_target.addIndex(index + 2); face_target.addIndex(index + 6); face_target.addIndex(index + 7);
face_target.addIndex(index + 7); face_target.addIndex(index + 3); face_target.addIndex(index + 2);
face_target.addIndex(index + 3); face_target.addIndex(index + 7); face_target.addIndex(index + 4);
face_target.addIndex(index + 4); face_target.addIndex(index + 0); face_target.addIndex(index + 3);
frame_target.addIndex(index + 0); frame_target.addIndex(index + 1);
frame_target.addIndex(index + 1); frame_target.addIndex(index + 2);
frame_target.addIndex(index + 2); frame_target.addIndex(index + 3);
frame_target.addIndex(index + 3); frame_target.addIndex(index + 0);
frame_target.addIndex(index + 4); frame_target.addIndex(index + 5);
frame_target.addIndex(index + 5); frame_target.addIndex(index + 6);
frame_target.addIndex(index + 6); frame_target.addIndex(index + 7);
frame_target.addIndex(index + 7); frame_target.addIndex(index + 4);
frame_target.addIndex(index + 0); frame_target.addIndex(index + 4);
frame_target.addIndex(index + 1); frame_target.addIndex(index + 5);
frame_target.addIndex(index + 2); frame_target.addIndex(index + 6);
frame_target.addIndex(index + 3); frame_target.addIndex(index + 7);
}
//--------------------------------------------------------------
int main() {
ofSetupOpenGL(720, 720, OF_WINDOW);
ofRunApp(new ofApp());
}