模板
按a键test值递增,按r重设test值。(可自定义)
#include <GL/glut.h>
#include <stdio.h>
#include <unistd.h>
#include <math.h>
#include <time.h>
#define DIM 1024
#define DM1 (DIM-1)
#define _sq(x) ((x)*(x)) // square
#define _cb(x) abs((x)*(x)*(x)) // absolute value of cube
#define _cr(x) (unsigned char)(pow((x),1.0/3.0)) // cube root
#define SIZE_X 512
#define SIZE_Y 512
#define PI 3.1415926
#define PI2 PI*2
int winID;
float test = 0.1;
unsigned char RD(int i, int j)
{
return i * test;
}
unsigned char GR(int i, int j)
{
return j* test;
}
unsigned char BL(int i, int j)
{
return j*i* test;
}
void display(void)
{
static int x, y, n;
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_POINTS);
for (int i=0; i<DIM; i++)
{
for (int j=0; j<DIM; j++)
{
glColor3f( RD(i,j)%255/255.0, GR(i,j)%255/255.0, BL(i,j)%255/255.0);
glVertex3f(i, j, 0.0);
}
}
glEnd();
glutSwapBuffers();
}
void idle(void)
{
usleep(10000);
glutPostRedisplay();
}
void reshape(int Width,int Height)
{
const float fa = 32.0;
const float half = 512.0;
glViewport(0, 0, Width, Height); //视口范围
glMatrixMode(GL_PROJECTION); // 投影视图矩阵
glLoadIdentity();
glOrtho(0.0, (float)DIM, 0.0, (float)DIM, -10.0, 100.0);
//gluPerspective(90.0, 1.0, 1.0, 80.0); // 透视投影矩阵(立体视图
glMatrixMode(GL_MODELVIEW); // 模型视图矩阵
glLoadIdentity();
gluLookAt(0.0,0.0,fa, 0.0,0.0,0.0, 0.0,1.0,fa); //设置观察点
// 观察点, 朝向的坐标, 观察点向上坐标
}
void keypress(unsigned char key, int mousex, int mousey)
{
switch (key)
{
case 'q':
glutDestroyWindow(winID);
exit(0);
break;
case 'Q':
glutDestroyWindow(winID);
exit(0);
break;
case 'a':
case 'A':
test += 0.1;
printf("%f\n", test);
break;
case 'r':
case 'R':
test = 0.0;
printf("%f\n", test);
break;
}
}
void init(void)
{
glClearColor(0.0, 0.0, 0.0, 0.0);
glEnable(GL_BLEND);
glLineWidth( 1.0 );
glPointSize( 1.0 );
glEnable(GL_POINT_SMOOTH);
glEnable(GL_LINE_SMOOTH);
srand(time(NULL));
}
void main(int argc, char *argv[])
{
glutInit(&argc, argv);
//显示模式 双缓冲 RGBA
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA );
glutInitWindowSize(SIZE_X, SIZE_Y); //窗口大小
glutInitWindowPosition(200, 200); //位置
winID = glutCreateWindow("TorusVortex"); //窗口句柄
init();
glutDisplayFunc(display); //显示
glutKeyboardFunc(keypress); //按键事件响应
glutReshapeFunc(reshape); //窗口事件响应
glutIdleFunc(idle); //闲时回调函数
glutMainLoop(); //开始主循环
}