c++ - 如何在 libqglviewer 中进行动态场景更新

标签 c++ qt

我正在为一个项目使用 libqglviewer,我通过 USB 从运动捕捉设备读取输入,并将其显示为查看器中的人。我在查看器的 draw() 方法中绘制了 opengl 东西,它工作正常。但是,当运动 Controller 发生变化时,我实际上得到了新的位置值,并在查看器中绘制了这些值,但是直到我单击查看器屏幕后我才看到此更新。是否可以自行更新查看器中的帧?

最佳答案

看起来您只需要在获得新位置值后立即发布 updateGL

QGLWidget::updateGL()

    void QGLWidget::updateGL () [virtual slot]
    Updates the widget by calling glDraw().

对于 2D 绘画,函数称为 update

另外,不要从 draw 方法内部调用它(请参阅 libQGLViewer 文档中的 updateGL)。

这篇笔记来自QWidget::paintEvent() :

注意:通常,您应该避免在 paintEvent() 中调用 update() 或 repaint()。例如,在 paintevent() 中对子对象调用 update() 或 repaint() 会导致未定义的行为; child 可能会或可能不会参加绘画事件。

QGLViewer 可能也是如此。

您也可以使用 repaint,但不推荐这样做(参见 QWidget::repaint())。

关于c++ - 如何在 libqglviewer 中进行动态场景更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7826749/

相关文章:

c++ - Windows API : could WM_DESTROY be sent without WM_CLOSE beforehand?

c++ - 使用 Boost::Spirit 解析 time_period 表达式

c++ - 在 Linux 中获取键盘键码键

c++ - glGetIntegerv 返回 36064

c++ - 如何从 QML 设置模型数据?

c++ - 在 C++ 中获取无线强度信号

c++ - 为什么在给定 T&& 和 const T& 重载的情况下,const 左值与 const 右值的绑定(bind)不同?

c++ - 我是否需要使用内存屏障来保护共享资源?

c++ - 有什么方法可以通过 Qt Designer 添加 QSystemTrayIcon

c++ - QThread 卡在第二次运行