当前的 OpenGL 矩阵模式
Current OpenGL matrix mode
是否可以确定OpenGL当前使用的矩阵模式?
例如,我目前有以下内容(由 window 调整大小触发):
glViewport(0, 0, width, height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-width, width, -height, height, -1.0, 1.0);
glMatrixMode(GL_MODELVIEW);
不过,return比以前使用的矩阵模式更可取,而不是假设GL_MODElVIEW
。有没有可以预先调用的函数来存储之前的状态?
glGetIntegerv
参数 GL_MATRIX_MODE
应该这样做。
使用 glGetIntegerv(GL_MATRIX_MODE, ...)
获取当前值是显而易见的答案。
但是,还有一种更优雅且最有可能更有效的方法。旧版 OpenGL 有一个属性堆栈,允许您 save/restore 属性值而无需使用任何 glGet*()
调用。在此示例中,您将使用:
glPushAttrib(GL_TRANSFORM_BIT);
// Code that modifies transform mode.
glPopAttrib();
您可以查看传递给 glPushAttrib()
的哪个位保存了 man page 上 table 中的什么状态。
您通常应该尽可能避免 glGet*()
调用,因为它们可能会影响性能。在仅在 window 调整大小时执行代码的特定示例中,这显然不是问题。但是在频繁执行的代码中,这变得更加关键。
属性堆栈已弃用,并且在 OpenGL 核心配置文件中不可用。但是由于您使用的是矩阵堆栈(也已弃用),我认为您很乐意table 在代码中使用遗留功能。
所以我得到 5888、5889 个值
glMatrixMode(GL.GL_PROJECTION)
glLoadIdentity() # Reset all graphic/shape's position
print("GL_MATRIX_MODE:", glGetIntegerv(GL_MATRIX_MODE))
# GL_MATRIX_MODE: 5889
glMatrixMode(GL_MODELVIEW)
glLoadIdentity()
print("GL_MATRIX_MODE:", glGetIntegerv(GL_MATRIX_MODE))
# GL_MATRIX_MODE: 5888
是否可以确定OpenGL当前使用的矩阵模式?
例如,我目前有以下内容(由 window 调整大小触发):
glViewport(0, 0, width, height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-width, width, -height, height, -1.0, 1.0);
glMatrixMode(GL_MODELVIEW);
不过,return比以前使用的矩阵模式更可取,而不是假设GL_MODElVIEW
。有没有可以预先调用的函数来存储之前的状态?
glGetIntegerv
参数 GL_MATRIX_MODE
应该这样做。
使用 glGetIntegerv(GL_MATRIX_MODE, ...)
获取当前值是显而易见的答案。
但是,还有一种更优雅且最有可能更有效的方法。旧版 OpenGL 有一个属性堆栈,允许您 save/restore 属性值而无需使用任何 glGet*()
调用。在此示例中,您将使用:
glPushAttrib(GL_TRANSFORM_BIT);
// Code that modifies transform mode.
glPopAttrib();
您可以查看传递给 glPushAttrib()
的哪个位保存了 man page 上 table 中的什么状态。
您通常应该尽可能避免 glGet*()
调用,因为它们可能会影响性能。在仅在 window 调整大小时执行代码的特定示例中,这显然不是问题。但是在频繁执行的代码中,这变得更加关键。
属性堆栈已弃用,并且在 OpenGL 核心配置文件中不可用。但是由于您使用的是矩阵堆栈(也已弃用),我认为您很乐意table 在代码中使用遗留功能。
所以我得到 5888、5889 个值
glMatrixMode(GL.GL_PROJECTION)
glLoadIdentity() # Reset all graphic/shape's position
print("GL_MATRIX_MODE:", glGetIntegerv(GL_MATRIX_MODE))
# GL_MATRIX_MODE: 5889
glMatrixMode(GL_MODELVIEW)
glLoadIdentity()
print("GL_MATRIX_MODE:", glGetIntegerv(GL_MATRIX_MODE))
# GL_MATRIX_MODE: 5888