Как исправить срез fustrum при масштабировании с помощью glScalef в QGLWidget

Я работаю над простым средством просмотра изображений, используя 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)
введите описание изображения здесь

0

Решение

Если это не требуется, не масштабируйте ось Z.

Изменить:

glScalef(zoomFactor, zoomFactor, zoomFactor);

в

glScalef(zoomFactor, zoomFactor, 1.0f);

0

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

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

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