私の mousefunc では、関数 bspline を呼び出します。これは次のように動作します: マウスを使って制御点を配置すると、これらの点に従って B スプラインが描画されます。したがって、3 つの点を描画すると、それらの点の間の曲線が表示されます。別のポイントを追加すると、古い曲線が消え、新しい曲線が現れます。この新しいものは現在、4 つの点の間にあります。これは問題なく動作します。BUT: この bspline 曲線は 1 つのビューポートにのみ表示されます。このビューポートには黒い境界線があります。この境界線は、bspline が再描画されると消えます。これは、glutPostredisplay を呼び出すために発生します。私のglutDisplayFuncでは、glClear(GL_COLOR_BUFFER_BIT)を呼び出すためです。ですから、起こるのは当然のことです。displayfunc で glClear(GL_COLOR_BUFFER_BIT) を削除すると、境界線は残りますが、古い曲線も残ります。ボーダーを再描画する必要があると言っても、何も起こりません。代替案が思いつきません。助けていただければ幸いです...
1 に答える
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();
}
于 2011-06-20T14:26:39.327 に答える