/ Published in: C++
Expand |
Embed | Plain Text
#include <GL/glut.h> GLfloat spin=0.0; void init(void) { glClearColor(0.0,0.0,0.0,0.0); glShadeModel(GL_FLAT); } void display(void) { 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); glPopMatrix(); glutSwapBuffers(); } void spinDisplay(void) { spin=spin+1.0; if(spin>360.0) 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; } } //Запросить режим двойной буферизации //Зарегистрировать функции обработки мышиного ввода int main(int argc, char **argv) { glutInit(&argc,argv); glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB); glutInitWindowSize(250,250); glutInitWindowPosition(100,100); glutCreateWindow("Двойная буферизация"); init(); glutDisplayFunc(display); glutReshapeFunc(reshape); glutMouseFunc(mouse); glutMainLoop(); return 0; }
You need to login to post a comment.
