glutReshapeFunc (myReshape); glutKeyboardFunc(key); glutMouseFunc (mouse); glutMainLoop();
}
/*-------Конец файла-------*/
A.7. Программа отображения с двойной буферизацией
/*
* single double.с
* Программа демонстрирует методику использования одинарной и
* двойной буферизации при создании динамического изображения.
А. 7. Программа отображения с двойной буферизацией 541
* Щелчок левой кнопкой мыши запускает движение квадрата по
* экрану, а щелчок средней кнопкой прекращает движение. */
iinclude <GL/glut.h> finclude <stdlib.h>
static GLfloat spin = 0.0; int singleb, doubleb;
/*...........--................*/
void displayd()
{
glClear (GL_COLOR_BUFFER_BIT); glRectf (-25.0, -25.0, 25.0, 25.0); glutSwapBuffers ();
}
/*............................... */
void displays() {
glClear (GL COLOR BUFFER BIT); glRectf (-25.0, -25.0, 25.0, 25.0); glFlush();
)
/*............................... */
void spinDisplay ()
{
spin = spin + 2.0;
if (spin > 360.0) spin spin - 360.0;
glutSetWindow(singleb);
glLoadIdentity();
glRotatef (spin, 0.0, 0.0, 1.0);
glutPostRedisplay();
glutSetWindow(doubleb);
glLoadIdentity();
glRotatef (spin, 0.0, 0.0, 1.0);
glutPostRedisplay();
}
/*............................... */
void myinit () {
glClearColor (0.0, 0.0, 0.0, 1.0); glColor3f (1.0, 1.0, 1.0); glShadeModel (GL FLAT);
}
/* ............................... */
void mouse(int btn, int state, int x, int y)
Приложение А. Демонстрационные программы
{
if(btn==GLUT_LEFT_BUTTON && state==GLUT_DOWN)
glutldleFunc(spinDisplay); if(btn==GLUT MIDDLE BUTTON && state«GLUT DOWN)
glutldleFunc(NULL);
)
/*...............................*/
void myReshape(int w, int h) {
glViewport(0, 0, w, h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); if (w <= h)
glOrtho (-50.0, 50.0, -50.0*(GLfloat)h/(GLfloat)w, 50.0*(GLfloat)h/(GLfloat)w, -1.0, 1.0);
else
glOrtho (-50.0*(GLfloat)w/(GLfloat)h, 50.0*(GLfloat)w/(GLfloat)h, -50.0, 50.0, -1.0, 1.0); glMatrixMode(GL_MODELVIEW); glLoadldentity J);
)
/* Основной цикл */