Я в тупике. У меня есть виджет внутри главного окна в приложении QT 4.6, который был настроен как виджет openGL. Он хорошо рисует, за исключением того, что я не могу очистить фон между кадрами. Я получаю черный фон, когда он открывает окно, и оно никогда не очищается после этого, поэтому со временем я получаю беспорядочный беспорядок визуализированных объектов. Мне также приходится вызывать swapBuffers () в конце функции paintGL (), чтобы виджет отображал самый последний кадр, который меня озадачил, так как у меня сложилось впечатление, что swapBuffers () был вызван автоматически. Я настроен на двойную буферизацию, и виджет не является общим. Вот соответствующий код:
void GLWidget::paintGL ( )
{
m_Input.Draw();
QGLWidget::swapBuffers();
}
void GLWidget::initializeGL ( )
{
qglClearColor(QColor(0,0,255,128));
glClear(GL_COLOR_BUFFER_BIT);
}
Кажется, что-то не так с двойной буферизацией. Очистка экрана до цвета фона довольно проста. Но это сводит меня с ума, почему это не работает. Остальная часть кода рисования работает нормально. Есть идеи? (Это в системе Linux.)
glClear
это операция рисования. Это не относится к initializeGL
но в paintGL
, Цвет очистки должен быть установлен прямо перед вызовом glClear
ну так двигай так [q]glClearColor
вместе.
Метод paintGL должен выглядеть следующим образом:
void GLWidget::paintGL()
{
qglClearColor(QColor(0,0,255,128));
glClear(GL_COLOR_BUFFER_BIT);
// you probably also want to clear the depth and stencil buffers
// glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
m_Input.Draw();
QGLWidget::swapBuffers();
}
Конечно, вы должны убедиться, что m_Input.Draw()
больше ничего не портит. Вы не показали код для этого, поэтому я здесь в шторке.
Других решений пока нет …