gpt4 book ai didi

c++ - 应重绘 Bspline,而不删除窗口的所有其余部分

转载 作者:行者123 更新时间:2023-11-28 08:19:31 24 4
gpt4 key购买 nike

在我的 mousefunc 中,我调用了一个函数 bspline。它是这样工作的:使用鼠标,您可以放置​​控制点,并根据这些点绘制 bspline。因此,如果您绘制了三个点,则会显示这些点之间的曲线。通过添加另一个点,旧曲线消失并出现新曲线。这个新的现在位于四个点之间。这很好用。但是:此 bspline 曲线仅显示在一个视口(viewport)中。此视口(viewport)有黑色边框。当我的 bspline 被重新绘制时,这个边界消失了。发生这种情况是因为调用了 glutPostredisplay。因为在我的 glutDisplayFunc 中我调用了 glClear(GL_COLOR_BUFFER_BIT)。所以这是很自然的事情发生。如果我在我的 displayfunc 中删除 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();
}

关于c++ - 应重绘 Bspline,而不删除窗口的所有其余部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6412724/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com