OpenGL Smooth Zooming

Моя цель — реализовать функцию масштабирования при прокрутке мыши.
До сих пор я реализовал эффект масштабирования с помощью 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);

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

3

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

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

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