gpt4 book ai didi

c++ - 在 OpenGL 中创建环境堆栈

转载 作者:搜寻专家 更新时间:2023-10-31 00:24:21 24 4
gpt4 key购买 nike

我想在 OpenGL 中创建一个抽象的环境设置(混合、模板、深度等),其工作方式类似于矩阵堆栈。插入堆栈,进行所需的任何更改,绘制对象,然后弹出堆栈并返回到先前的设置。

例如,目前您可能有这样的绘图代码:

glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glDisable(GL_DEPTH_TEST);
//Draw operations
glEnable(GL_DEPTH_TEST);
glDisable(GL_BLEND);

但是对于环境堆栈,它看起来像这样:

glPushEnv();
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glDisable(GL_DEPTH_TEST);
//Draw operations
glPopEnv();

在我看来,只有两种方法可以做到这一点:

  1. 为每个环境设置函数创建我自己的“风格”并调用它。它会依次更新当前的EnvStack数据结构,调用OpenGL环境函数。
  2. 改变OpenGL环境函数指向my环境函数,这将再次更新当前的EnvStack数据结构并调用原来的O​​penGL环境函数。

所以选项 1 显然要简单得多。但是如果我使用其他人的代码,我会遇到一个问题,因为我不一定知道它对环境做了什么改变,因此我的数据结构会不同步。由于关键是要有一个简单的方法来确保环境设置正确,所以这并不酷。

所以我的问题是,在这种情况下,如何更改 OpenGL 环境函数指向的函数?

最佳答案

OpenGL 已经包含此功能。您需要 glPushAttrib(GL_ALL_ATTRIB_BITS);glPopAttrib();。参见 http://opengl.org/documentation/specs/man_pages/hardcopy/GL/html/gl/pushattrib.html了解更多。

关于c++ - 在 OpenGL 中创建环境堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/366742/

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