openGL鼠标交互:如何使菜单中选项仅影响将要绘制的新图元,即之前已绘制的图形不受影响

在用openGL实现鼠标交互canvas遇到一个问题:
要求是
1、通过右键弹出菜单添加修改图形颜色选项。此选项仅影响将要绘制的新图元。
2、通过弹出菜单添加轮廓/填充选项。此选项仅影响将要绘制的新图元是以线框模式显示还是填充模式显示。

可是我每次通过菜单改变颜色或者填充/轮廓后,之前已经绘制的图像的颜色及轮廓也都会改变,意思应该是只有下一个绘制的图形会变化,不知道该如何改,求帮助!

img

这是其中一个绘制圆的函数


void Circ::drawCircle()
{
    float r ;
    r = sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
    float t = 0;
    int i,numVertices=1000;
    glColor3f(red, green, blue);  //red,green,blue 是菜单中改变的颜色变量
    glPolygonMode(GL_FRONT_AND_BACK, mod); //mod是菜单中改变填充方式的变量
    glBegin(GL_POLYGON);
    for (i = 0; i < numVertices; ++i)
    {

        glVertex3f(x1 + r * cos(t), y1 + r * sin(t), 0.0);
        t += 2 * PI / numVertices;
    }
    glEnd();

菜单中的设置函数


void color_menu(int id)
{
    if (id == 5) //red
    {
        red = 1.0f;
        blue = green = 0.0f;
        color = 5;
    }
    else if (id == 6) //blue
    {
        blue = 1.0f;
        red = green = 0.0f;
        color = 6;
    }
    else if (id == 7) //green
    {
        green = 1.0f;
        red = blue = 0.0f;
        color = 7;
    }
    glutPostRedisplay();
}

void pic_menu(int id)
{
    if (id == 8) //outline
    {
        mod = GL_LINE;
    }
    else if (id == 9) //filling
    {
        mod = GL_FILL;
    }
    
}

你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答


本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。


因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。