glFlush();
glutSwapBuffers();
}
/*.....-----------------.........*/
void spinCube() {

/* Программа обработки простоя.

* Программа поворачивает куб на 2 градуса

* вокруг заданной оси. */

theta[axis] += 2.0;
if( theta[axis] > 360.0 ) theta[axis] -= 360.0; glutPostRedisplay();
void mouse(int btn, int state, int x, int y) {

/* Программа обработки событий мыши.

* Программа выбирает ось, вокруг которой

* выполняется поворот. */

if(btn==GLUT_LEFT_BUTTON && state == GLUT_D0WN) axis = 0; if(btn==GLUT_MIDDLE_BUTTON && state == GLUT_DOWN) axis = 1; if(btn==GLUT_RIGHT_BUTTON && state == GLUT_DOWN) axis = 2;
/*
*/
/* -------------------------
void myReshape(int w, int h)
*/

Приложение А. Демонстрационные программы

glViewport(0, 0, w, h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); if (w <= h)
glOrtho(-2.0, 2.0, -2.0*(GLfloat)h/(GLfloat)w,
2.0*(GLfloat)h/(GLfloat)w, -10.0, 10.0);
else
glOrtho(-2.0 *(GLfloat)w/(GLfloat)h, 2.0 *(GLfloat)w/(GLfloat)h, -2.0, 2.0, -10.0, 10.0); glMatrixMode(GL_MODELVIEW);
}
/*----------........_............*/
void main(int argc, char **argv) {

/* Задается режим двойной буферизации и обработки z-буфера */ glutlnit(&argc, argv);

glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize(500, 500);
glutCreateWindow("colorcube");
glutReshapeFunc(myReshape);
glutDisplayFunc(display);
glutldleFunc(spinCube);
glutMouseFunc(mouse);

glEnable(GL_DEPTH_TEST); /* Разрешается режим удаления */

/* невидимых поверхностей */ glEnableClientState(GL_COLOR_ARRAY); glEnableClientState(GL_NORMAL_ARRAY); glEnableClientState(GL_VERTEX_ARRAY); glVertexPointer(3, GL_FLOAT, 0, vertices); glColorPointer(3,GL_FLOAT, 0, colors); glNormalPointer(GL_FLOAT,0, normals); glColor3f(1.0,1.0,1.0); glutMainLoop();

}

/*-------Конец файла-------*/

A. 10. Вращающийся куб, управляемый трекболом

/* Программа демонстрирует использование трекбола для управления вращением куба */

tinclude <math.h> #include <GL/glut.h>
idefine bool int idefine false 0

⇐ Предыдущая| |Следующая ⇒