标签:opengl属性组 glpushattrib glpopattrib
众所周知,OPENGL 是一个状态机,有很多 各种 各样的 状态。我们 可以 使用 属性数组 来 保存 / 恢复 一组 状态。总共 有 20组 服务器属性组 和 2组 客户端属性组。
关于 这些属性组 里 有哪些 属性。 这个网站 详细 说明了: http://www.cnblogs.com/oiramario/archive/2010/04/13/1711114.html
glPushAttrib(mask) :参数 mask 代表着 某种属性组; 函数 将
属性组 的 当前 属性 入栈。
glPopAttrib(void) : 无参数; 将 栈顶 的 属性 出栈 ,并 将 出栈的 属性 设置 为 OPENGL 当前 状态。
下面的 示例 使用 将 属性组 入栈,出栈 实现了 在 蓝色矩阵 和 绿色 矩阵 之间 进行 切换。
下面 上代码:
// doubleBuffer.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <gl/glut.h> static bool isChange = false; static int changeTimes = 0; void init(){ glClearColor(0.0,0.0,0.0,0.0); glShadeModel(GL_FLAT);//使用单一着色 glColor3f(0,1,0); glPushAttrib(GL_CURRENT_BIT); glColor3f(0,0,1); } void display(){ printf("-----------disPlay-------%d----",changeTimes); glClear(GL_COLOR_BUFFER_BIT); if (isChange == true){ if (changeTimes % 2 == 1){ glPopAttrib(); printf("change green\n");; } else{ glPushAttrib(GL_CURRENT_BIT); glColor3f(0,0,1); printf("change blue\n"); } isChange = false; } glRectf(-0.5,-0.5,0.5,0.5); glFlush(); } void changeColor(){ isChange = true; changeTimes ++; glutPostRedisplay(); printf("----------chilk------------"); } void mouse(int button,int state,int x,int y){ switch (button) { case GLUT_LEFT_BUTTON: if (state == GLUT_DOWN){ changeColor(); } break; case GLUT_RIGHT_BUTTON: if(state == GLUT_DOWN){ glutIdleFunc(NULL); } default: break; } } int _tmain(int argc, _TCHAR* argv[]) { glutInit(&argc,(char**)argv); glutInitWindowSize(500,500); glutInitWindowPosition(0,0); glutCreateWindow("属性组"); init(); glutDisplayFunc(display); glutMouseFunc(mouse); glutMainLoop(); return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:opengl属性组 glpushattrib glpopattrib
原文地址:http://blog.csdn.net/fuming0210sc/article/details/47012853