在 Qt 中集成一个 Bullet 简单演示

Posted

技术标签:

【中文标题】在 Qt 中集成一个 Bullet 简单演示【英文标题】:Integrate a Bullet simple demo in Qt 【发布时间】:2012-03-30 15:20:07 【问题描述】:

我想将 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...

场景->重塑(this->width,this->height);

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

谢谢马丁贝克特!

【问题讨论】:

QGLWidget 中有一个 resizeGL 方法应该在第一次绘制之前自动调用,你可以把东西放在那里。有时,如果您的引擎需要分配空间,您需要手动调用它,但执行 resizeGL 非常便宜 【参考方案1】:

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

我将首先查看 Qt 示例,用于在 QWidget 或 QGlWidget 中进行绘制,具体取决于您是否使用 OpenGL。

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

【讨论】:

我调用了子弹演示的函数,它在名为paintGL的小部件方法中绘制。我已经用其他 OpenGL 程序做到了这一点,并且它有效。由于 Bullet 也使用 Opengl,我认为它应该以同样的方式工作。 QGlWidget 默认开启了自动缓冲交换,你是否交换了两次? @sara 点击编辑并粘贴进去,然后有一个像 这样的图标来格式化它,或者只是发表评论,我可以为你格式化。尝试将其缩减为相关的内容。 我试过评论swapBuffers,但还是同样的问题:( 目前尚不清楚绘制的位置 - 没有 renderme() 的代码,但小部件和子弹层中的几层函数正在调用交换缓冲区。尝试删除所有这些。

以上是关于在 Qt 中集成一个 Bullet 简单演示的主要内容,如果未能解决你的问题,请参考以下文章

如何在VS2015中集成QT5.5

Qt - OpenCV在项目中集成使用(待完成)

在spring中集成EventBus

如何在 Ruby on Rails 中集成 Paypal 集成

如何在Eclipse中集成Git

如何在 Java 中集成来自网站的 API? [关闭]