int main(int argc, char** argv)
{
glutlnit(iargc,argv);
glutlnitDisplayMode (GLUT_SINGLE | GLUT_RGB); singleb=glutCreateWindow(~single buffered"); myinit ();
glutDisplayFunc(displays); glutReshapeFunc (myReshape); glutldleFunc (spinDisplay); glutMouseFunc (mouse);
glutlnitDisplayMode (GLUT_DOUBLE | GLUT_RGB); doubleb=glutCreatewindow("double buffered"); myinit ();
glutDisplayFunc(displayd); glutReshapeFunc (myReshape); glutldleFunc (spinDisplay); glutMouseFunc (mouse);
glutMainLoop();
}
/*-------Конец файла-------*/
A. 7. Программа отображения с двойной буферизацией А.8. Программа отображения вращающегося куба
/* Вращающийся куб.
* При раскраске граней используется линейная
* интерполяция цвета */
/* Программа демонстрирует использование преобразований
* однородных координат и структуру данных, описывающую
* топологию пространственного объекта. Подробно эта
* структура данных рассматривается в главе 4. */
/* С каждой вершиной ассоциирован вектор нормали и цвет. */ /* Центр куба находится в начале координат, а потому
* ненормированные компоненты векторов нормалей
* совпадают с координатами соответствующих вершин */
ti.ncl.ude <stdlib.li> #д.пс11к1е <СЬ/д1и^п>
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]); glNormal3fv(normals[b]); glVertex3fv(vertices[b]); glColor3fv(colors[c]); glNormal3fv(normals[c]); glVertex3fv(vertices[c]);