Это работает 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); }