Я работаю над простым средством просмотра изображений, используя QGLWidget, рисуя два треугольника, а затем отрисовываю их с помощью текстуры.
Программа позволяет пользователям увеличивать изображение с помощью прокрутки вниз / вверх, а затем изменяет коэффициент увеличения с помощью glScalef.
до сих пор это работает отлично, за исключением того, что я столкнулся с проблемой, когда мой взгляд усечен.
вот мой код
void GLWidget::paintGL()
{
// scrollOffset has the coordinates of horizontal and vertical scrollbars
glViewport(0 - scrollOffset.x(), 0 + scrollOffset.y(), this->width(), this->height());
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0, this->width(), this->height(), 0); // flip the y axis
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
// zooming, error happens when the factor is above 3.0
glScalef(zoomFactor, zoomFactor, zoomFactor);
glEnable(GL_NORMALIZE);
glClear(GL_COLOR_BUFFER_BIT);
// Draw something...
}
А на скриншоте ошибка обычно возникает, когда коэффициент масштабирования довольно большой (выше 3.0 / 4.0)
Если это не требуется, не масштабируйте ось Z.
Изменить:
glScalef(zoomFactor, zoomFactor, zoomFactor);
в
glScalef(zoomFactor, zoomFactor, 1.0f);
Других решений пока нет …