c++ - 在Qt中集成一个Bullet简单demo

标签 c++ qt opengl bulletphysics

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

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

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

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

如果我只是注释那一行,程序不会崩溃,但不会显示任何内容。

我错过了什么?

编辑:

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 时,我必须 reshape 一次 Demo,因为 Bullet 需要我的小部件的宽度和高度。我想这是在之前的某个 Bullet 方法中完成的,当时它调用了 glutmain...

scene->reshape(this->width,this->height);

成功了。 现在我可以看到我的 Bullet Demo。 (它不会像在独立的 Bullet 应用程序中那样得到更新,但这是另一个问题)

还是谢谢马丁·贝克特!

最佳答案

没有代码很难知道问题出在哪里 - 听起来您正试图在小部件的更新/重绘方法之外更新屏幕

我会首先查看用于在 QWidget 或 QGlWidget 中绘图的 Qt 示例,具体取决于您是否使用 OpenGL。

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

关于c++ - 在Qt中集成一个Bullet简单demo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9945856/

相关文章:

c++ - QTextToSpeech 设置默认 QLocale

c++ - OpenGL,纹理输出为纯色

c++ - 向下转换指向成员函数的指针。这是合法的用法吗?

c++ - Qt metaObject 链接器问题

c++ - 标题的健全性

c++ - 使用 Makefile 的旧 C++ 项目..迁移到 Eclipse IDE?

qt - 如何将 Asio 网络库与 Qt 库集成?

c++ - Qt 5 迁移 - 无法打开包含文件 : 'ui_mainwindow.h'

c++ - 没有错误消息的 OpenGL 着色器链接错误

c++ - 在 OpenGL 中启用深度测试后,我的整个屏幕都是空白的(恢复为清晰的颜色)——为什么?