TASK 1: Animated Sine CurveWrite a Python program one.py with PyOpenGL to display an animation of sine function y=Asin(x+B), satifying the following requirements:The window application’s size is (600, 600), and its upper-left corner is at (250, 250) on the screenThe window application’s title is Animated Sine CurveThe ranges of x and y are [-4, 4] (x is in radians);The amplitude A is a random float in [1, 2], and it is updated each time the window application restarts;The phase shift B is a float; it is initialized as 0, and incremented by 0.01 each time the screen refreshes;The two axes are drawn in white, with an arrow towards the positive direction at the end of each axis;The sine curve is drawn in yellow.Orthogonal projection is used in this task.The following figure illustrates the expected window application.TASK 2: Clamped B-SplineWrite a Python program two.py with PyOpenGL to display a clamped B-spline, satifying the following requirements:The window application’s size is (550, 550), and its upper-left corner is at (150, 150) on the screen;The window application’s title is Special B-Splines.The program reads a text file named control-points.txt, including an x,y coordinate pair in each line as a control point, in the same folder;Control points are drawn with size 4 in green.Based on the control points, a clamped B-spline is drawn.P(t)’s color, mixed by red and blue, depends on its curvature (R = curvature / 5, G = 0.0, B = 1 – curvature / 5);Curvature is clipped by [0, 5].Orthogonal projection is used in this task.The following figure illustrates the expected window application, reading the sample control-points.txt provided.TASK 3: Hexagonal PyramidWrite a Python program three.py with PyOpenGL to display a 3D hexagonal pyramid, satifying the following requirements:The window application’s size is (400, 400), and its upper-left corner is at (100, 100) on the screen;The window application’s title is Hexagonal Pyramid.The program reads a text file named pyramid-params.txt, including one line as x,y,z,H,R, in the same folder, where x, yand z are the coordinates of the top vertex v, H is the height, and R is the radius; we assume the top vertex v and the base centroid c are on the same vertical axis, and c is always under v; the distance between c and any base vertex vi is always R.Based on the above information, a hexagonal pyramid is drawn.All faces are randomly and differently colored, except for the base in white.When the key R is pressed, the radis increases by 0.01 and the hexagonal pyramid is redrawn.When the key H is pressed, the height decreases by 0.01 and the hexagonal pyramid is redrawn.The hexagonal pyramid is static by default; When the key X, Y or Z is pressed, the hexagonal pyramid toggles between being static and rotating 1 degree/refresh along the corresponding axis (i.e., the key X corresponds to the x axis), taking c as the origin.Perspective projection is used in this task (FoV is 90 degrees towards the y-axis; Camera looks at the origin and uses the y-axis direction as the up-vector).The following figure illustrates the expected window application, reading the sample pyramid-params.txt provided.