在Qt中绘制多个圆圈

时间:2017-01-28 14:42:08

标签: c++ qt

我有一个以这种方式绘制圆圈的代码:

QList< QPair<double, double> > vertices;
//constructor
vertices.clear();
calculateWhiteVetices();

//drawing methods
void MyGLWidget::drawWhiteCircle() {
    int n = vertices.count();
    qglColor(Qt::white);
    glBegin(GL_POLYGON);
    for(int i = 0; i < n; i++) {
        glVertex2f(vertices[i].first, vertices[i].second);
    }
    glEnd();
}


void MyGLWidget::calculateWhiteVetices()
{
    double a = 3.14 / 90;
    vertices.append(QPair<double, double> (0,0));
    for(int i = 0; i <= 360; i++) {
        vertices.append(QPair<double, double> (cos(i * a) * radius, sin(i * a) * radius));
    }
}

//paintGL method
glPushMatrix();
glTranslatef(randx , randy , 0);
drawWhiteCircle();
glPopMatrix();

现在我想在这里添加另一个圈子,但这是一个问题; 颜色混合在一起,形状被破坏。这是代码:

QList< QPair<double, double> > blueVertices;
//constructor
blueVertices.clear();
calculateBlueVetices();

在新方法中用vertices替换每个blueVertices,并将方法完全放在白圈的方法旁边。 并将这部分代码放在glPopMatrix();方法的paintGL之后。

//paintGL method
glPushMatrix();
glTranslatef(randx-0.2f , randy-0.2f , 0);
drawBlueCircle();
glPopMatrix();

我知道由于我的定义不明确,顶点正在某处混合,但我不知道在哪里.......我的错是什么? 这是我的输出:

1 个答案:

答案 0 :(得分:0)

您可以将两个圆并排绘制一些距离,以验证您是否生成了正确的顶点。首先,您可以尝试使用 glTranslatef(radius , 0 , 0); 的白色圆圈和使用 glTranslatef( -radius , 0 , 0); 的蓝色来检查两者是否都需要顶点