【问题标题】:OpenGL Smooth ZoomingOpenGL平滑缩放
【发布时间】:2016-09-11 05:43:13
【问题描述】:

我的目标是在鼠标滚动时实现缩放功能。 到目前为止,我使用 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);

【问题讨论】:

  • 但它与 GL_NEAREST 相比没有任何区别。 - 那么它的设置不正确。

标签: c++ opengl zooming smoothing


【解决方案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 上下文的任何纹理。在调用它们之前,您必须先绑定您要更改的参数的纹理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-09
    • 1970-01-01
    • 2010-11-25
    • 2017-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-16
    相关资源
    最近更新 更多