在我的mousefunc中,我称为bspline函数。它是这样的:
用鼠标可以放置控制点,并根据这些点绘制bspline。因此,如果绘制了三个点,则将显示这些点之间的曲线。通过添加另一个点,旧曲线消失,而新曲线出现。现在这个新点位于这四个点之间。但是:此bspline曲线仅显示在一个视口中。此视口带有黑色边框。重新绘制我的bspline时,该边框消失。发生这种情况是因为调用了glutPostredisplay。因为在我的glutDisplayFunc中,我调用glClear(GL_COLOR_BUFFER_BIT)。因此,这是自然而然的事情。如果我在displayfunc中删除glClear(GL_COLOR_BUFFER_BIT),边框会保留,但旧曲线也会保留。即使我说应该重划边界,也没有任何反应。我想不出另一种选择。如果您能帮助我,将不胜感激。

最佳答案

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

09-08 00:23