Плавное масштабирование OpenGL

Моя цель - реализовать функцию масштабирования при прокрутке мыши. До сих пор я реализовывал эффект масштабирования с помощью glViewport, который отлично работает. Но, конечно, изображение не очень гладкое, оно показывает резкие пиксели.

Хочу попробовать теперь сделать изображение более плавным после масштабирования. Я уже пытался использовать glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); (и MIN_FILTER), но он не показывает никакой разницы по сравнению с GL_NEAREST.

У вас есть хорошие идеи, как сделать увеличенное изображение более гладким? Может быть, стоит взять пиксельную матрицу и вычислить пиксели вручную, используя, например, скалярный алгоритм, такой как 2xSal?

пока что мой код

void zoom(double scale) {
    GLint m_viewport[4];

    glGetIntegerv(GL_VIEWPORT, m_viewport);

    if (scale > 0) {

        glViewport(m_viewport[0] - (m_viewport[2] / 2), m_viewport[1] - (m_viewport[3] / 2), m_viewport[2] * 2, m_viewport[3] * 2);
    }
    else {
        glViewport(m_viewport[0] + (m_viewport[2] / 4), m_viewport[1] + (m_viewport[3] / 4), m_viewport[2] / 2, m_viewport[3] / 2);
    }

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);

person JessieBla    schedule 15.05.2016    source источник
comment
но он не показывает никакой разницы по сравнению с GL_NEAREST. - тогда он установлен неправильно.   -  person Rotem    schedule 15.05.2016


Ответы (1)


glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);

Эти функции изменяют любую текстуру, привязанную к контексту OpenGL в момент их вызова. Прежде чем вызывать их, вы должны сначала привязать текстуру, параметры которой вы хотите изменить.

person Nicol Bolas    schedule 15.05.2016