看opengl写代码(10) 使用属性数组
来源:互联网 发布:mac 桌面壁纸位置 编辑:程序博客网 时间:2024/06/06 12:56
众所周知,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;}
1 0
- 看opengl写代码(10) 使用属性数组
- 看opengl写代码(5) 使用顶点数组
- 看opengl写代码(9)使用顶点数组(VAO)
- 看opengl写代码(7) 使用混合数组(glInterLeavedArrays)
- 看opengl写代码(8) 使用缓冲区
- 看opengl 写代码(12) 光
- 看opengl写代码(2) Hello,OpenGl
- 看opengl写代码(3) 实现矩阵的旋转
- 看opengl 写代码(4) 画一个圆
- 看opengl写代码(6)glArrayElement,,glDrawElements和glDrawArrays
- 看openGl写代码(11) 第一个 三维物体
- 看数据结构写代码(19) 数组的实现
- 看 opengl 写代码(1) 搭建开发环境(vs2012 + glut 和 vs2013 + glut)
- 看数据结构写代码(4)单链表
- 看数据结构写代码(43) 关节点
- 看数据结构写代码(55) 二叉排序树
- 看数据结构写代码(61) 哈希表
- 看数据结构写代码(65) 基数排序
- Android之SurfaceView SurfaceHolder Surface 对概念的把握
- C学习第一式:对scanf()函数的学习
- uva 11235 - Frequent values
- 细数从负载均衡到应用交付的演进历程
- 控件常用属性
- 看opengl写代码(10) 使用属性数组
- UIAlertView自带password输入框
- java中i=i++问题分析 source:http://www.ticmy.com/?p=43
- Html菜单的实现
- [iOS学习]怎么用返回键设置自定义的图片
- java 7 新特性/switch/枚举类型/二进制/字面量
- jqPaginator-master | kkpager-master 这两个分页插件的用法
- DuiLib介绍及其消息处理剖析
- 动态规划题集