//============================================================================
// Name : opengl.cpp
// Author : OpenGL Programming Guide. The Offical Guide to Learning OpenGL,Version 2.1
//============================================================================
#include<GL/glut.h>
void init();
void display();
void spinDisplay();
void reshape(int w,int h);
void mouse(int button,int state,int x,int y);
static GLfloat spin = 0.0;
void createWindow(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB|GLUT_DOUBLE);
glutInitWindowPosition(400, 400);
glutInitWindowSize(300, 300);
glutCreateWindow("OpenGL 3D view");
}
int main(int argc,char *argv[]) {
createWindow(argc, argv);
init();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutMouseFunc(mouse);
glutMainLoop();
return 0;
}
void init(){
glClearColor(0.0,0.0,0.0,0.0);//用rgba模式将清除颜色设置为黑色。
glClear(GL_COLOR_BUFFER_BIT);// 将整个窗口清除为当前清除颜色。
glShadeModel(GL_FLAT);
}
void display(){
glClear(GL_COLOR_BUFFER_BIT);
glPushMatrix();
glRotatef(spin,0.0,0.0,1.0);
glColor3f(1.0,1.0,1.0);
//glRectf(-25.0,-25.0,25.0,25.0);
glBegin(GL_POLYGON);
glVertex2f(0.0,0.0);
glVertex2f(0.0,3.0);
glVertex2f(4.0,3.0);
glVertex2f(6.0,1.5);
glVertex2f(4.0,0.0);
glEnd();
glPopMatrix();
glutSwapBuffers();
}
void spinDisplay(){
spin = spin +2.0;
if(spin > 360)spin = spin -360.0;
glutPostRedisplay();
}
void reshape(int w,int h){
glViewport(0,0,(GLsizei)w,(GLsizei)h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-50.0,50.0,-50.0,50.0,-1.0,1.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void mouse(int button,int state,int x,int y){
switch(button){
case GLUT_LEFT_BUTTON:
if(state == GLUT_DOWN)glutIdleFunc(spinDisplay);
break;
case GLUT_RIGHT_BUTTON:
if(state == GLUT_DOWN)glutIdleFunc(NULL);
break;
default:break;
}
}//=============================================