// Draw method void displayFcn() { int xc = winWidth / 2, yc = winHeight / 2; float green[3] = {0.0, 0.75, 0.0}; float orange[3] = {1.0, 0.6, 0}; float red[3] = {1.0, 0.0, 0.0}; float blue[3] = {0.0, 0.0, 1.0}; // Clear display window. glClear(GL_COLOR_BUFFER_BIT); glColor3f(1.0, 0.0, 0.0); Sun sun("Sun", xc, yc, 3.0); glColor3fv(green); Planet earth("Earth", xc, yc, 1.0, 1.0); glColor3fv(orange); Planet mercury("Mercury", xc, yc, 0.382, 0.39); glColor3fv(blue); Planet venus("Venus", xc, yc, 0.949, 0.72); glColor3fv(red); Planet mars("Mars", xc, yc, 0.532, 1.52); glFlush( ); }
void sun() { /*setup lightsource 1 at the center of the world*/ GLfloat light_position[] = {0.0, 0.0, 0.0, 1.0}; GLfloat light_ambient[] = {0.0, 0.0, 0.0, 0.0}; //"[...]keine ambient Komponente[...]" GLfloat light_diffuse[] = {1.0, 1.0, 1.0, 1.0}; //"[...]kräftige Diffuse- und" GLfloat light_specular[] = {1.0, 1.0, 1.0, 1.0}; //"Specular Komponenten besitzen." glLightfv(GL_LIGHT1, GL_AMBIENT, light_ambient); glLightfv(GL_LIGHT1, GL_DIFFUSE, light_diffuse); glLightfv(GL_LIGHT1, GL_POSITION, light_position); glLightfv(GL_LIGHT1, GL_SPECULAR, light_specular); /*setup material specification of the sun*/ GLfloat yellow[] = {1.0, 1.0, 0.0, 1.0}; if(glIsEnabled(GL_LIGHT1)) { glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, yellow); } /*setup sphere representing the sun*/ glColor3f(1.0, 1.0, 0.0); planet(0.8); glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, zeroes); // disable emission for everybody else earth(); mars(); }
void display(void) { lPosition(); /////////////////////////////////////////////////////////////////////////////////////////////////////// glClear (GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glColor3f (1.0, 1.0, 1.0); glTexGeni(GL_S,GL_TEXTURE_GEN_MODE,GL_OBJECT_LINEAR); //Texturing Contour Anchored To The Object glTexGeni(GL_T,GL_TEXTURE_GEN_MODE,GL_OBJECT_LINEAR); //Texturing Contour Anchored To The Object //glEnable(GL_TEXTURE_GEN_S); //Auto Texture Generation //glEnable(GL_TEXTURE_GEN_T); //Auto Texture Generation glEnable(GL_TEXTURE_2D); /////////////////////////////////////////////////////////////////////////////////////////////////////// stars(); //glBindTexture(GL_TEXTURE_2D, g_cactus[1]); //gluSphere(g_text,0.4,48,48); stars(); sun(); adam(); hesper(); earth(); mars(); jupiter(); saturn(); uranus(); neptune(); /////////////////////////////////////////////////////////////////////////////////////////////////////// glDisable(GL_TEXTURE_2D); //glDisable(GL_TEXTURE_GEN_S); //Auto Texture Generation //glDisable(GL_TEXTURE_GEN_T); glutSwapBuffers(); }
int main(int argc, char* argv[]) { struct marsopts opts = init(argc, argv); Agraph_t* g = agread(opts.fin, (Agdisc_t*)NULL); Agnode_t* n; mat z; init_graph(g); z = mars(g, opts); mat_scalar_mult(z, opts.scale); if(opts.viewer) { viewer(argc, argv); } else { for(n = agfstnode(g); n; n = agnxtnode(g,n)) { int id = getid(n); char* s = pos_to_str(&z->m[mindex(id, 0, z)], z->c); agset(n,"pos",s); free(s); } agwrite(g, opts.fout); } mat_free(z); clean_up(g); agclose(g); return 0; }
//-------------------------------------------------------------- void ofApp::setup(){ //set background to black ofBackground(0,0,0); //makes planet ( xVel, yVel, xPos, yPos,mass, radius, red, green, blue) Planet earth(0, 1.5, 700,400,2000, 5, 255, 0, 0); planets.push_back(earth); earth.~Planet(); Planet mars( 2, 0, 500, 200, 2000, 5, 0, 255, 0); planets.push_back(mars); mars.~Planet(); Planet mars2( 2, 0, 400, 100, 2000, 5, 0, 0, 255); planets.push_back(mars2); mars2.~Planet(); //make sun (x, y, mass, radius, R, G, B) Sun sunOne(400, 400, 10000000000, 20, 255, 255, 0); suns.push_back(sunOne); sunOne.~Sun(); }
void MainWindow::render() { glViewport(0, 0, width(), height()); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); m_program->bind(); GLfloat colors[] = { 1.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f }; time_t now; // time(&now); difftime(time, now); double move = 1; if(speed != 0) { move = speed * m_frame / screen()->refreshRate(); } QMatrix4x4 scale; QMatrix4x4 orbitRotMatrix; QMatrix4x4 orbitMatrix; QMatrix4x4 rotMatrix; scale.scale(4.0f); rotMatrix.rotate(rotateY * move, 0, 1, 0); cg::Planet sonne("sonne", &myMesh->v[0], scale, rotMatrix, orbitMatrix, orbitRotMatrix); scale.setToIdentity(); orbitRotMatrix.setToIdentity(); orbitMatrix.setToIdentity(); rotMatrix.setToIdentity(); scale.scale(0.5f); orbitRotMatrix.rotate(rotateY * move, 0, 1, 0); orbitMatrix.translate(5.0f, 0, 0); rotMatrix.rotate(rotateY * move, 0, 1, 0); cg::Planet erde("erde", &myMesh->v[0], scale, rotMatrix, orbitMatrix, orbitRotMatrix); scale.setToIdentity(); orbitRotMatrix.setToIdentity(); orbitMatrix.setToIdentity(); rotMatrix.setToIdentity(); scale.scale(0.3f); orbitRotMatrix.rotate(rotateY * move, 0, 1, 0); orbitMatrix.translate(1.0f, 0, 0); rotMatrix.rotate(rotateY * move, 0, 1, 0); cg::Planet mond("mond", &myMesh->v[0], scale, rotMatrix, orbitMatrix, orbitRotMatrix); scale.setToIdentity(); orbitRotMatrix.setToIdentity(); orbitMatrix.setToIdentity(); rotMatrix.setToIdentity(); scale.scale(0.5f); orbitRotMatrix.rotate(0.5 * rotateY * move + 15, 0, 1, 0); orbitMatrix.translate(10.0f, 0, 0); rotMatrix.rotate(rotateY * move, 0, 1, 0); cg::Planet mars("mars", &myMesh->v[0], scale, rotMatrix, orbitMatrix, orbitRotMatrix); scale.setToIdentity(); orbitRotMatrix.setToIdentity(); orbitMatrix.setToIdentity(); rotMatrix.setToIdentity(); scale.scale(0.3f); orbitRotMatrix.rotate(rotateY * move, 0, 1, 0); orbitMatrix.translate(1.0f, 0, 0); rotMatrix.rotate(rotateY * move, 0, 1, 0); cg::Planet deimos("deimos", &myMesh->v[0], scale, rotMatrix, orbitMatrix, orbitRotMatrix); scale.setToIdentity(); orbitRotMatrix.setToIdentity(); orbitMatrix.setToIdentity(); rotMatrix.setToIdentity(); scale.scale(0.15f); orbitRotMatrix.rotate(rotateY * move *15, 0, 1, 0); orbitMatrix.translate(1.0f, 0, 0); rotMatrix.rotate(rotateY * move, 0, 1, 0); cg::Planet phobos("phobos", &myMesh->v[0], scale, rotMatrix, orbitMatrix, orbitRotMatrix); std::vector<cg::Planet*> vecPlanet {&sonne, &erde, &mond, &mars, &deimos, &phobos}; cg::Sunsystem sys; sys.addChild(&sonne)->addChild(&erde)->addChild(&mond); sys.addChild(&mars)->addChild(&deimos); sys.getChild(1)->addChild(&phobos); sys.run(); QMatrix4x4 camMatrix; camMatrix.perspective(60.f, 4.0f/3.0f, 0.1f, 100.0f); camMatrix.translate(0, 0, -15); camMatrix.rotate(45, 1, 0, 0); glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, NULL); // glVertexAttribPointer(m_posAttr, 3, GL_FLOAT, GL_FALSE, 0, &myMesh->v[0]); // glVertexAttribPointer(m_colAttr, 3, GL_FLOAT, GL_FALSE, 0, colors); glEnableVertexAttribArray(0); // glEnableVertexAttribArray(1); for(cg::Planet *n : vecPlanet) { m_program->setUniformValue(m_matrixUniform, camMatrix * n->resultmatrix); //glDrawArrays(GL_TRIANGLES, 0, myMesh->v.size()/3); glDrawElements(GL_TRIANGLES, myMesh->v_f.size(), GL_UNSIGNED_INT, 0); // glDrawElements(GL_TRIANGLES, myMesh->v_f.size(), GL_UNSIGNED_SHORT, &myMesh->v_f[0]); } glDisableVertexAttribArray(1); glDisableVertexAttribArray(0); m_program->release(); ++m_frame; // time(&time); }
void MainWindow::render() { glViewport(0, 0, width(), height()); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); m_program->bind(); // GLfloat colors[] = { // 1.0f, 0.0f, 0.0f, // 0.0f, 1.0f, 0.0f, // 0.0f, 0.0f, 1.0f // }; now = clock(); m_frame = m_frame + speed*difftime(now, lastTime); lastTime = now; // Planet Matrix scale.scale(4.0f); rotMatrix.rotate(m_frame * 0.2, 0, 1, 0); cg::Planet sonne("sonne", &myMesh->v[0], scale, rotMatrix, orbitMatrix, orbitRotMatrix); scale.setToIdentity(); orbitRotMatrix.setToIdentity(); orbitMatrix.setToIdentity(); rotMatrix.setToIdentity(); scale.scale(0.5f); orbitRotMatrix.rotate(m_frame, 0, 1, 0); orbitMatrix.translate(5.0f, 0, 0); rotMatrix.rotate(m_frame, 0, 1, 0); cg::Planet erde("erde", &myMesh->v[0], scale, rotMatrix, orbitMatrix, orbitRotMatrix); scale.setToIdentity(); orbitRotMatrix.setToIdentity(); orbitMatrix.setToIdentity(); rotMatrix.setToIdentity(); scale.scale(0.3f); orbitRotMatrix.rotate(m_frame, 0, 1, 0); orbitMatrix.translate(1.0f, 0, 0); rotMatrix.rotate(m_frame, 0, 1, 0); cg::Planet mond("mond", &myMesh->v[0], scale, rotMatrix, orbitMatrix, orbitRotMatrix); scale.setToIdentity(); orbitRotMatrix.setToIdentity(); orbitMatrix.setToIdentity(); rotMatrix.setToIdentity(); scale.scale(0.5f); orbitRotMatrix.rotate(0.5 * m_frame + 15, 0, 1, 0); orbitMatrix.translate(10.0f, 0, 0); rotMatrix.rotate(m_frame, 0, 1, 0); cg::Planet mars("mars", &myMesh->v[0], scale, rotMatrix, orbitMatrix, orbitRotMatrix); scale.setToIdentity(); orbitRotMatrix.setToIdentity(); orbitMatrix.setToIdentity(); rotMatrix.setToIdentity(); scale.scale(0.3f); orbitRotMatrix.rotate(m_frame, 0, 1, 0); orbitMatrix.translate(1.0f, 0, 0); rotMatrix.rotate(m_frame, 0, 1, 0); cg::Planet deimos("deimos", &myMesh->v[0], scale, rotMatrix, orbitMatrix, orbitRotMatrix); scale.setToIdentity(); orbitRotMatrix.setToIdentity(); orbitMatrix.setToIdentity(); rotMatrix.setToIdentity(); scale.scale(0.15f); orbitRotMatrix.rotate(m_frame *15, 0, 1, 0); orbitMatrix.translate(1.0f, 0, 0); rotMatrix.rotate(m_frame, 0, 1, 0); cg::Planet phobos("phobos", &myMesh->v[0], scale, rotMatrix, orbitMatrix, orbitRotMatrix); std::vector<cg::Planet*> vecPlanet {&sonne, &erde, &mond, &mars, &deimos, &phobos}; cg::Sunsystem sys; sys.addChild(&sonne)->addChild(&erde)->addChild(&mond); sys.addChild(&mars)->addChild(&deimos); sys.getChild(1)->addChild(&phobos); sys.run(); projMatrix.setToIdentity(); //projMatrix.perspective(60.f, 4.0f/3.0f, 0.1f, 100.0f); projMatrix.perspective(60.f, width()/height(), 0.1f, 100.0f); viewMatrix.setToIdentity(); viewMatrix.translate(0, 0, -15); viewMatrix.rotate(45, 1, 0, 0); QVector3D ambient(0.2, 0.2, 0.2); QVector3D diffuse_albedo(1.0, 0.88, 0.25); QVector3D specular_albedo(1.0, 1.0, 1.0); GLfloat specular_power = 128.0; QVector3D light_color(0.2, 0.7, 0.2); for(cg::Planet* n : vecPlanet) { m_program->setUniformValue(m_mv_matrix, n->resultmatrix); m_program->setUniformValue(m_view_matrix, viewMatrix); m_program->setUniformValue(m_proj_matrix, projMatrix); m_program->setUniformValue(m_ambient, ambient); m_program->setUniformValue(m_diffuse_albedo, diffuse_albedo); m_program->setUniformValue(m_specular_albedo, specular_albedo); m_program->setUniformValue(m_specular_power, specular_power); for(std::vector<GLfloat>& light : lightPositions) { // Because of QT QVector4D lightPosition (light[0], light[1], light[2], light[3]); m_program->setUniformValue(m_light, lightPosition); m_program->setUniformValue(m_light_color, light_color); glDrawElements(GL_TRIANGLES, myMesh->v_f.size(), GL_UNSIGNED_INT, 0); } } m_program->release(); //Clear Matrices scale.setToIdentity(); orbitRotMatrix.setToIdentity(); orbitMatrix.setToIdentity(); rotMatrix.setToIdentity(); }
// main func is temporary ugly int main(int argc, char ** argv) { srand(time(NULL)); glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH | GLUT_MULTISAMPLE | GLUT_ACCUM); glutInitWindowPosition(glutGet(GLUT_SCREEN_WIDTH) / 14, glutGet(GLUT_SCREEN_HEIGHT) / 21); glutInitWindowSize(glutGet(GLUT_SCREEN_WIDTH) * 6 / 7, glutGet(GLUT_SCREEN_HEIGHT) * 6/7); int window = glutCreateWindow("Star System"); //glutFullScreen(); glEnable(GL_ACCUM); glEnable(GL_DEPTH_TEST); //glEnable(GL_LINE_SMOOTH); //glEnable(GL_CULL_FACE); glEnable(GL_LIGHTING); //glCullFace(GL_BACK); //glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE); glutInitContextFlags(GLUT_FORWARD_COMPATIBLE); TwInit(TW_OPENGL, NULL); glutDisplayFunc(GlutCB::Display); glutReshapeFunc(GlutCB::Reshape); glutMouseFunc(GlutCB::Mouse); glutMotionFunc(GlutCB::Motion); glutPassiveMotionFunc(GlutCB::PassiveMotion); glutKeyboardFunc(GlutCB::Keyboard); glutKeyboardUpFunc(GlutCB::KeyboardUp); glutSpecialFunc(GlutCB::Special); glutSpecialUpFunc(GlutCB::SpecialUp); TwGLUTModifiersFunc(glutGetModifiers); glutTimerFunc(Constants::deltaTime, GlutCB::Timer, 1); glClearColor(0.0f, 0.0f, 0.0f, 1.0f); Star sun("Sun", 2.0e30, 1.4e9, Vector3f(1.0f, 1.0f, 0.0f), Vector3d(0.0, 0.0, 0.0), Vector3d(0.0, 0.0, 0.0)); Planet mercury("Mercury", 3.3e23, 5.0e6, Vector3f(0.8f, 0.0f, 0.0f), Vector3d(4.6e10, 0.0, 0.0), Vector3d(0.0, 4.7e4, 0.0)); Planet venus("Venus", 4.8e24, 1.2e7, Vector3f(0.8f, 0.6f, 0.7f), Vector3d(1.0e11, 0.0, 0.0), Vector3d(0.0, 3.5e4, 0.0)); Planet earth("Earth", 6.0e24, 1.2e7, Vector3f(0.0f, 0.0f, 1.0f), Vector3d(1.5e11, 0.0, 0.0), Vector3d(0.0, 3.0e4, 0.0)); Sputnik moon("Moon", 7.35e22, 3.4e6, Vector3f(0.7f, 0.7f, 0.7f), &earth, Vector3d(4.0e8, 0.0, 0.0), Vector3d(0.0, 1.0e3, 0.0)); Planet mars("Mars", 6.4e23, 6.7e6, Vector3f(1.0f, 0.0f, 0.0f), Vector3d(2.0e11, 0.0, 0.0), Vector3d(0.0, 2.4e4, 0.0)); Teapot rasselsTeapot("RasselsTeapot", 0.0, 0.3, Vector3f(1.0f, 1.0f, 1.0f), Vector3d(3.0e11, 0.0, 0.0), Vector3d(0.0, 2.0e4, 0.0)); Planet jupiter("Jupiter", 1.9e27, 1.3e8, Vector3f(1.0f, 0.8f, 0.0f), Vector3d(7.4e11, 0.0, 0.0), Vector3d(0.0, 1.3e4, 0.0)); RenderManager * renderManager = RenderManager::getInstance(); renderManager->initAll(); Camera * camera = new Camera(); ControlPane * ctrlPane = ControlPane::getInstance(camera, renderManager); ctrlPane->show(); TwCopyStdStringToClientFunc(CopyStdStringToClient); ctrlPane->addSpaceObject(&sun); renderManager->renderSpaceObject(&sun); ctrlPane->addSpaceObject(&mercury); renderManager->renderSpaceObject(&mercury); ctrlPane->addSpaceObject(&venus); renderManager->renderSpaceObject(&venus); ctrlPane->addSpaceObject(&earth); renderManager->renderSpaceObject(&earth); ctrlPane->addSpaceObject(&moon); renderManager->renderSpaceObject(&moon); ctrlPane->addSpaceObject(&mars); renderManager->renderSpaceObject(&mars); ctrlPane->addSpaceObject(&rasselsTeapot); renderManager->renderSpaceObject(&rasselsTeapot); ctrlPane->addSpaceObject(&jupiter); renderManager->renderSpaceObject(&jupiter); GlutCBInitializer::init(camera, renderManager); glutMainLoop(); delete ctrlPane; glutDestroyWindow(window); return EXIT_SUCCESS; }