opengl - 当前的 OpenGL 矩阵模式

标签 opengl projection-matrix

是否可以确定 OpenGL 当前使用的矩阵模式?

例如,我目前有以下内容(由窗口调整大小触发):

glViewport(0, 0, width, height);
glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(-width, width, -height, height, -1.0, 1.0);
glMatrixMode(GL_MODELVIEW);

但是,最好返回到以前使用的矩阵模式,而不是假设GL_MODElVIEW。有没有可以预先调用的函数来存储以前的状态?

最佳答案

使用 glGetIntegerv(GL_MATRIX_MODE, ...) 获取当前值是显而易见的答案。

但是,有一种更优雅且最有可能更有效的方法。旧版 OpenGL 有一个属性堆栈,允许您在不使用任何 glGet*() 调用的情况下保存/恢复属性值。在此示例中,您将使用:

glPushAttrib(GL_TRANSFORM_BIT);
// Code that modifies transform mode.
glPopAttrib();

您可以查看传递给 glPushAttrib() 的位在 man page 上的表中保存了什么状态.

您通常应该尽可能避免 glGet*() 调用,因为它们可能对性能有害。在仅在调整窗口大小时执行代码的特定示例中,这显然不是问题。但在频繁执行的代码中,这变得更加重要。

属性堆栈已弃用,并且在 OpenGL 核心配置文件中不可用。但由于您使用的是矩阵堆栈(也已弃用),我认为您很乐意在代码中使用遗留功能。

关于opengl - 当前的 OpenGL 矩阵模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34538819/

相关文章:

android - 如何近似给定点之间的距离?

three.js - 从鼠标位置和深度图计算 3D 点

java - 多线程 OpenGL-List 创建

c++ - PBO 在集成 GPU 中无法正常工作

opengl - 使用 OpenGL 和 SDL 处理窗口大小调整

c++ - OpenGL- C++ 使用鼠标单击将形状移动到单击的位置

objective-c - 无法捕捉 OpenGL 和顶点数组对象的错误

ios - 世界到屏幕坐标

OpenGL如何从平截头体对齐向量计算世界空间坐标?

javascript - Three.js 正交相机 : zoom all for a cube with perspective