/* Fonction de gestion du clavier spetial */ void Special_key(int key, int x, int y) { switch (key) { case GLUT_KEY_RIGHT: left_right+= 0.03; rotate_camera(left_right); break; case GLUT_KEY_LEFT: left_right-= 0.03; rotate_camera(left_right); break; case GLUT_KEY_UP: move_camera(0.02); break; case GLUT_KEY_DOWN: move_camera(-0.02); break; default: break; } glutPostRedisplay(); glutSwapBuffers(); }
/* Fonction de gestion du clavier spetial */ void Special_key(int key, int x, int y) { switch (key) { case GLUT_KEY_RIGHT: left_right+= 0.03; rotate_camera(left_right); break; case GLUT_KEY_LEFT: left_right-= 0.03; rotate_camera(left_right); break; case GLUT_KEY_UP: move_camera(0.02); break; case GLUT_KEY_DOWN: move_camera(-0.02); break; case GLUT_KEY_PAGE_DOWN: QueueRot+=1.0; queue_p[0] = Ecart * sin(DEGTORAD(QueueRot)) + (sphere_p[0][0]); queue_p[1] = sphere_p[1][0]; queue_p[2] = Ecart * cos(DEGTORAD(QueueRot)) + (sphere_p[2][0]); queue_ip[0] = Ecart * sin(DEGTORAD(QueueRot)) + (sphere_p[0][0]); queue_ip[1] = sphere_ip[1][0]; queue_ip[2] = Ecart * cos(DEGTORAD(QueueRot)) + (sphere_p[2][0]); break; case GLUT_KEY_PAGE_UP: QueueRot-=1.0; queue_p[0] = Ecart * sin(DEGTORAD(QueueRot)) + (sphere_p[0][0]); queue_p[1] = sphere_p[1][0]; queue_p[2] = Ecart * cos(DEGTORAD(QueueRot)) + (sphere_p[2][0]); queue_ip[0] = Ecart * sin(DEGTORAD(QueueRot)) + (sphere_p[0][0]); queue_ip[1] = sphere_ip[1][0]; queue_ip[2] = Ecart * cos(DEGTORAD(QueueRot)) + (sphere_p[2][0]); break; default: break; } glutPostRedisplay(); glutSwapBuffers(); }
int rotate_object(t_env *env, int axis, int more_less) { t_mov mov[3]; mov[0] = rotate_y; mov[1] = rotate_x; mov[2] = rotate_z; if (!env->selected) rotate_camera(env, axis, more_less); mov[axis](env, axis, more_less); return (1); }
int main() { set_perspective(1, 100.0); init(); //clear the screen draw_rect(0,0,320,240,0x0); flush_to_lcd(); uint32_t count = 1; char str[10]; uint16_t colors[] = {0xF800, 0xF600, 0x7E0, 0x1F, 0xFFFF,0xF800, 0xF600, 0x7E0, 0x1F, 0xFFFF,0xF800, 0xF600, 0x7E0, 0x1F, 0xFFFF}; //int16_t centerx = 320/2; //int16_t centery = 240/2; //int16_t polysize = 30; int16_t rot = 0; polygon poly; #ifdef FORAERY for (;;) #endif { count = 0; START_MEASURING_CYCLES(); rot++; if (rot >= 360) rot = 0; /* for (int i = 0; i < 15; i++) { poly.x0 = (i-7)*20+centerx+lcd_cos(rot+120)*polysize; poly.y0 = centery+lcd_sin(rot+120)*polysize; poly.x1 = (i-7)*20+centerx+lcd_cos(rot+120*2)*polysize; poly.y1 = centery+lcd_sin(rot+120*2)*polysize; poly.x2 = (i-7)*20+centerx+lcd_cos(rot+120*3)*polysize; poly.y2 = centery+lcd_sin(rot+120*3)*polysize; draw_b_poly(poly, colors[i]); } for (int i = 0; i < 15; i++) { poly.x0 = (i-7)*20+centerx+lcd_cos(rot+120)*polysize; poly.y0 = 20+centery+lcd_sin(rot+120)*polysize; poly.x1 = (i-7)*20+centerx+lcd_cos(rot+120*2)*polysize; poly.y1 = 20+centery+lcd_sin(rot+120*2)*polysize; poly.x2 = (i-7)*20+centerx+lcd_cos(rot+120*3)*polysize; poly.y2 = 20+centery+lcd_sin(rot+120*3)*polysize; draw_b_poly(poly, colors[i]); } */ translate_camera(Vector3D(0,1,4)); rotate_camera(20,lcd_sin(rot)*180.0, 0); Polygon3D p; //front p.p0 = Vector3D(-1, 1, 1); p.p1 = Vector3D(-1,-1, 1); p.p2 = Vector3D( 1,-1, 1); draw_poly3D(p, colors[0]); p.p0 = Vector3D(-1, 1, 1); p.p1 = Vector3D( 1,-1, 1); p.p2 = Vector3D( 1, 1, 1); draw_poly3D(p, colors[0]); //left side p.p0 = Vector3D(-1, 1, -1); p.p1 = Vector3D(-1,-1, -1); p.p2 = Vector3D(-1,-1, 1); draw_poly3D(p, colors[1]); p.p0 = Vector3D(-1, 1,-1); p.p1 = Vector3D(-1,-1, 1); p.p2 = Vector3D(-1, 1, 1); draw_poly3D(p, colors[1]); //right side p.p0 = Vector3D( 1, 1, 1); p.p1 = Vector3D( 1,-1, 1); p.p2 = Vector3D( 1,-1,-1); draw_poly3D(p, colors[2]); p.p0 = Vector3D( 1, 1, 1); p.p1 = Vector3D( 1,-1,-1); p.p2 = Vector3D( 1, 1,-1); draw_poly3D(p, colors[2]); //backside p.p0 = Vector3D( 1, 1,-1); p.p1 = Vector3D( 1,-1,-1); p.p2 = Vector3D(-1,-1,-1); draw_poly3D(p, colors[3]); p.p0 = Vector3D( 1, 1,-1); p.p1 = Vector3D(-1,-1,-1); p.p2 = Vector3D(-1, 1,-1); draw_poly3D(p,colors[3]); //top p.p0 = Vector3D(-1, 1,-1); p.p1 = Vector3D(-1, 1, 1); p.p2 = Vector3D( 1, 1, 1); draw_poly3D(p, colors[4]); p.p0 = Vector3D(-1, 1,-1); p.p1 = Vector3D( 1, 1, 1); p.p2 = Vector3D( 1, 1,-1); draw_poly3D(p, colors[4]); draw_poly_buffer(); draw_text(str,0,220,0xF800); flush_to_lcd(); END_MEASURING_CYCLES(count); #ifdef FORAERY itoa(66000000/count,str); #endif } #ifdef FORPC while (sfmlwindow.isOpen()) { //input sf::Vector2i localPosition = sf::Mouse::getPosition(sfmlwindow); if (sf::Mouse::isButtonPressed(sf::Mouse::Left)) { //std::cout<<"x: " <<localPosition.x << " y: " << localPosition.y <<"\n"; } sf::Event eventti; while (sfmlwindow.pollEvent(eventti)) { switch(eventti.type) { case sf::Event::Closed: sfmlwindow.close(); break; default: break; } } //logic rot++; if (rot >= 360) rot = 0; translate_camera(Vector3D(0,1,4)); rotate_camera(20,lcd_sin(rot)*180.0, 0); Polygon3D p; //front p.p0 = Vector3D(-1, 1, 1); p.p1 = Vector3D(-1,-1, 1); p.p2 = Vector3D( 1,-1, 1); draw_poly3D(p, colors[0]); p.p0 = Vector3D(-1, 1, 1); p.p1 = Vector3D( 1,-1, 1); p.p2 = Vector3D( 1, 1, 1); draw_poly3D(p, colors[0]); //left side p.p0 = Vector3D(-1, 1, -1); p.p1 = Vector3D(-1,-1, -1); p.p2 = Vector3D(-1,-1, 1); draw_poly3D(p, colors[1]); p.p0 = Vector3D(-1, 1,-1); p.p1 = Vector3D(-1,-1, 1); p.p2 = Vector3D(-1, 1, 1); draw_poly3D(p, colors[1]); //right side p.p0 = Vector3D( 1, 1, 1); p.p1 = Vector3D( 1,-1, 1); p.p2 = Vector3D( 1,-1,-1); draw_poly3D(p, colors[2]); p.p0 = Vector3D( 1, 1, 1); p.p1 = Vector3D( 1,-1,-1); p.p2 = Vector3D( 1, 1,-1); draw_poly3D(p, colors[2]); //backside p.p0 = Vector3D( 1, 1,-1); p.p1 = Vector3D( 1,-1,-1); p.p2 = Vector3D(-1,-1,-1); draw_poly3D(p, colors[3]); p.p0 = Vector3D( 1, 1,-1); p.p1 = Vector3D(-1,-1,-1); p.p2 = Vector3D(-1, 1,-1); draw_poly3D(p,colors[3]); //top p.p0 = Vector3D(-1, 1,-1); p.p1 = Vector3D(-1, 1, 1); p.p2 = Vector3D( 1, 1, 1); draw_poly3D(p, colors[4]); p.p0 = Vector3D(-1, 1,-1); p.p1 = Vector3D( 1, 1, 1); p.p2 = Vector3D( 1, 1,-1); draw_poly3D(p, colors[4]); draw_poly_buffer(); draw_text(str,0,220,0xF800); flush_to_lcd(); //render simscreen_render(); sfmlwindow.display(); //sleep sf::sleep(sf::milliseconds(33)); } #endif return 0; }