应该重新绘制 Bspline,而不删除窗口的所有其余部分
Posted
技术标签:
【中文标题】应该重新绘制 Bspline,而不删除窗口的所有其余部分【英文标题】:Bspline should be redrawn, without deleting all of the rest of the window 【发布时间】:2011-06-20 14:24:09 【问题描述】:在我的 mousefunc 中,我调用了一个函数 bspline。它是这样工作的: 使用鼠标,您可以放置控制点,然后根据这些点绘制 bspline。因此,如果您绘制了三个点,则会显示这些点之间的曲线。通过添加另一个点,旧曲线消失并出现新曲线。这个新的现在位于四个点之间。这很好用。但是:此 bspline 曲线仅显示在一个视口中。此视口有黑色边框。当我的 bspline 被重绘时,这个边框消失了。这是因为调用了 glutPostredisplay。因为在我的 glutDisplayFunc 中,我调用 glClear(GL_COLOR_BUFFER_BIT)。所以这是很自然的事情发生。如果我删除了 displayfunc 中的 glClear(GL_COLOR_BUFFER_BIT) 边框会保留,但旧曲线也会保留。即使我说应该重新绘制边界,也没有任何反应。我想不出替代方案。如果您能帮助我,将不胜感激...
【问题讨论】:
【参考方案1】:在 OpenGL 中,通常的方法是在场景的某些部分发生变化时重新渲染整个场景。在您的情况下,更改 B-Spline 的控制点应该会触发场景的重新显示,而不是在 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();
【讨论】:
以上是关于应该重新绘制 Bspline,而不删除窗口的所有其余部分的主要内容,如果未能解决你的问题,请参考以下文章
sql 从数据库中重新加载所有表而不删除MySQL中的数据库
删除 tkinter 画布上的所有元素并重新绘制,还是使用 move 更新元素?