Иногда PaintGL в Qt не рисует границу OpenGL коллайдеров Bullet Physics.C++

Программы на C++. Форум разработчиков
Гость
Иногда PaintGL в Qt не рисует границу OpenGL коллайдеров Bullet Physics.

Сообщение Гость »


Это работает 50 на 50 %:


Изображение

[img]https:/ /i.stack.imgur.com/Ya2TM.gif[/img]


Для перерисовки я использую таймер:

void Widget::animationLoop() { m_deltaTime = m_elapsedTimer.elapsed() / 1000.f; m_elapsedTimer.restart(); m_pWorld->stepSimulation(m_deltaTime, 8); обновлять(); } Я вызываю отрисовку коллайдера (m_pWorld->debugDrawWorld();) следующим образом:

void Widget::paintGL() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); m_pWorld->debugDrawWorld(); m_projViewMatrix = m_projMatrix * m_viewMatrix; m_pPlayer->position = m_pPlayerCollider->getPosition(); m_pPlayer->rotation = m_pPlayerCollider->getRotation(); m_pPlayer->draw(m_projViewMatrix); m_pGround->draw(m_projViewMatrix); m_pPlatforms->draw(m_projViewMatrix); } У меня есть класс DebugDrawer, который я унаследовал от btIDebugDraw. Я переопределяю метод drawLine, чтобы преобразовать куб 1x1x1 в сегмент для рисования. Я рисую сегмент, вызывая m_pColliderEdge->draw(m_projViewMatrix); в методе drawLine.

Я пытался отправить указатель на объект QOpenGLWidget конструктору DebugDrawer:

DebugDrawer(QOpenGLWidget *widget, btDynamicsWorld *pWorld, ColliderEdge *pColliderEdge); чтобы сохранить его для makeCurrent, но это не помогло:
void DebugDrawer::drawLine(const btVector3 &from, const btVector3 &to, const btVector3 &color) { /* ... */ m_pWidget->makeCurrent(); m_projViewMatrix = projMatrix * viewMatrix; m_pColliderEdge->draw(m_projViewMatrix); }

Вернуться в «C++»