GLFW窗口最小化导致程序退出
本文旨在记录GLFW窗口最小化导致透视矩阵计算报错并导致程序退出的问题,以及解决方案。
问题描述
在学习OpenGL的过程中,要用到GLFW管理OpenGL的窗口。在渲染时,为了使显示结果随着窗口尺寸的调整保持一致,需要根据当前的窗口尺寸重新计算透视投影变换矩阵,代码如下所示:
... // some code
int width, height;
glfwGetFramebufferSize(window, &width, &height);
glm::mat4 projection = glm::perspective(glm::radians(camera.Zoom), (float)width / (float)height, 0.1f, 100.0f);
... // some code
当使窗口上的最小化按钮将窗口缩小后,程序运行报错:
Assertion failed: abs(aspect - std::numeric_limits<T>::epsilon()) > static_cast<T>(0), file XXXX\matrix_clip_space.inl, line 251
问题原因
GLFW库管理的窗口在最小化以后,窗口的宽度和高度都变成了0
,这导致glm
库在计算投影矩阵时,宽高比
的计算出现除零操作,进而导致断言失败程序退出。
解决方案
一个可行的解决方法是,对窗口的宽度和高度进行检测,如果遇到除零
的情况,指定一个固定的宽高比进行透视投影矩阵的计算。
Comments | NOTHING