2016-05-15 9 views
3

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

Я хочу попробовать, чтобы сделать изображение более плавным после масштабирования. Я уже пробовал использовать 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); 
+1

* но это не показывает никакой разницы по сравнению с GL_NEAREST. * - тогда он не устанавливается правильно. – Rotem

ответ

3
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 в то время они называются. Прежде чем вызывать их, вы должны сначала привязать текстуру, параметры которой вы хотите изменить.