}
/*-------Конец файла-------*/
A.JO. Вращающийся куб, управляемый трекболом А.П. Изменение положения наблюдателя
/* Вращение куба с изменением положения наблюдателя.
* Программа рассматривалась в главе 5.
* Структура данных, описывающая куб, и программа
* отображения те же, что и в предыдущем примере. */
iinclude <stdlib.h> finclude <GL/glut.h>
GLfloat vertices[][3] = {{-1.0,-1.0,-1.0},{1.0,-1.0,-1.0}, {1.0,1.0,-1.0}, {-1.0,1.0,-1.0}, {-1.0,-1.0,1.0}, {1.0,-1.0,1.0}, {1.0,1.0,1.0}, {-1.0,1.0,1.0}};
GLfloat normals[][3] = {{-1.0,-1.0,-1.0},{1.0,-1.0,-1.0}, {1.0,1.0,-1.0}, {-1.0,1.0,-1.0}, {-1.0,-1.0,1.0}, {1.0,-1.0,1.0}, {1.0,1.0,1.0}, {-1.0,1.0,1.0}};
GLfloat colors[][3] = {{0.0,0.0,0.0},{1.0,0.0,0.0}, {1.0,1.0,0.0}, {0.0,1.0,0.0}, {0.0,0.0,1.0}, {1.0,0.0,1.0}, {1.0,1.0,1.0}, {0.0,1.0,1.0}};
/* ............................... */
void polygon(int a, int b, int с , int d) {
glBegin(GL_POLYGON);
glColor3fv(colors[a]);
glNormal3fv(normals[a]);
glVertex3fv(vertices[a]);
glColor3fv(colors[b]j;
glNormal3fv(normals[b]);
glVertex3fv(vertices[b]);
glColor3fv(colors[c]);
glNormal3fv(normals[c]);
glVertex3fv(vertices[c]);
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;
static GLdouble viewer[]= {0.0, 0.0, 5.0}; /* Исходное положение наблюдателя */
/*.........-.....................*/
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
/* Обновить положение наблюдателя */ glLoadldentity();
gluLookAt(viewer[0],viewer[l],viewer[2], 0.0, 0.0, 0.0,
0.0, 1.0, 0.0);
/* Поворот куба */ 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 mouse(int btn, int state, int x, int y) {