在我的mousefunc中,我调用一个函数bspline。它是这样工作的:用鼠标可以放置控制点,并根据这些点绘制样条线。因此,如果绘制了三个点,则会显示这些点之间的曲线。通过添加另一个点,旧曲线将消失,新曲线将出现。这个新问题现在介于四点之间。这很好用。但是:此bspline曲线仅显示在一个视口中。此视口具有黑色边框。重新绘制bspline时,此边界将消失。这是因为调用了glutPostredisplay。因为在我的glutDisplayFunc中,我调用了glClear(GL_COLOR_BUFFER_BIT)。所以这是自然发生的事情。如果我删除了显示函数中的glClear(GL_COLOR_BUFFER_BIT),则边界保持不变,但旧曲线也保持不变。即使我说应该重新划定边界,也没有发生任何事情。我想不出别的办法了。如果你能帮助我,我将不胜感激…
在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();
}