我需要在OpenGL中推送和弹出哪些属性



这里有一个案例,我想这样做。。

void func()
{
        glDisable(GL_DEPTH_TEST);
        glDisable(GL_FOG);
        glDisable(GL_LIGHTING);
        glDisable(GL_TEXTURE_1D);
        glDisable(GL_TEXTURE_2D);
        glDepthFunc(GL_LEQUAL);
        glDepthRange (0.0, 0.999);
        glEnable(GL_LINE_SMOOTH);
        glHint(GL_LINE_SMOOTH_HINT, GL_NICEST);
        glEnable(GL_BLEND);
        glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
        glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
        glLineWidth(1.0f);
        glPushMatrix();
        {
            glTranslatef(pos.x, pos.y, pos.z);
            glRotatef(angle.x, 1.0f, 0.0f, 0.0f);
            glRotatef(angle.y, 0.0f, 1.0f, 0.0f);
            glRotatef(angle.z, 0.0f, 0.0f, 1.0f);
            draw();
        }
        glPopMatrix();
  }

我在推这些矩阵,但不确定,所以我只想知道这个函数的哪些属性是可以的。

    glPushAttrib(GL_LINE_BIT | GL_TRANSFORM_BIT | GL_ENABLE_BIT | GL_LIGHTING_BIT | GL_CURRENT_BIT | GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
func();
    glPopAttrib();

Maurice在上面的评论中链接的手册页(https://www.opengl.org/sdk/docs/man2/xhtml/glPushAttrib.xml)应该会让你走很长的路,而且是最简单的来源。不幸的是,手册页往往有错误和遗漏,因此通常不太可靠。

如果你想找到最终的来源,规范文档是你的朋友。例如,从以下位置下载OpenGL 4.5 Compatibility Profile规范https://www.opengl.org/registry/.您将需要兼容配置文件版本,因为属性堆栈功能已弃用,并且在核心配置文件中不可用。

然后,如果你在打开近1000页的PDF文件后没有从椅子上摔下来,你会在第23章中找到一整套状态表,从第697页开始。

现在,让我们从您的列表中选择第一个电话,以说明如何提取您要查找的信息:

glDisable(GL_DEPTH_TEST);

经过一番搜索,我们得出了表23.26"像素操作"。底部的第二行表示第一列中的DEPTH_TEST。在最后一列(属性)中,它显示"depth buffer/enable"。这告诉我们属性属于哪个属性组。在这种情况下,它是其中的两个。

从那里,我们可以看到第677页的表21.4"属性组"。此表列出了属性组如何转换为_BIT常量。对于我们的例子,我们发现:

  • 深度缓冲区:DEPTH_BUFFER_BIT
  • 启用:ENABLE_BIT

请注意,规范文档省略了GL_前缀。

因此,对于深度测试启用状态,当用作glPushAttrib()的参数时,GL_DEPTH_BUFFER_BITGL_ENABLE_BIT都将保存该状态。

如果你以同样的方式查看其他州的情况,你就有了权威的答案。

相关内容

  • 没有找到相关文章

最新更新