Несколько QGLWidgets и gluUnProject

У меня есть QMainWindow, содержащее два QGLWidgets. Виджеты используют конструктор по умолчанию и не разделяют контекст. Оба виджета отображают двухмерные данные и позволяют перетаскивать их.

Это работает с использованием gluUnproject и хорошо работает на первом созданном QGLWidget. При нажатии на второй виджет все работает как положено. Однако при перетаскивании второго виджета движение не является плавным. Хуже всего то, что после перетаскивания второго виджета, gluUnproject первого виджета отключается с некоторым запасом, который появляется в зависимости от направления и расстояния, на которое перетаскивался второй экран.

Я пробовал вызовы метода makeCurrent () в начале метода рисования, в начале события мыши и комбинаций одного, другого и обоих, и не видел никаких улучшений.

void MyGLWidget::paintEvent(QPaintEvent *event){
glViewport(0, 0, widgetWidth, widgetHeight);

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(90,(GLfloat)((widgetWidth/widgetHeight)),0.1f,-zoomMin);
glTranslatef(camera.x, camera.y, camera.zoom);

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

//[GL Drawing code]

glGetDoublev( GL_MODELVIEW_MATRIX, _modelview );
glGetDoublev( GL_PROJECTION_MATRIX, _projection );
glGetIntegerv( GL_VIEWPORT, _viewport );
}

0

Решение

Убедитесь, что данные области просмотра и матрицы, которые вы передаете в gluUnProject, совпадают с данными виджета, с которым вы взаимодействуете. В идеале вы создаете их копии во время рисования в некоторую переменную-член класса виджета.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]