我已经从opengl中的线创建了一个圆圈,但它在外边缘显示了孔

时间:2014-08-21 09:51:16

标签: opengl

我用opengl画了一个圆圈。但它在外边缘显示了一个洞的图案。 我希望在不减小半径和增加样本数量的情况下填充此孔。 这是我的代码:

void drawcirc(float xi,float yj,float r1,int num1)
{
    glClear(GL_COLOR_BUFFER_BIT);
    //glBegin(GL_LINES);
    glVertex2f(0,0);
    for (int i=0;i<=num1;i++)           
    {                       
    float theta=2.0f*3.141592f*float(i)/float(num1);
    float x1=r1*cosf(theta);
    float y1=r1*sinf(theta);
    glBegin(GL_LINES);
    glVertex2f(0,0);
    glVertex2f(xi+x1,yj+y1);
    glEnd();
    sleep(5000);
    glFlush();
    }
}

然后调用函数drawcirc(0, 0, 0.6, 1250);

该怎么办?这是我的o / p,在外边缘有洞。

Sample Image

2 个答案:

答案 0 :(得分:1)

好吧,你真的没画圈子。 GL_LINES将从点到点直到原语结束

你从0,0到圆圈边缘的一个点+你给函数的偏移画一条线。

所以你基本上画了一个轮子的轮辐,边缘的孔是轮辐之间的间隙。

答案 1 :(得分:0)

AlecTeal已经回答了正在发生的事情。我给你解决了问题:

#include <math.h>

void drawFilledCircle(float xi,float yj,float r1,int num1)
{
    glBegin(GL_TRIANGLE_FAN);
    glVertex2f(0,0);
    for(int i = 0; i <= num1; i++)           
    {                       
        float theta = 2.0f*M_PI * float(i)/float(num1);
        float x1 = r1*cosf(theta);
        float y1 = r1*sinf(theta);
        glVertex2f(xi+x1,yj+y1);
    }
    glEnd();
}

void drawCircle(float xi,float yj,float r1,int num1)
{
    glBegin(GL_LINE_LOOP);
    for(int i = 0; i < num1; i++)           
    {                       
        float theta = 2.0f*M_PI * float(i)/float(num1);
        float x1 = r1*cosf(theta);
        float y1 = r1*sinf(theta);
        glVertex2f(xi+x1,yj+y1);
    }
    glEnd();
}

一些提示:

  • 永远不要将glFlush,glClear,sleep或类似物放入用于绘制几何形状的函数中。您希望能够从更高级别的绘图代码调用此类函数,并且此类调用具有高度破坏性。

  • glBegin和glEnd已被弃用,现在已经不鼓励使用它们15年了。更好地使用顶点数组。

  • 如果你必须使用glBegin / glEnd将它们放在循环之外,而不是放在它里面。