gpt4 book ai didi

opengl - 当前的 OpenGL 矩阵模式

转载 作者:行者123 更新时间:2023-12-05 08:43:10 25 4
gpt4 key购买 nike

是否可以确定 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/

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