【发布时间】:2016-04-04 23:26:25
【问题描述】:
能否确定OpenGL当前使用的矩阵模式?
例如,我目前有以下(由窗口调整大小触发):
glViewport(0, 0, width, height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-width, width, -height, height, -1.0, 1.0);
glMatrixMode(GL_MODELVIEW);
但是,最好返回之前使用的矩阵模式,而不是假设GL_MODElVIEW。有没有可以预先调用的函数来存储之前的状态?
【问题讨论】:
-
您为什么希望当前的矩阵模式不是
GL_MODELVIEW? -
@Kos 考虑到有四种不同的矩阵模式可用,我假设当调整大小事件发生时它们中的任何一种都可能正在使用中。虽然我没想到,但我认为至少考虑一下这种可能性是件好事。话虽这么说,我是新手,所以情况可能并非如此。
-
我不买。您是否在代码中有 N 个地方期望“矩阵模式应该是我离开它的样子”和 M 个地方说“我应该让矩阵模式保持原样”?这似乎过于复杂。我宁愿看整个渲染循环,并建立一个约定,在渲染的哪个阶段应该设置什么模式。
-
@Kos 重要的一点是,这发生在回调函数中,而不是直接在渲染循环中。如果它直接在渲染循环中,我肯定会明确地将矩阵模式设置为我想要的任何后续调用。然而,由于这个函数理论上可以从任何地方调用,它应该完全独立于调用状态并且没有任何意外的副作用(为什么屏幕调整大小会强制
GL_MODELVIEW模式?)。 -
你是什么意思,任何地方?您要么有一个显式的主循环,您可以在其中迭代事件并处理它们(WinAPI、SDL、GLFW ...),或者(在 GLUT 的情况下)您将主循环隐藏在框架内。无论哪种方式,resize 事件都不应该是可以从任何地方调用的“中断”,它只是事件循环的正常部分。处理窗口事件和渲染是不同的“阶段”。