原理:一列一列的画点,每画一列,改变一下颜色,然后画下一列,主要用到下面两个函数:

void glColor3f(GLfloatred, GLfloatgreen,GLfloat blue)

设置绘制图形的颜色,这里颜色的变化范围是:glColor3f(0.0f,0.0f,0.0f)->glColor3f(1.0f,1.0f,1.0f),即黑白渐变。

glVertex2f(GLfloat posX, GLfloat posY)

在(posX,posY)处绘制点。


最终效果:



代码清单(基于GLFW):

#include <GL/glfw.h> #include <stdlib.h> #include<stdio.h> #define WINDOW_WIDTH  800 #define WINDOW_HEIGHT 800 void initScene(int w,int h) {     // 启用阴影平滑     glShadeModel( GL_SMOOTH );     // 黑色背景     glClearColor( 0.0, 0.0, 0.0, 0.0 );     // 设置深度缓存     glClearDepth( 1.0 );     // 启用深度测试     glEnable( GL_DEPTH_TEST );     // 所作深度测试的类型     glDepthFunc( GL_LEQUAL );     // 告诉系统对透视进行修正     glHint( GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST ); } //这里进行所有的绘图工作 void  drawScene() {     float colorSpan=0.0005f;     float color=0.0f;     float pixelSize=2.0f;     float posY=-1.0f;     float posX=-1.0f;      glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);     glLoadIdentity();                                   // Reset The View     glTranslatef(0.0f,0.0f,-2.0f);     //glPointSize(pixelSize);     glBegin(GL_POINTS);     for(posX=-1.0f;posX<=1.0f;posX+=0.001f)     {         color+=colorSpan;         //设置点颜色         glColor3f(color,color,color); //设置点颜色         for(posY=-1.0f;posY<=1.0f;posY+=0.001f)         {             //绘制点             glVertex2f(posX, posY);         }     }     glEnd();     // 交换缓冲区     glfwSwapBuffers(); } //重置窗口大小后的回调函数 void GLFWCALL resizeGL(int width, int height ) {     // 防止窗口大小变为0     if ( height == 0 )     {         height = 1;     }     // 重置当前的视口     glViewport( 0, 0, (GLint)width, (GLint)height );     // 选择投影矩阵     glMatrixMode( GL_PROJECTION );     // 重置投影矩阵     glLoadIdentity();     // 设置视口的大小     gluPerspective( 45.0, (GLfloat)width/(GLfloat)height, 0.1, 100.0 );     // 选择模型观察矩阵     glMatrixMode( GL_MODELVIEW );     glLoadIdentity(); }  int main( void ) {     //记录程序运行状态     int running = GL_TRUE;     //初始化 GLFW     if( !glfwInit() )     {         exit( EXIT_FAILURE );     }     // 创建一个OpenGL 窗口     if( !glfwOpenWindow( WINDOW_WIDTH,WINDOW_HEIGHT,6,6,6,0,32,0,GLFW_WINDOW) )     {         glfwTerminate();         exit( EXIT_FAILURE );     }     //初始化OpenGL窗口     initScene(WINDOW_WIDTH, WINDOW_HEIGHT);     //设置窗口大小发生变化时的回调函数     glfwSetWindowSizeCallback(resizeGL);     //主循环     while( running )     {         // OpenGL rendering goes here...         glClear( GL_COLOR_BUFFER_BIT );         // 当按下ESC键的时候触发         running = !glfwGetKey( GLFW_KEY_ESC ) &&glfwGetWindowParam( GLFW_OPENED );         drawScene();         //延时0.05秒         glfwSleep(0.05 );     }     glfwTerminate();     //退出程序     exit( EXIT_SUCCESS ); }