在Qt中集成Bullet简单演示

时间:2012-03-30 15:20:07

标签: c++ qt opengl bulletphysics

我想将Bullet演示集成到Qt应用程序中。我正在使用Bullet附带的Bullet演示示例,名为App_BasicDemo。

如果我在没有Qt的情况下执行此应用程序,它会打开一个窗口并渲染得非常好。所以我想,如果我把它作为QGLWidget,它应该在Qt窗口中做同样的事情。但它不起作用。

在我的GLWidget的构造函数中,我创建了BasicDemo。在initializeGL中,我调用了BasicDemo的myinit和initPhysics。最后,在paintGL中,我调用clientMoveAndDisplay。

我遇到的第一个问题是调用swapBuffers时clientMoveAndDisplay会崩溃。

如果我只是评论该行,程序不会崩溃,但它不会显示任何内容。

我错过了什么?

编辑:

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();
 }

编辑2:

好的,我想我得到了答案。当我初始化openGL时,我必须在Demo之后重新整形,因为Bullet需要我的小部件的宽度和高度。我猜这是在一些Bullet方法中完成的,之前它叫做glutmain ...

scene->重塑(这 - >宽度,这 - >高度);

做了这个伎俩。 现在我可以看到我的Bullet Demo。 (它没有像在独立的Bullet应用程序中那样进行更新,但这是另一个问题)

非常感谢Martin Beckett!

1 个答案:

答案 0 :(得分:0)

没有代码很难知道问题是什么 - 听起来你正试图在窗口小部件的更新/重绘方法之外更新屏幕

我首先看一下用于绘制QWidget或QGlWidget的Qt示例,具体取决于您是否使用OpenGL。

如果你是Gui编程的新手,有点奇怪,你只能在一个地方在屏幕上画画,但它有意义(最终),Qt是一个非常好的学习场所!