2012-06-04 44 views
0

我想改變一個C++項目,當我點擊視圖端口時,它正在繪製一些行。這個功能非常好,但是我想改變的是當我點擊「UP」或「Down」鍵時,下一行的顏色會改變。目前,如果我點擊這些鍵,所有行的顏色都會改變,包括舊的(已繪製)。OpenGL項目與drawPrimitive()

請給我一個做什麼的想法。這裏是一些代碼:

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); } 

回答

0

你的代碼有點不清楚;是一個全局變量primitiveColor?

假設您爲每個重繪的所有行調用drawPrimitive(),則相同的primitiveColor將用於所有行。只要按上或下時改變顏色,就會調用重新顯示功能,並且所有行將使用相同的顏色重新繪製。

你可能想要做的是有一個包含基元和它們各自顏色的列表。當你遍歷這個列表時,你可以爲每一行設置一個顏色。

+0

我發現了一個類似於此的解決方案。當調用drawPrimitive()修改特徵線的顏色時,我改變了這一點。 –

0

請記住,OpenGL的行爲像一個狀態機。如果您設置了顏色,那麼在繪製顏色後繪製的所有內容都將被繪製。 OpenGL不會記得你的其他元素有不同的顏色,你想保持它的樣子。你必須做記賬。

因此,每次繪製內容時,都必須明確說明哪些元素具有哪種顏色。