调整视口大小后,OpenGL纹理在先前的位置闪烁

时间:2019-05-09 08:12:07

标签: c++ opengl textures

我正在使用OpenGL渲染以窗口为中心的纹理。使用stb_image加载纹理,并且我使用函数<div class="select"> <select class="select-text"> <option disabled selected>Select User</option> </select> </div> <div class="user-photo"> <img src="https://via.placeholder.com/200" alt="Placeholder"> </div> <div class="details mdc-elevation--z3"> <p> <span class="prop" data-age>Age :</span> <span class="value" data-age-value>23</span> </p> <p> <span class="prop" data-height>Height :</span> <span class="value" data-height-value>169</span> </p> <p> <span class="prop" data-weight>Weight :</span> <span class="value" data-weight-value>68</span> </p> <p> <span class="prop" data-gender>Gender :</span> <span class="value" data-gender-value>Female</span> </p> <p> <span class="prop" data-country>Country :</span> <span class="value" data-country-value>Nigerian</span> </p> </div> <button id="oracle" class="mdc-button"> Calculate BMI </button> <div id="outcome"> <h5 class="mdc-typography--headline5"> BMI </h5> <p class="bmi-text"></p> </div>渲染顶点。到目前为止,一切正常。调整使用glfw创建的窗口的大小时,我还使用一个回调函数来调整视口的大小,该回调函数以新的大小调用glDrawElements。当我执行此操作时,我可以在正确的新位置看到纹理渲染,但是在相对于屏幕左下角的旧位置也可以闪烁。 This is what the problem looks like after resizing the window.左下方的纹理闪烁。

我是OpenGL的新手,基本上不知道是什么引起了问题。我已经搜索了其他存在类似问题的人,但是找不到与我自己的问题相符的内容。

这是加载图像的代码。

glViewport

这是调整大小的回调。

    glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_MIRRORED_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_MIRRORED_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

int width, height, nrChannels;
GLubyte* data = stbi_load("texture.jpg", &width, &height, &nrChannels, 0);

if (data)
{
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, data);
    glGenerateMipmap(GL_TEXTURE_2D);
}
else
{
    std::cout << "Failed to load image!" << std::endl;
}
stbi_image_free(data);

这是主循环:

    void window_size_callback(GLFWwindow* window, int width, int height)
    {
        glViewport(0, 0, width, height);
    }

我不想为程序粘贴所有代码,因为这很多。如果您需要一些我未包含的代码,请告诉我。

0 个答案:

没有答案