Приложение А. Демонстрационные программы
glColor3fv(colors[d]); glNormal3fv(normals[d]); glVertex3fv(vertices[d]); glEnd();
}
/* -............................ */
void colorcube() {
/* Связь вершин с гранями */
polygon(0,3,2,1); polygon(2,3,7,6); polygon(0,4,7,3); polygon(l,2,6,5); polygon(4,5,6,7); polygon(0,l,5,4);
}
static GLfloat theta[] = {0.0,0.0,0.0}; static GLint axis = 2;
/* ------------------------------- */
void display() {
/* Программа отображения очищает буфер кадра и z-буфер,
* поворачивает куб, вычерчивает куб в новой
* ориентации и переключает буферы. */
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity();
glRotatef(theta[0], 1.0, 0.0, 0.0); glRotatef(theta[l], 0.0, 1.0, 0.0); glRotatef(theta[2], 0.0, 0.0, 1.0);
colorcube();
glFlush(); glutSwapBuffers();
}
/*............................... */
void spinCube() {
/* Программа обработки простоя.
* Программа поворачивает куб на 2 градуса
* вокруг заданной оси. */
А.8. Программа отображения вращающегося куба
thetafaxis] += 2.0;
if( thetafaxis] > 360.0 ) theta[axis] -= 360.0; /* display(); */ glutPostRedisplay();
/*------------------------------- */
void mouse (int btn, int state, int x, int y) {
/* Программа обработки событий мыши.
* Программа выбирает ось, вокруг которой
* выполняется поворот. */
if(btn==GLUT_LEFT_BUTTON && state = if(btn==GLUT_MIDDLE_BUTTON && state if(btn==GLUT_RIGHT_BUTTON && state
}
/*...............................*/
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 arge, char **argv) {
glutlnit(iargc, argv);
/* Задается режим двойной буферизации и обработки г-буфера */
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); glutInitWindowSize(500, 500); glutCreateWindow("colorcube"); glutReshapeFunc(myReshape); glutDisplayFunc(display);