我想将 Bullet 演示集成到 Qt 应用程序中。我使用的是 Bullet 附带的 Bullet 演示示例,名为 App_BasicDemo。
如果我在没有 Qt 的情况下执行此应用程序,它会打开一个窗口并呈现得很好。所以我想,如果我只是把它作为一个 QGLWidget,它应该在 Qt 窗口中做同样的事情。但这不起作用。
在 GLWidget 的构造函数中,我创建了 BasicDemo。在initializeGL中,我调用BasicDemo的myinit和initPhysics。最后,在 PaintGL 中,我调用 clientMoveAndDisplay。
我遇到的第一个问题是 clientMoveAndDisplay 在调用 swapBuffers 时会崩溃。
如果我只是评论该行,程序不会崩溃,但不会显示任何内容。
我缺少什么?
Edit:
void GLWidget::paintGL() {
scene->clientMoveAndDisplay();
QGLWidget::swapBuffers();
}
void BasicDemo::clientMoveAndDisplay(){
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
float ms = getDeltaTimeMicroseconds();
renderme();
glFlush();
//swapBuffers();
}
void BasicDemo::displayCallback(void) {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
renderme();
//optional but useful: debug drawing to detect problems
if (m_dynamicsWorld)
m_dynamicsWorld->debugDrawWorld();
glFlush();
swapBuffers();
}
Edit 2:
好吧,我想我得到了答案。当我初始化openGL时,我必须重新塑造一次演示,因为Bullet需要我的小部件的宽度和高度。我猜这是之前在某个 Bullet 方法中完成的,当它调用 glutmain 时......
场景->重塑(这个->宽度,这个->高度);
成功了。
现在我可以看到我的子弹演示了。 (它不像独立的 Bullet 应用程序那样得到更新,但这是另一个问题)
不管怎样,谢谢马丁·贝克特!
如果没有代码,很难知道问题是什么 - 听起来您正在尝试在小部件的更新/重绘方法之外更新屏幕
我将首先查看在 QWidget 或 QGlWidget 中绘图的 Qt 示例,具体取决于您是否使用 OpenGL。
如果您是 Gui 编程新手,那么您只能在屏幕上的一个位置上绘图会有点奇怪,但它(最终)会有意义,而且 Qt 是一个非常好的学习场所!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)