2012-12-09 67 views
3

我已經在Xcode中編寫了一個C++程序來實現符號迴歸&遺傳編程。我想創建一個窗口來可視化參考數據(一個2d點的數組)和程序每代生成的最佳函數。通過C++和GLUT更新圖形

簡而言之,我希望窗口顯示2個圖形,並使用for循環更新它。據我瞭解,GLUT似乎是一個很好的框架,我寫了一個函數來顯示參考數據(STD :: vector的是我如何存儲「referenceDataSet」變量):

void renderScene(){ 
    // The min/max variables are just for scaling & centering the graph 
    double minX, maxX, minY, maxY; 
    minX = referenceDataSet[0].first; 
    maxX = referenceDataSet[0].first; 
    minY = referenceDataSet[0].second; 
    maxY = referenceDataSet[0].second; 
    for (int i = 0; i < referenceDataSet.size(); i++) { 
     minX = min(minX, referenceDataSet[i].first); 
     maxX = max(maxX, referenceDataSet[i].first); 
     minY = min(minY, referenceDataSet[i].second); 
     maxY = max(maxY, referenceDataSet[i].second); 
    } 
    glLoadIdentity(); 
    glClear(GL_COLOR_BUFFER_BIT); 
    glBegin(GL_LINE_STRIP); 
    glColor4f(1.0, 0.0, 0.0, 1.0); 
    for (int i = 0; i < referenceDataSet.size(); i++) { 
     glVertex2f((referenceDataSet[i].first-minX)/(maxX-minX)-0.5, (referenceDataSet[i].second-minY)/(maxY-minY)-0.5); 
    } 
    glEnd(); 
    glFlush(); 
} 

void renderInit(int argc, char **argv){ 
    glutInit(&argc, argv); 
    glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); 
    glutInitWindowSize(600, 600); 
    glutCreateWindow(""); 
    glutDisplayFunc(renderScene); 
    glutCheckLoop(); 
} 

的問題在於,我不確定應該如何更新窗口或繪製不斷變化的第二個圖表。

另外,這是我關於堆棧溢出的第一個問題,所以我很抱歉如果我在這裏沒有正確地做某件事,或者如果有任何這些難以理解。我盡力尋找答案,但找不到任何相關的東西。

回答

2

在glut或OpenGL中,glutIdleFunc(void (*func)(void))用於更新場景。 每次場景刷新時,空閒func將調用glutDisplayFunc

此處參考http://www.opengl.org/resources/libraries/glut/spec3/node63.html

我猜renderScene()是你glutDisplayFunc。您需要使用glutIdleFunc註冊一個空閒功能。在空閒功能中,您可以更改不斷更改的第二個圖形的參數,並在空閒功能完成更改後再次調用renderScene()

+0

非常感謝。 – StTheo