#include #include #include #include using namespace std; using namespace glm; double Y_AXIS = 5; double aspectRatio = 1; vec2 start_point = vec2(2.5,2.4); double startAngle = 0; double w = (2*M_PI*20)/360; // angular velocity 360:2*PI = 20:x int FPS = 60; // frames per sec double alpha = w/FPS ; vector square; void getDots(vec2 C, float stranica) { square.clear(); double alpha2 = 2 * M_PI / 4; for(int i = 0; i < 4 ; i++) { vec2 normalised(cos(startAngle + i * alpha2 ), sin(startAngle + i * alpha2)); vec2 i_vector = normalised * stranica; vec2 i_point = C + i_vector; square.push_back(i_point); } } vector createSquare(vec2 a , double stranica) { vector points; vec2 ab = vec2( stranica * cos(startAngle), stranica *sin(startAngle)); vec2 b = a + ab; vec2 bc = vec2( stranica * cos(startAngle+M_PI/2), stranica * sin(startAngle+M_PI/2)); vec2 c = b+bc; vec2 d = a + bc; points.push_back(a); points.push_back(b); points.push_back(c); points.push_back(d); return points; } void draw(GLenum mode, vector points) { glColor3f(1.0, 1.0, 1.0); glBegin(mode); for(int i = 0; i < points.size(); i++) glVertex2d(points[i].x, points[i].y); glEnd(); } void display() { glClear(GL_COLOR_BUFFER_BIT); glColor3f(1.0, 1.0, 1.0); draw(GL_POLYGON,square); glFlush(); glutPostRedisplay(); } void timer(int v) { startAngle+=w/FPS; getDots(start_point,0.5); glutTimerFunc(1000/FPS, timer, v); glutPostRedisplay(); } void init() { glClearColor (0.0, 0.0, 0.0, 0.0); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(0.0, Y_AXIS*aspectRatio, 0.0, Y_AXIS, -1.0, 1.0); } void mouseClick(int button, int state, int x, int y) { } void keyboardClick(unsigned char key, int x, int y) { } int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); glutInitWindowSize (500, 500); glutInitWindowPosition (100, 100); glutCreateWindow ("Kvadrat1"); init(); getDots(start_point,0.5); glutDisplayFunc(display); glutTimerFunc(100, timer, 0); glutMouseFunc(mouseClick); glutKeyboardFunc(keyboardClick); glutMainLoop(); return 0; }