// Here we are going to create a circle. This is something I don't believe // you can do unless you create it on your own. In other words, it is not // preset. // Now because a circle is justa bunch of lines. That is what we are going // to make. A bunch of lines, close together that go around in a circle. // Now first of all I am going to create a typedef to hold our circle properties // as we call them // typedef struct // { // This will hold the x values as we need them // float x; // This will hold the y values as we need them // float y; // Call it CIRCLE // }CIRCLE; // Then I am setting the property circle to act like the typedef CIRCLE // CIRCLE circle; // Now for the meat of this tutorial, the circle creation function // The properties this takes are: // k - the translation on the y axis // r - the radius of the circle // h - the translation on the x axis // void createcircle (int k, int r, int h) { // Now we begin drawing our lines // glBegin(GL_LINES); // Here we are setting up the vertices all in one line function, this // sets every 2 vertices to a line. // First we begin our loop, this loop will cycle through, constantly // changing our x and y values for our lines. It cycles through until // it reaches 180, increasing in intervals of 1 // for (int i = 0;i < 180;i++) // { // Now to set up the current x value that we need for our vertex // I am setting it to the radius of the circle, times by the cosine of // the current value of i, then I am taking h to translate it // circle.x = r * cos(i) - h; // Then to set up the current y value that we need for our vertex // I am setting it to the radius of the circle, times by the sine of // the current value of i, then I am adding k to translate it // circle.y = r * sin(i) + k; // Then I am drawing the vertex // glVertex3f(circle.x + k,circle.y - h,0); // Now for the second part of the line, I am doing the same as above, only // I am moving it 0.1 units so that I am not down to points. This also // Lowers the chance of any holes occuring in the circle // circle.x = r * cos(i + 0.1) - h; // circle.y = r * sin(i + 0.1) + k; // Then I am drawing the vertex // glVertex3f(circle.x + k,circle.y - h,0); // } // glEnd(); // } // Then to call it, use something like this: // createcircle(0,10,0); // That would create a circle that is originated around (0,0) and with // a radius of 10 units. // Changing GL_LINES to another shape can come up with some other little // effects if you would like to give it a go. // But other than that, this is all you need for a circle. // If you have any queries, please email me at swiftless@gmail.com #include #include #include typedef struct { float x; float y; }CIRCLE; CIRCLE circle; float rot = 0; void createcircle (int k, int r, int h) { glBegin(GL_LINES); for (int i = 0;i < 180;i++) { circle.x = r * cos(i) - h; circle.y = r * sin(i) + k; glVertex3f(circle.x + k,circle.y - h,0); circle.x = r * cos(i + 0.1) - h; circle.y = r * sin(i + 0.1) + k; glVertex3f(circle.x + k,circle.y - h,0); } glEnd(); } void display (void) { glClearColor (0.0,0.0,0.0,1.0); glClear (GL_COLOR_BUFFER_BIT); glLoadIdentity(); glTranslatef(0,0,-20); glRotatef(rot,0,1,0); glRotatef(rot,1,0,0); glRotatef(rot,0,0,1); glColor3f(1,1,1); createcircle(0,10,0); glRotatef(rot,0,1,0); glRotatef(rot,1,0,0); glRotatef(rot,0,0,1); glColor3f(1,0,0); createcircle(-2,8,-2); glRotatef(rot,0,1,0); glRotatef(rot,1,0,0); glRotatef(rot,0,0,1); glColor3f(0,1,0); createcircle(-1,6,-1); glRotatef(rot,0,1,0); glRotatef(rot,1,0,0); glRotatef(rot,0,0,1); glColor3f(0,0,1); createcircle(2,4,2); glRotatef(rot,0,1,0); glRotatef(rot,1,0,0); glRotatef(rot,0,0,1); glColor3f(0,1,1); createcircle(1,2,1); glutSwapBuffers(); rot++; } void reshape (int w, int h) { glViewport (0, 0, (GLsizei)w, (GLsizei)h); glMatrixMode (GL_PROJECTION); glLoadIdentity (); gluPerspective (60, (GLfloat)w / (GLfloat)h, 0.1, 100.0); glMatrixMode (GL_MODELVIEW); } int main (int argc, char **argv) { glutInit (&argc, argv); glutInitDisplayMode (GLUT_DOUBLE); glutInitWindowSize (500, 500); glutInitWindowPosition (100, 100); glutCreateWindow ("A basic OpenGL Window"); glutDisplayFunc (display); glutIdleFunc (display); glutReshapeFunc (reshape); glutMainLoop (); return 0; }