0

我正在尝试更改一个 C++ 项目,当我单击视口时,该项目当前正在绘制一些线条。这个功能非常好,但我想要改变的是当我点击“UP”或“Down”键时,下一行的颜色会改变。目前,如果我单击这些键,所有线条的颜色都会发生变化,包括旧线条(已经绘制)。

请告诉我该怎么做。这是一些代码:

void drawPrimitive() {
Vertex *temp;

//  Set the primitive color
glColor3fv(primitiveColor);

//  Set the point size in case we are drawing a point
if (type == POINT)
    glPointSize(pointSize);

//  Display results depending on the mode
glBegin(mode);
    for(temp = head; temp != NULL; temp = temp->np)
    {
        if (smoothShading)
            glColor3f(temp->r, temp->g, temp->b);

        glVertex2f(temp->x, temp->y);
    }
glEnd(); }


void mouse(int button, int state, int x, int y) {
if(button == GLUT_LEFT_BUTTON && state == GLUT_DOWN)
{
    float pointX, pointY;

    pointX = (float)x/window_width * world_width;
    pointY = (float)(window_height - y)/window_height * world_height;

    //  Add a vertex to the list of vertices...
    addVertex(&head, &tail, pointX, pointY, 0.0f, primitiveColor[0], primitiveColor[1], primitiveColor[2]);

    //  automatically calls the display function
    glutPostRedisplay();
}
else if(button == GLUT_MIDDLE_BUTTON && state == GLUT_DOWN)
{
    deleteVertex(&head, &tail);
    glutPostRedisplay();
} }


void special(int key, int x, int y) {
switch (key)
{
    //  change primitive color
    case GLUT_KEY_UP :
        changePrimitiveColor(1);
        break;
    case GLUT_KEY_DOWN :
        changePrimitiveColor(-1);
        break;
}

glutPostRedisplay(); }


void changePrimitiveColor(int step) {
primitiveColorId += step;

if (primitiveColorId < 0)
    primitiveColorId = COLOR_COUNT - 1;

if (primitiveColorId >= COLOR_COUNT)
    primitiveColorId = 0;

setColor(primitiveColor, primitiveColorId); }
4

2 回答 2

0

您的代码有点不清楚;原始颜色是全局变量吗?

假设您为每次重绘的所有线条调用 drawPrimitive(),则所有线条都将使用相同的原始颜色。当你按下 up 或 down 改变颜色时,redisplay 函数就会被调用,所有的线都将使用相同的颜色重新绘制。

您可能想要做的是有一个包含基元及其各自颜色的列表。当您遍历此列表时,您可以为每一行设置一种颜色。

于 2012-06-04T17:42:48.867 回答
0

请记住,OpenGL 的行为就像一个状态机。如果您设置了一种颜色,那么您在它之后绘制的所有内容都将使用该颜色进行绘制。OpenGL 不会记住您的其他元素具有不同的颜色,而您希望保持这种颜色。你必须做簿记。

因此,每次绘制内容时,您都必须明确说明哪些元素具有哪种颜色。

于 2012-06-04T17:43:14.250 回答