gpt4 book ai didi

c++ - 如何重新创建/修改正交投影矩阵 (OpenGL)

转载 作者:行者123 更新时间:2023-11-30 03:17:27 26 4
gpt4 key购买 nike

我制作了一个简单的 OpenGL 程序,可以在屏幕上绘制 2D 纹理。当你调整窗口大小时,它没有正确调整,所以要解决这个问题,我会再次运行投影矩阵代码:

if (windowSizeChange)
{
std::cout << "Window resized." << std::endl;
std::cout << windowWidth << " " << windowHeight << std::endl;
windowSizeChange = false;
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.0, windowWidth, windowHeight, 0.0, -1.0, 1.0);
glMatrixMode(GL_MODELVIEW);
}

但是,运行此代码会使图像变形。据我了解,为了让我可以在屏幕上绘制类似 2D 的图像,我的纹理是使用正交投影矩阵绘制的,这意味着有一个平面与窗口端口或类似我绘制的平面“平行” .当我尝试重新制作它以适应新的窗口大小时,它没有正确调整。这段代码出了什么问题?

最佳答案

在您的代码中,您正在更改正交矩阵,但您还需要更改 glViewport:

if (windowSizeChange)
{
glViewport(0, 0, windowWidth, windowHeight); // <-- Add this
std::cout << "Window resized." << std::endl;
std::cout << windowWidth << " " << windowHeight << std::endl;
windowSizeChange = false;
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.0, windowWidth, windowHeight, 0.0, -1.0, 1.0);
glMatrixMode(GL_MODELVIEW);
}

如您所说,正交矩阵只是一个与屏幕平行的矩阵。当我们调用 glOrtho 时,它会改变我们正在使用的矩阵的大小,而 glViewport 会告诉 openGL 我们正在使用的视口(viewport)(在本例中是我们的窗口)的大小。您通常希望 glOrtho 和 glViewport 具有相同的尺寸

关于c++ - 如何重新创建/修改正交投影矩阵 (OpenGL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55507345/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com