第三个程序opengl颜色选择
2013-11-07 20:18
357 查看
仔细研究代码比较好,所以我就直接上代码吧。
测试着色模式时:
单色方式:
平滑方式:
矩形颜色设置:
索引颜色设置:
// 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_7:用两个片段着色器和着色器程序分别画2个不同颜色的三角形
- Opengl学习程序之顶点颜色和位置设置
- 用唯一的颜色id编号实现OpenGL选择功能(OpenGL Selection Using Unique Color IDs )
- 关于opengl中颜色表函数glcolortable出现异常的问题(opengl红宝书8-7程序)解决方法
- OpenGL入门学习之四——颜色的选择
- OpenGL入门学习[四]颜色的选择。
- [OpenGL]课后案例08:选择模式拾取程序
- OpenGL入门学习——第四课 颜色的选择
- 创建一个如下的窗体,并在窗体上放置colorDialog控件。实现功能:1)程序运行时,单击打开颜色对话框按钮,可选择颜色,并以所选颜色作为窗体背景色
- OpenGL学习--------颜色的选择
- 第三个程序:生成两个个ffH以内的随机数,并选择随机的运算符计算[但是好像非随机吧,cpu太快了]
- 选择学习“下一个”程序语言
- 微信小程序/下拉选择
- The Cg Runtime:OpenGL中调用Cg程序
- SQLite.NET提供程序的选择
- Android OpenGl ES2.0编程_第一个OpenGL小程序
- 【GPU编程】The Cg Runtime:OpenGL中调用Cg程序
- 新手建站选择CMS程序时需要注意什么
- 基于Tkinter利用python实现颜色空间转换程序