2011-06-20 75 views
0

在我的mousefunc中,我調用了一個函數bspline。它的工作原理是這樣的: 用鼠標可以放置控制點,並根據這些點繪製Bspline。因此,如果繪製了三個點,則會顯示這些點之間的曲線。通過添加另一點,舊曲線消失並出現新曲線。這個新的謊言現在介於四點之間。這工作得很好。但是:此Bspline曲線只顯示在一個視口中。此視口具有黑色邊框。當我的bspline被重繪時,這個邊界消失。這是因爲調用了glutPostredisplay。因爲在我的glutDisplayFunc中我調用glClear(GL_COLOR_BUFFER_BIT)。所以這是很自然的事情發生。如果我在我的displayfunc中刪除了glClear(GL_COLOR_BUFFER_BIT),邊框會保留,但舊曲線也會保留。即使我說邊界應該重繪,沒有任何反應。我不能想到替代方案。如果你能幫助我,將不勝感激......Bspline應該重繪,而不會刪除窗口的所有其他部分

回答

1

在OpenGL中,通常的做法是在整個場景的某些部分發生變化時重新渲染整個場景。在您的情況下,更改B樣條的控制點應觸發場景的重新顯示,而不是在鼠標點擊處理函數中執行繪圖操作。

OpenGL沒有幾何圖形持久性,它只是將原始圖像繪製到基於像素的幀緩衝區。因此你必須使用它。

爲了澄清,一些僞代碼:

BSpline *b_spline; 

void on_mouseclick(int x, int y) 
{ 
    float x_, y_; 
    transform_screen_to_scene(x,y, &x_, &y_); 
    bspline_add_control_point(b_spline, x_, y_); 

    trigger_redisplay(); 
} 

void display() 
{ 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
    setup_viewport_and_projection(); 

    bspline_draw(b_spline); 

    swap_buffers(); 
} 
相關問題