Интегрируйте простую демонстрацию Bullet в Qt
Я хочу интегрировать демонстрацию Bullet в приложение Qt. Я использую демонстрационный пример Bullet, который поставляется с Bullet, под названием App_BasicDemo.
Если я запускаю это приложение без Qt, оно открывает окно и очень хорошо рендерится. Поэтому я подумал, что если я просто добавлю это как QGLWidget, он должен сделать то же самое в окне Qt. Но это не работает.
В конструкторе моего GLWidget я создаю BasicDemo. В initializeGL я вызываю myinit и initPhysics из BasicDemo. И, наконец, в 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, мне нужно один раз изменить форму демонстрации, потому что Bullet нужна ширина и высота моего виджета. Я предполагаю, что это было сделано внутри некоторого метода Bullet раньше, когда он вызывал glutmain...
scene-> изменения формы (этом-> ширина, этом-> высота);
сделал трюк. Теперь я могу видеть мое демо Bullet. (Он не обновляется, как в независимом приложении Bullet, но это другая проблема)
В любом случае, спасибо, Мартин Беккет!
1 ответ
Без кода очень трудно понять, в чем проблема - похоже, вы пытаетесь обновить экран вне метода обновления / перерисовки виджета
Я бы начал с просмотра примеров Qt для рисования в QWidget или QGlWidget в зависимости от того, используете ли вы OpenGL или нет.
Если вы новичок в программировании на Gui, немного странно, что вы можете рисовать на экране только в одном месте, но это будет иметь смысл (в конце концов), и Qt - очень хорошее место для изучения!