#include #include #include #include #include #include #include using namespace std; double scale = 1.0; double pi=3.1415926953; double dx=0; double dy=0; void render_square(double x, double y) { glPushMatrix(); double dx = 0.5; double dy = 0.5; glBegin(GL_POLYGON); glVertex2f(x, y); glVertex2f(x + dx, y); glVertex2f(x + dx, y - dy); glVertex2f(x, y - dy); glEnd(); glPopMatrix(); } void draw_line(double x, double y, double x1, double y1) { glBegin(GL_LINES); glVertex2d(x, y); glVertex2d(x1, y1); glEnd(); } void draw_circle(int x0,int y0){ double r,x,y; r=1; x=x0; y=y0; float step= pi/6; for (float f=0; f<2*pi; f+=step){ draw_line(x+x0,y+y0,cos(f)*r+x0,sin(f)*r+y0); x=cos(f)*r; y=sin(f)*r; } } void draw_coor(){ draw_line(-1000 + dx, 0 + dy, 1000 + dx, 0 + dy); draw_line(0 + dx, -1000 + dy, 0 + dx, 1000 + dy); for(float i = -1000; i < 1000; i++) draw_line(-0.05 + dx, i + dy, 0.05 + dx, i + dy); for(float i = -1000; i < 1000; i++) draw_line(i + dx, -0.05 + dy, i + dx, 0.05 + dy); } void Render() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); glTranslatef(0, 0, -10); glColor3d(1, 1, 1); glScalef(scale, scale, scale); //draw_line(0,0,1,1) draw_coor(); draw_circle(5,5); glFlush(); } void update(int t) { Render(); glutTimerFunc(50, update, 0); } void keyb(unsigned char key, int x, int y) { if(key == '+') { scale *= 1.1; } if(key == '-') { scale *= 0.9; } Render(); } void reshape(int w, int h) { // предупредим деление на ноль // если окно сильно перетянуто будет if(h == 0) h = 1; float ratio = 1.0* w / h; // используем матрицу проекции glMatrixMode(GL_PROJECTION); // Reset матрицы glLoadIdentity(); // определяем окно просмотра glViewport(0, 0, w, h); // установить корректную перспективу. gluPerspective(45,ratio,1,1000); // вернуться к модели glMatrixMode(GL_MODELVIEW); } int main(int argc, char **argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH); glutInitWindowSize(800, 600); glutCreateWindow("Physics Engine"); glEnable(GL_DEPTH_TEST); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glClearColor(0.23, 0.4, 0.7, 0.0); glutTimerFunc(50, update, 0); glutReshapeFunc(reshape); glutDisplayFunc(Render); glutKeyboardFunc(keyb); glutMainLoop(); }