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

时间:2015-03-18 21:42:05

标签: opengl graphics visualization

这是一个案例,我想这样做..

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();

1 个答案:

答案 0 :(得分:2)

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

如果您想要查看权威资料,那么规格文件就是您的朋友。例如,从https://www.opengl.org/registry/下载OpenGL 4.5兼容性配置文件规范。您将需要兼容性配置文件版本,因为属性堆栈功能已弃用且在Core Profile中不可用。

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

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

glDisable(GL_DEPTH_TEST);

经过一番搜索,我们登陆表23.26“Pixel Operations”。底部的第二行在第一列中显示DEPTH_TEST。在最后一列(属性)中,它表示“深度缓冲/启用”。这告诉我们属性属于哪个属性组。在这种情况下,它是两个。

从那里,我们转到表6.4“属性组”(第677页)。此表列出了属性组如何转换为_BIT常量。对于我们的示例,我们发现:

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

请注意,规范文档不包含GL_前缀。

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

如果您以同样的方式查找其他州,并且您有权威的答案,那么现在就剩下了。