Mar 10
25
Next: 31. OpenGL Sphere Creation
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 just a 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
|
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. |
#include <GL/gl.h> #include <GL/glut.h> #include <math.h> typedef struct CIRCLE circle; float rot = 0; void createcircle (int k, int r, int h) { void display (void) { void reshape (int w, int h) { int main (int argc, char **argv) { glutDisplayFunc (display);
|