第三个程序opengl颜色选择
来源:互联网 发布:粮食安全 大数据 编辑:程序博客网 时间:2024/05/01 15:36
仔细研究代码比较好,所以我就直接上代码吧。
// myfistopengl4.cpp : 定义控制台应用程序的入口点。////目的:opengl的颜色选择/*尽量不要用glaux.原因:1 功能不完善,不适合于编程人员。2 和平台有关,这有悖于openGL通用平台的初衷。*/#include "stdafx.h"#include <windows.h>#include <GL/gl.h>#include <gl\glut.h>#include "glaux.h"#pragma comment (lib, "opengl32.lib")#pragma comment (lib, "glaux.lib") //链接库glauxlib文件到工程中,和setting中加入lib文件的效果是一样的,可是我不明白为什么glut32.lib 不需要这样做呢??#include <math.h>const GLdouble Pi = 3.1415926536;/*glColor*系列函数可以用于设置颜色,其中三个参数的版本可以指定R、G、B的void glColor3f(GLfloat red, GLfloat green, GLfloat blue);void glColor4f(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);采用f和d做后缀的函数,以1.0表示最大的使用。采用b做后缀的函数,以127表示最大的使用。采用ub做后缀的函数,以255表示最大的使用。采用s做后缀的函数,以32767表示最大的使用。采用us做后缀的函数,以65535表示最大的使用。*/// RGBA颜色测试//在RGB模式下,使用glClearColor来指定“空”的颜色void myDisplay_rectangle(void){glClearColor(1.0f, 0.0f, 0.0f, 0.0f); //清空后的颜色为红色 glClear(GL_COLOR_BUFFER_BIT); glColor3f(0.0f, 0.0f, 1.0f); glRectf(-0.5f, -0.5f, 0.5f, 0.5f); glFlush();}/*索引颜色的主要优势是占用空间小(每个像素不必单独保存自己的颜色,只用很少的二进制位就可以代表其颜色在颜色表中的位置),花费系统资源少,图形运算速度快,但它编程稍稍显得不是那么方便,并且画面效果也会比RGB颜色差一些。目前的PC机性能已经足够在各种场合下使用RGB颜色,因此PC程序开发中,使用索引颜色已经不是主流。当然,一些小型设备例如GBA、手机等,索引颜色还是有它的用武之地。*///索引颜色测试//在索引颜色模式下,使用glClearIndex来指定“空”的颜色所在的索引,它需要一个参数,其意义跟glIndexi相似。void myDisplay_index(void){ int i; for(i=0; i<8; ++i)//auxSetOneColor设置颜色表中的一格。循环八次就可以设置八格。 auxSetOneColor(i, (float)(i&0x04), (float)(i&0x02), (float)(i&0x01)); glShadeModel(GL_FLAT); glClear(GL_COLOR_BUFFER_BIT); //意思是把屏幕上的颜色清空。 glBegin(GL_TRIANGLE_FAN); glVertex2f(0.0f, 0.0f); //在循环中用glVertex设置顶点//使用glIndex*系列函数可以在颜色表中选择颜色。其中最常用的可能是glIndexi for(i=0; i<=8; ++i) { glIndexi(i); //用glIndexi改变顶点代表的颜色 glVertex2f(cos(i*Pi/4), sin(i*Pi/4)); } glEnd(); glFlush();}//指定着色模式/*在默认情况下,OpenGL会计算两点顶点之间的其它点,并为它们填上“合适”的颜色,使相邻的点的颜色值都比较接近。如果使用的是RGB模式,看起来就具有渐变的效果。如果是使用颜色索引模式,则其相邻点的索引值是接近的,如果将颜色表中接近的项设置成接近的颜色,则看起来也是渐变的效果。但如果颜色表中接近的项颜色却差距很大,则看起来可能是很奇怪的效果。使用glShadeModel函数可以关闭这种计算,如果顶点的颜色不同,则将顶点之间的其它点全部设置为与某一个点相同。(直线以后指定的点的颜色为准,而多边形将以任意顶点的颜色为准,由实现决定。)为了避免这个不确定性,尽量在多边形中使用同一种颜色。*/#include <math.h>//const GLdouble Pi = 3.1415926536;void myDisplay_colormodel(void){ int i; glShadeModel(GL_FLAT); // 单色方式//glShadeModel(GL_SMOOTH); // 平滑方式,这也是默认方式 glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_TRIANGLE_FAN); glColor3f(1.0f, 1.0f, 1.0f); glVertex2f(0.0f, 0.0f); for(i=0; i<=8; ++i) { glColor3f(i&0x04, i&0x02, i&0x01); glVertex2f(cos(i*Pi/4), sin(i*Pi/4)); } glEnd(); glFlush();}/*int main(void){ auxInitDisplayMode(AUX_SINGLE|AUX_INDEX); auxInitPosition(0, 0, 400, 400); auxInitWindow(L""); myDisplay_index(); //myDisplay_rectangle(); Sleep(10 * 1000); return 0;}*/int main(int argc, char* argv[]){glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE); glutInitWindowPosition(100, 100); glutInitWindowSize(400, 400); glutCreateWindow("OpenGL程序绘制图形");glutDisplayFunc(&myDisplay_colormodel); glutMainLoop();return 0;}
测试着色模式时:
单色方式:
平滑方式:
矩形颜色设置:
索引颜色设置:
- 第三个程序opengl颜色选择
- OpenGL 颜色的选择
- OpenGL--第一个OpenGL程序
- [OpenGL]第一个OpenGL程序
- 第一个OpenGL程序
- 第一个OpenGL程序
- 第一个OpenGL程序
- 第一个OpenGL程序
- 第一个opengl程序
- OpenGL 第一个程序
- 第一个OpenGL程序
- 第一个Opengl程序
- 第一个OpenGL程序
- 第一个OpenGL程序
- 第一个OpenGL程序
- 第一个OpenGL程序
- 第一个opengl程序
- NeHe OpenGL 第三课:颜色渲染
- Bugs On J2EE
- HDOJ1003 简单DP问题
- 软基作业——最后一次的留念
- uva 11235 - Frequent values(RMQ问题)
- 再谈probit回归和logistic回归
- 第三个程序opengl颜色选择
- Eclipse中如何导入Android SDK目录中的samples项目
- javascript
- HDOJ1004 so easy
- android权限大全
- Android GridView属性集合
- 【PAT Advanced Level】1023. Have Fun with Numbers (20)
- HDOJ1052田忌赛马
- ios block