码迷,mamicode.com
首页 > 编程语言 > 详细

看opengl写代码(10) 使用属性数组

时间:2015-07-27 00:30:14      阅读:117      评论:0      收藏:0      [点我收藏+]

标签: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写代码(10) 使用属性数组

标签:opengl属性组   glpushattrib   glpopattrib   

原文地址:http://blog.csdn.net/fuming0210sc/article/details/47012853

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!