/* 对应的鼠标状态有:GLUT_DOWN,GLUT_LEFT_BUTTON,GLUT_RIGHT_BUTTON */ #define PI 3.1415926535898 #include <GL/glut.h> #include <stdlib.h> #include<math.h> GLfloat ctrlpoints[4][3] = { { -4.0, -4.0, 0.0}, { -2.0, 4.0, 0.0}, {2.0, -4.0, 0.0}, {4.0, 4.0, 0.0}}; void init(void) { glClearColor(0.0, 0.0, 0.0, 0.0); glShadeModel(GL_FLAT); // glMap1f(GL_MAP1_VERTEX_3, 0.0, 1.0, 3, 4, &ctrlpoints[0][0]); // glEnable(GL_MAP1_VERTEX_3); } void display(void) { int i; glClear(GL_COLOR_BUFFER_BIT); glColor3f(1.0, 1.0, 1.0); glBegin(GL_LINE_STRIP); for (i = 0; i <= 30; i++) glEvalCoord1f((GLfloat) i/30.0); glEnd(); /* The following code displays the control points as dots. */ glPointSize(5.0); glColor3f(1.0, 1.0, 0.0); glBegin(GL_POINTS); for (i = 0; i < 4; i++) glVertex3fv(&ctrlpoints[i][0]); glEnd(); glFlush(); //glutSwapBuffers(); } void displayA(void)//画不相交的竖线 { glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_LINES); glVertex2f(0.0,0.0); glVertex2f(0.0,4.0); glVertex2f(4.0,0.0); glVertex2f(8.0,0.0); glEnd(); glFlush(); } void displayB(void)//画一个圆 { glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_LINE_LOOP); int circle_points=1000; for(int i=0;i<circle_points;i++) { GLdouble angle=2*PI*i/circle_points; glVertex2f(3*cos(angle),3*sin(angle)); } glEnd(); glFlush(); } void displayC(void)//画点 { glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_LINES); glColor3f(1.0,0.0,0.0); glEnable(GL_LINE_STIPPLE); glLineWidth(3.0); glLineStipple(1,0x0101); glVertex2f(0.0,1.0); glVertex2f(1.0,3.0); glLineStipple(1,0x00FF); glVertex2f(1.0,1.0); glVertex2f(2.0,2.0); glLineStipple(1,0x1C47); glVertex2f(4.0,1.0); glVertex2f(3.0,4.0); glDisable(GL_LINE_STIPPLE); glEnd(); glFlush(); } void displayD(void)//镂空模式绘画 { GLubyte fly[]={ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x03,0x80,0x01,0xC0,0x06,0xC0,0x03,0x60, 0x04,0x60,0x06,0x20,0x04,0x30,0x0C,0x80, 0x04,0x18,0x18,0x20,0x04,0x0C,0x30,0x20, 0x04,0x06,0x60,0x20,0x44,0x03,0xC0,0x22, 0x44,0x01,0x80,0x22,0x44,0x01,0x80,0x22, 0x44,0x01,0x80,0x22,0x44,0x01,0x80,0x22, 0x44,0x01,0x80,0x22,0x44,0x01,0x80,0x22, 0x00,0x01,0x00,0x66,0x03,0x01,0x80,0x00, 0x19,0x81,0x81,0x98,0x0c,0xC1,0x83,0x80, 0x07,0xe1,0x87,0xe0,0x03,0x3f,0x00,0x60, 0x03,0x31,0x8c,0x00,0x03,0x33,0x00,0x60, 0x06,0x64,0x26,0x60,0x0c,0xcc,0x88,0x80, 0x18,0xcc,0x33,0x18,0x10,0xc4,0x23,0x08, 0x10,0x63,0xc6,0x08,0x10,0x30,0x0c,0x08, 0x10,0x18,0x18,0x08,0x10,0x00,0x00,0x08, }; GLubyte halftone[]={ //0xAA,0xAA,0xAA,0xAA,0x55,0x55,0x55,0x55, //0xAA,0xAA,0xAA,0xAA,0x55,0x55,0x55,0x55, //0xAA,0xAA,0xAA,0xAA,0x55,0x55,0x55,0x55, //0xAA,0xAA,0xAA,0xAA,0x55,0x55,0x55,0x55, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, 0xAA,0xAA,0xAA,0xAA,0x55,0x55,0x55,0x55, 0xAA,0xAA,0xAA,0xAA,0x55,0x55,0x55,0x55, 0xAA,0xAA,0xAA,0xAA,0x55,0x55,0x55,0x55, 0xAA,0xAA,0xAA,0xAA,0x55,0x55,0x55,0x55, 0xAA,0xAA,0xAA,0xAA,0x55,0x55,0x55,0x55, 0xAA,0xAA,0xAA,0xAA,0x55,0x55,0x55,0x55, 0xAA,0xAA,0xAA,0xAA,0x55,0x55,0x55,0x55, 0xAA,0xAA,0xAA,0xAA,0x55,0x55,0x55,0x55, 0xAA,0xAA,0xAA,0xAA,0x55,0x55,0x55,0x55, 0xAA,0xAA,0xAA,0xAA,0x55,0x55,0x55,0x55, 0xAA,0xAA,0xAA,0xAA,0x55,0x55,0x55,0x55, 0xAA,0xAA,0xAA,0xAA,0x55,0x55,0x55,0x55, }; glClear(GL_COLOR_BUFFER_BIT); glColor3f(1.0,0.0,1.0); glRectf(-3.0,-3.0,0.0,0.0); glEnable(GL_POLYGON_STIPPLE); glPolygonStipple(fly); glRectf(0.0,-3.0,3.0,0.0); glPolygonStipple(halftone); glRectf(3.0,-3.0,6.0,0.0); glDisable(GL_POLYGON_STIPPLE); //glEnd(); glFlush(); } void reshape(int w, int h) { glViewport(0, 0, (GLsizei) w, (GLsizei) h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); if (w <= h) glOrtho(-5.0, 5.0, -5.0*(GLfloat)h/(GLfloat)w, 5.0*(GLfloat)h/(GLfloat)w, -5.0, 5.0); else glOrtho(-5.0*(GLfloat)w/(GLfloat)h, 5.0*(GLfloat)w/(GLfloat)h, -5.0, 5.0, -5.0, 5.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); } void keyboard(unsigned char key, int x, int y) { switch (key) { case 97: //键入a便执行下一个 exit(0); break; } } int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); glutInitWindowSize (1200, 800);//设置窗口大小 glutInitWindowPosition (10, 10);//设置窗口的位置 glutCreateWindow ("world");//设置窗口的名称 init (); glutDisplayFunc(displayD);//调用绘画函数 glutReshapeFunc(reshape);// //响应按键的消息,键的释放被忽略 //其参数为对按键函数 glutKeyboardFunc (keyboard); glutMainLoop(); return 0; }