Иногда 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); }
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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