#define GLM_ENABLE_EXPERIMENTAL #include #include #include #include #include #include #include #include using namespace std; using namespace glm; float Y_AXIS = 5; float aspectRatio = 1; vec3 start_point = vec3(2.5,2.4,0.0); float startAngle = 0; float w = (2*M_PI*20)/360; // angular velocity 360:2*PI = 20:x int FPS = 60; // frames per sec float alpha = w/FPS ; vector square; mat4 T; vector createSquare(vec3 a , float stranica) { vec4 a4 = vec4( a, 1.0 ); vector points; vec4 ab = vec4( stranica * cos(startAngle), stranica *sin(startAngle), 0, 0); vec4 b = a4 + ab; vec4 bc = vec4( stranica * cos(startAngle+M_PI/2), stranica * sin(startAngle+M_PI/2), 0, 0); vec4 c = b + bc; vec4 d = a4 + bc; points.push_back(a4); 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 transform( vector &o, mat4 T ) { for ( auto it = o.begin(); it != o.end(); it ++ ) *it = T * *it; } void timer(int v) { transform( square, T ); 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(); square = createSquare(start_point,0.5); mat4 MT = translate( -start_point ); mat4 MR = rotate( w/FPS, vec3(0,0,1) ); mat4 MTP = translate( start_point ); T = MTP * MR * MT; glutDisplayFunc(display); glutTimerFunc(100, timer, 0); glutMouseFunc(mouseClick); glutKeyboardFunc(keyboardClick); glutMainLoop(); return 0; }