Drawing Circle with OpenGL

后端 未结 6 1625
时光取名叫无心
时光取名叫无心 2020-12-31 01:46

I\'m trying to draw simple circle with C++/OpenGl

my code is:

#include 
#include 

void Draw() {
    glClear(GL_COLOR_         


        
6条回答
  •  无人及你
    2020-12-31 02:17

    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #define window_width  1080  
    #define window_height 720 
    void drawFilledSun(){
        //static float angle;
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        glLoadIdentity();
        glTranslatef(0, 0, -10);
        int i, x, y;
        double radius = 0.30;
        //glColor3ub(253, 184, 19);     
        glColor3ub(255, 0, 0);
        double twicePi = 2.0 * 3.142;
        x = 0, y = 0;
        glBegin(GL_TRIANGLE_FAN); //BEGIN CIRCLE
        glVertex2f(x, y); // center of circle
        for (i = 0; i <= 20; i++)   {
            glVertex2f (
                (x + (radius * cos(i * twicePi / 20))), (y + (radius * sin(i * twicePi / 20)))
                );
        }
        glEnd(); //END
    }
    void DrawCircle(float cx, float cy, float r, int num_segments) {
        glBegin(GL_LINE_LOOP);
        for (int ii = 0; ii < num_segments; ii++)   {
            float theta = 2.0f * 3.1415926f * float(ii) / float(num_segments);//get the current angle 
            float x = r * cosf(theta);//calculate the x component 
            float y = r * sinf(theta);//calculate the y component 
            glVertex2f(x + cx, y + cy);//output vertex 
        }
        glEnd();
    }
    void main_loop_function() {
        int c;
        drawFilledSun();
        DrawCircle(0, 0, 0.7, 100);
        glutSwapBuffers();
        c = getchar();
    }
    void GL_Setup(int width, int height) {
        glViewport(0, 0, width, height);
        glMatrixMode(GL_PROJECTION);
        glEnable(GL_DEPTH_TEST);
        gluPerspective(45, (float)width / height, .1, 100);
        glMatrixMode(GL_MODELVIEW);
    }
    int main(int argc, char** argv) {
        glutInit(&argc, argv);
        glutInitWindowSize(window_width, window_height);
        glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
        glutCreateWindow("GLUT Example!!!");
        glutIdleFunc(main_loop_function);
        GL_Setup(window_width, window_height);
        glutMainLoop();
    }
    

    This is what I did. I hope this helps. Two types of circle are here. Filled and unfilled.

提交回复
热议问题