我正在为一个项目使用 libqglviewer,我通过 USB 从运动捕捉设备读取输入,并将其显示为查看器中的人。我在查看器的 draw() 方法中绘制了 opengl 东西,它工作正常。但是,当运动 Controller 发生变化时,我实际上得到了新的位置值,并在查看器中绘制了这些值,但是直到我单击查看器屏幕后我才看到此更新。是否可以自行更新查看器中的帧?
最佳答案
看起来您只需要在获得新位置值后立即发布 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/