第三个程序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;}

测试着色模式时:

单色方式:



平滑方式:



矩形颜色设置:



索引颜色设置:


原创粉丝点击