OpenGL中纹理的奇怪拉伸

这是问题:我正在屏幕外框架缓冲区对象呈现一个红色的三角形。 我有一个该缓冲区的纹理,我将这个纹理应用到一个简单的矩形(在运行时)。

我得到这个结果: 该矩形显示了其他缓冲区正在渲染的内容

这正是我想要的。 问题是,当我拉我的窗口纹理有点怪异:

在拉伸窗户时,纹理似乎向右移动

只是为了好奇,我试图渲染没有纹理的矩形。

这里看起来很好

然后我再次拉开窗户:

正在延伸的时候,矩形是跟着窗户的

我相信这是因为在我的默认FBO我设置glViewport glViewport(0,0,m_Width,m_Height); (m_Width和m_Height是Window的尺寸)

你的猜测是正确的。 每次调整窗口大小时,都要确保glViewport()和投影matrix都是最新的。 在SFML中是这样的:

 while (running) { sf::Event e; while (wind.pollEvent(e)) { switch (e.type) { // ... case sf::Event::Resized: glViewport(0, 0, e.size.width, e.size.height); // Set your projection matrix here // Will be different from one library to the other break; // ... } // ... }