glutldleFunc(spinCube);
glutMouseFunc(mouse);

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

= GLUT_DOWN) axis = 0; == GLUT_DOWN) axis = 1; == GLUTJDOWN) axis = 2;

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

glutMainLoop();
}

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

/* невидимых поверхностей */

*/

А.9. Вращение куба с использованием массива вершин

/* Вращающийся куб.

* При раскраске граней используется линейная

* интерполяция цвета */

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

* однородных координат и структуру данных, описывающую

* топологию пространственного объекта. Подробно эта

* структура данных рассматривается в главе 4. */

/* С каждой вершиной ассоциирован вектор нормали и цвет. */ /* Центр куба находится в начале координат, а потому

* ненормированные компоненты векторов нормалей

* совпадают с координатами соответствующих вершин */

iinclude <stdlib.h> iinclude <GL/glut.h>
GLfloat vertices!] = {-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[] = {-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[] * {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};
GLubyte cubelndices[]={0,3,2,1,2,3,7,6,0, 4,7,3,1,2,6,5,4,5,6,7,0,1,5,4};
static GLfloat theta[] * {0.0,0.0,0.0}; static GLint axis = 2;
/* ...............................*/
void display!)
{

/* Программа отображения очищает буфер кадра и z-буфер, А.9. Вращение куба с использованием массива вершин

* поворачивает куб, вычерчивает куб в новой

* ориентации и переключает буферы. */

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);
glDrawElements(GL_QUADS, 24, GL_UNSIGNED_BYTE, cubelndices);
glBegin(GL_LINES);
glVertex3f(0.0,0.0,0.0);
glVertex3f(1.0,1.0,1.0); glEnd();

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