2011-06-20 4 views
0

私のmousefuncでは関数bsplineを呼び出します。これは次のように機能します: マウスでコントロールポイントを置くことができ、これらのポイントに従ってbsラインが描画されます.3つのポイントを描いた場合、それらのポイント間の曲線が表示されます。別のポイントを追加すると、古いカーブが消え、新しいカーブが現れます。この新しいものは今4つのポイントの間にあります。これはうまく動作します。しかし、このbsplineカーブは1つのビューポートにのみ表示されます。このビューポートには黒い境界線があります。私のbsplineが再描画されると、この境界線が消えます。これは、glutPostredisplayを呼び出すために発生します。私のglutDisplayFuncではglClear(GL_COLOR_BUFFER_BIT)を呼び出しているからです。それが起こるのは自然なことです。私のdisplayfuncのglClear(GL_COLOR_BUFFER_BIT)を削除すると、ボーダーは残っていますが、古いカーブもそのまま残ります。国境が再描画されるべきだと言っても、何も起こりません。私は代替案を考えることができません。Bsplineは、ウィンドウの残りの部分をすべて削除することなく再描画する必要があります

答えて

1

OpenGLでは、通常は、シーンの一部が変更されるたびにシーン全体を再レンダリングする方法があります。あなたの場合、Bスプラインのコントロールポイントを変更すると、mouseclickハンドラ関数で描画操作を実行する代わりに、シーンの再表示がトリガされます。

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

は、いくつかの擬似コードを明確にするために、

関連する問題