/* NAME: Kirill Vasil'evich Timofeev, 322
 * ASGN: N3
 */

#include <QtGui>      // подключаем модуль QtGui
#include <QtOpenGL\QGLWidget>   // подключаем модуль QtOpenGL
#include <math.h>     // подключаем математическую библиотеку
#include <time.h>     // подключаем математическую библиотеку
#include "scene3D.h"  // подключаем заголовочный файл scene3D.h

#ifndef GL_MULTISAMPLE
 #define GL_MULTISAMPLE  0x809D
 #endif

const int X = 0;
const int Y = 2;
const int Z = 1;

const static float pi=3.141593; // глобальная переменная ПИ

GLfloat VertexArray[250][3];// декларируем массив вершин
GLubyte Array4[50][4]; //
GLubyte Array18[4][19]; //
GLubyte Array4d[40][4]; //
GLubyte Array4m[10][4]; //
GLfloat ColorArray[250][4];  // декларируем массив цветов вершин
GLubyte IndexArray[65][2];  // декларируем массив индексов вершин
GLubyte ArrayNum[34][2];  // декларируем массив индексов вершин
GLubyte ArrayAn[4][4];
GLubyte PointsHo[12];
GLubyte secStr[2];

// конструктор класса Scene3D
Scene3D::Scene3D(QWidget* parent/*= 0*/) : QGLWidget(parent)
{

   // начальные значения данных-членов класса
   xRot=-100; yRot=0; zRot=-20; xTra=0; yTra=0; zTra=0;
   antiAliasing = false; antiAliasingSM = false; makean = true; nSca=0.2; nAni = 0;

   QTimer *timer = new QTimer(this);
   connect(timer, SIGNAL(timeout()), this, SLOT(updateGL()));
   timer->start(1000);

}

/*virtual*/ void Scene3D::initializeGL() // инициализация
{
   qglClearColor(Qt::white);
   glEnable(GL_POINT_SMOOTH);
   glEnable(GL_DEPTH_TEST);  // устанавливает режим проверки глубины пикселей
   glShadeModel(GL_FLAT);    // отключает режим сглаживания цветов
   glEnable(GL_CULL_FACE);
   glEnable(GL_LIGHTING);
   glLightModelf(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE);
   glEnable(GL_TEXTURE_2D);  // установить режим двумерных текстур
   glEnable(GL_MULTISAMPLE); // включаем мультивыборку


   getVertexArray(); // определить массив вершин
   getColorArray(1);  // определить массив цветов вершин
   getIndexArray();  // определить массив индексов вершин

   glEnableClientState(GL_VERTEX_ARRAY); // активизация массива вершин
   glEnableClientState(GL_COLOR_ARRAY);  // активизация массива цветов вершин
}

/*virtual*/void Scene3D::resizeGL(int nWidth, int nHeight) // окно виджета
{
   glMatrixMode(GL_PROJECTION); // устанавливает текущей проекционную матрицу
   glLoadIdentity();            // присваивает проекционной матрице единичную матрицу

   // отношение высоты окна виджета к его ширине
   GLfloat ratio=(GLfloat)nHeight/(GLfloat)nWidth;

   // мировое окно
   if (nWidth>=nHeight)
      // параметры видимости ортогональной проекции
      glOrtho(-1.0/ratio, 1.0/ratio, -1.0, 1.0, -10.0, 10.0);
   else
      glOrtho(-1.0, 1.0, -1.0*ratio, 1.0*ratio, -10.0, 10.0);
   // плоскости отсечения (левая, правая, верхняя, нижняя, передняя, задняя)

   // поле просмотра
   glViewport(0, 0, (GLint)nWidth, (GLint)nHeight);
}

/*virtual*/ void Scene3D::paintGL() // рисование
{
   // очистка буфера изображения и глубины
   glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

   glMatrixMode(GL_MODELVIEW);
   glLoadIdentity();

   // последовательные преобразования
   glScalef(nSca, nSca, nSca);        // масштабирование
   glTranslatef(xTra, yTra, zTra);    // трансляция
   glRotatef(xRot, 1.0f, 0.0f, 0.0f); // поворот вокруг оси X
   glRotatef(yRot, 0.0f, 1.0f, 0.0f); // поворот вокруг оси Y
   glRotatef(zRot, 0.0f, 0.0f, 1.0f); // поворот вокруг оси Z

   getVertexArray();
   float light1_diffuse[] = {0.8, 0.8, 0.8};
   float light1_direction[] = {0.5, 2.0, -0.5, 1.0};
   float light2_diffuse[] = {0.8, 0.8, 0.8};
   float light2_direction[] = {-3.5, 2.0, -0.5, 1.0};

   glEnable(GL_LIGHT2);
   glEnable(GL_LIGHT1);
   glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
   glEnable(GL_BLEND);
   glEnable(GL_ALPHA_TEST);
   glAlphaFunc(GL_NOTEQUAL, 0);


   glLightfv(GL_LIGHT1, GL_AMBIENT, light1_diffuse);
   glLightfv(GL_LIGHT1, GL_POSITION, light1_direction);
   glLightf(GL_LIGHT1, GL_CONSTANT_ATTENUATION, 0.7);
   glLightf(GL_LIGHT1, GL_LINEAR_ATTENUATION, 0.5);
   glLightf(GL_LIGHT1, GL_QUADRATIC_ATTENUATION, 0.2);

   glLightfv(GL_LIGHT2, GL_AMBIENT, light2_diffuse);
   glLightfv(GL_LIGHT2, GL_POSITION, light2_direction);
   glLightf(GL_LIGHT2, GL_CONSTANT_ATTENUATION, 0.7);
   glLightf(GL_LIGHT2, GL_LINEAR_ATTENUATION, 0.5);
   glLightf(GL_LIGHT2, GL_QUADRATIC_ATTENUATION, 0.2);

   glEnable(GL_LIGHTING);
   glEnable(GL_NORMALIZE);
   glEnable(GL_MULTISAMPLE);
   if ((makean) && (antiAliasing))
   {
       int pq[36]={0,-1,-1,
                    0,1,1,
                    0,1,-1,
                    0,1,-1,
                    -1,-1,0,
                    1,1,0,
                   -1,1,0,
                   1,-1,0,
                    -1,0,-1,
                    1,0,1
                   -1,0,1,
                   1,0,-1
                   };
       for(int i=0; i<12; i++)
       {

           glPushMatrix();
           getColorArray(0.5);
           glTranslatef((float)pq[3 * i]/1000, (float)pq[3 * i + 1]/1000, (float)pq[3 * i + 2]/1000);
           drawFigure();
           makean = false;
           glPopMatrix();

       }
       makean = true;
   }

   getColorArray(1);
   drawFigure();
   glDisable(GL_LIGHTING);
   glDisable(GL_MULTISAMPLE);
   ColorArray[11][2] = 0.5;
   ColorArray[11][3] = 0.2;
   ColorArray[30][2] = 0.5;
   ColorArray[30][3] = 0.2;
   glColorPointer(4, GL_FLOAT, 0, ColorArray);
   glDrawElements(GL_QUADS, 12, GL_UNSIGNED_BYTE, Array4m[0]);
   ColorArray[11][2] = 0;
   ColorArray[11][3] = 1;
   ColorArray[30][2] = 0;
   ColorArray[30][3] = 1;
   glColorPointer(4, GL_FLOAT, 0, ColorArray);
   glBindTexture (GL_TEXTURE_2D, texture);
   glDisable(GL_LIGHT2);
   glDisable(GL_LIGHT1);
   glDisable(GL_BLEND);

}

/*virtual*/void Scene3D::mousePressEvent(QMouseEvent* pe) // нажатие клавиши мыши
{
   ptrMousePosition = pe->pos();

}

// изменение положения стрелки мыши
/*virtual*/void Scene3D::mouseMoveEvent(QMouseEvent* pe)
{
   // вычисление углов поворота
   xRot += 180/nSca*(GLfloat)(pe->y()-ptrMousePosition.y())/height();
   zRot += 180/nSca*(GLfloat)(pe->x()-ptrMousePosition.x())/width();

   ptrMousePosition = pe->pos();

   updateGL(); // обновление изображения
}

/*virtual*/void Scene3D::updateTime()
{
    glDisable(GL_LIGHTING);
    struct tm gtime;
    struct tm ltime;
    time_t set;
    time(&set);
    gtime = *gmtime(&set);
    ltime = *localtime(&set);
    time_t needtime = mktime(&ltime) - mktime(&gtime);
    needtime += mktime(&ltime);
    sec = needtime % 60;
    needtime /= 60;
    min = needtime % 60;
    needtime /= 12;
    min12 = needtime % 60;
    needtime /= 5;
    hou = (needtime) % 24;
    drawNumb(hou ,min, sec);
    int p[]={57, 58, 71, 72};

    for (int i=0; i<4; i++)
    {
       ColorArray[p[i]][0]=1 * (sec % 2); // R - красная составляющая
       ColorArray[p[i]][1]=1 * (sec % 2); // G - зелёная составляющая
       ColorArray[p[i]][2]=1 * (sec % 2); // B - синяя составляющая
    }
    glLineWidth(2.0f);
    for (int i = 0; i < 6 ; i++ )
        glDrawElements(GL_LINES, 10, GL_UNSIGNED_BYTE, ArrayNum[i * 5]);
    glPointSize(2.5); //устанавливаем размер точки
    glDrawElements(GL_QUADS, 8, GL_UNSIGNED_BYTE, ArrayAn);
    glDrawElements(GL_LINES, 2, GL_UNSIGNED_BYTE, secStr);
    glDrawElements(GL_POINTS, 4, GL_UNSIGNED_BYTE, ArrayNum[30]);
    glLineWidth(1.0f);
}

// вращение колёсика мыши
/*virtual*/void Scene3D::wheelEvent(QWheelEvent* pe)
{
   if ((pe->delta())>0) scale_plus(); else if ((pe->delta())<0) scale_minus();

   updateGL(); // обновление изображения
}

// нажатие определенной клавиши
/*virtual*/void Scene3D::keyPressEvent(QKeyEvent* pe)
{
   switch (pe->key())
   {
      case Qt::Key_Plus:
         scale_plus();     // приблизить сцену
      break;

      case Qt::Key_Minus:
         scale_minus();    // удалиться от сцены
      break;

      case Qt::Key_Up:
         rotate_up();      // повернуть сцену вверх
      break;

      case Qt::Key_Down:
         rotate_down();    // повернуть сцену вниз
      break;

      case Qt::Key_Left:
        rotate_left();     // повернуть сцену влево
      break;

      case Qt::Key_Right:
         rotate_right();   // повернуть сцену вправо
      break;

      case Qt::Key_S:
         translate_down(); // транслировать сцену вниз
      break;

      case Qt::Key_W:
         translate_up();   // транслировать сцену вверх
      break;

      case Qt::Key_A:
         translate_left();   // транслировать сцену влево
      break;

      case Qt::Key_D:
         translate_right();   // транслировать сцену вправо
      break;

      case Qt::Key_Q:
       endisAntiAliasing1();   // включить\выключить антиалиасинг1
      break;

      case Qt::Key_E:
       endisAntiAliasing2();   // включить\выключить антиалиасинг2
      break;

      case Qt::Key_Space:  // клавиша пробела
         defaultScene();   // возвращение значений по умолчанию
      break;

      case Qt::Key_Escape: // клавиша "эскейп"
         this->close();    // завершает приложение
      break;

      case Qt::Key_T:
          openroof_up();    // открывает крышку
      break;

      case Qt::Key_G:
          openroof_down();    // закрывает крышку
      break;

      case Qt::Key_R:
          openroof_auto_up();    // открывает крышку за 3 секунды
      break;

      case Qt::Key_F:
          openroof_auto_down();    // закрывает крышку за 3 секунды
      break;
   }

   updateGL(); // обновление изображения
}

void Scene3D::openroof_auto_up()   // транслировать сцену вверх
{
    GLfloat t = nAni * CLOCKS_PER_SEC;
    clock_t clock0 = clock();
    clock_t clock1 = clock() + t;
    while ((GLfloat(clock1 - clock0) / CLOCKS_PER_SEC) <= 3)
    {
        nAni = (GLfloat)(clock1 - clock0) / CLOCKS_PER_SEC;
        if (nAni > 3) nAni = 3;
        else yTra -= 0.0005;
        getVertexArray();
        updateGL();
        clock1 = clock() + t;
    }
}

void Scene3D::openroof_auto_down()   // транслировать сцену вверх
{
    GLfloat t = nAni * CLOCKS_PER_SEC;
    clock_t clock0 = clock();
    clock_t clock1 = clock() + t;
    while ((GLfloat(clock1 - clock0) / CLOCKS_PER_SEC) >= -0.001)
    {
        nAni = (GLfloat)(clock1 - clock0) / CLOCKS_PER_SEC;
        if (nAni < 0) nAni = 0;
        else yTra += 0.5 / CLOCKS_PER_SEC;
        getVertexArray();
        updateGL();
        clock0 = clock();
    }
}

void Scene3D::openroof_down()   // транслировать сцену вверх
{
    nAni -= 0.03;

    if (nAni < 0) nAni = 0;
    else yTra += 0.01;
    getVertexArray();
    updateGL();
}

void Scene3D::openroof_up()  // транслировать сцену вверх
{
    nAni += 0.03;
    if (nAni > 3) nAni = 3;
    else yTra -= 0.01;
    getVertexArray();
    updateGL();
}

void Scene3D::scale_plus() // приблизить сцену
{
   nSca = nSca*1.1;
}

void Scene3D::scale_minus() // удалиться от сцены
{
   nSca = nSca/1.1;
}

void Scene3D::rotate_up() // повернуть сцену вверх
{
   xRot -= 1.0;
}

void Scene3D::rotate_down() // повернуть сцену вниз
{
   xRot += 1.0;
}

void Scene3D::rotate_left() // повернуть сцену влево
{
   zRot -= 1.0;
}

void Scene3D::rotate_right() // повернуть сцену вправо
{
   zRot += 1.0;
}

void Scene3D::translate_down() // транслировать сцену вниз
{
   yTra -= 0.05;
}

void Scene3D::translate_up() // транслировать сцену вверх
{
   yTra += 0.05;
}

void Scene3D::translate_left() // транслировать сцену вверх
{
   xTra -= 0.05;
}

void Scene3D::translate_right() // транслировать сцену вверх
{
   xTra += 0.05;
}

void Scene3D::endisAntiAliasing1() // включить\выключить антиалиасинг1
{
   antiAliasing = 1  - antiAliasing;
}

void Scene3D::endisAntiAliasing2() // включить\выключить антиалиасинг2
{
    if (antiAliasingSM)
    {
        glDisable(GL_LINE_SMOOTH);
        glDisable(GL_POLYGON_SMOOTH);
    }
    else
    {
        glEnable(GL_LINE_SMOOTH);
        glEnable(GL_POLYGON_SMOOTH);
    }
    antiAliasingSM = 1 - antiAliasingSM;
}

void Scene3D::defaultScene() // наблюдение сцены по умолчанию
{
   xRot=-100; yRot=0; zRot=-20; xTra=0; yTra=0; zTra=0;
   antiAliasing = false; antiAliasingSM = false; glDisable(GL_LINE_SMOOTH);
   glDisable(GL_POLYGON_SMOOTH); makean = true; nSca=0.2; nAni = 0;
   updateGL();
}


void Scene3D::getVertexArray() // определить массив вершин
{

   //0 точка
   VertexArray[0][X]= -1;   // x
   VertexArray[0][Y]= 2;   // Z
   VertexArray[0][Z]= 0.5;   // Y

   //1 точка
   VertexArray[1][X]= -1;
   VertexArray[1][Y]= -2;
   VertexArray[1][Z]= 0.5;

   //2 точка
   VertexArray[2][X]= -1;
   VertexArray[2][Y]= -2;
   VertexArray[2][Z]= -0.12;

   //3 точка
   VertexArray[3][X]= -1;
   VertexArray[3][Y]= 1;
   VertexArray[3][Z]= -0.12;

   //4 точка
   VertexArray[4][X]= -1;
   VertexArray[4][Y]= 1;
   VertexArray[4][Z]= -0.5;

   //5 точка
   VertexArray[5][X]= -1;
   VertexArray[5][Y]= 2;
   VertexArray[5][Z]= -0.5;

   //6 точка
   VertexArray[6][X]= 1;
   VertexArray[6][Y]= 2;
   VertexArray[6][Z]= -0.5;

   //7 точка
   VertexArray[7][X]= 1;
   VertexArray[7][Y]= 2;
   VertexArray[7][Z]= 0.5;

   //8 точка
   VertexArray[8][X]= 1;
   VertexArray[8][Y]= -2;
   VertexArray[8][Z]= 0.5;

   //9 точка
   VertexArray[9][X]= 1;
   VertexArray[9][Y]= -2;
   VertexArray[9][Z]= -0.12;

   //10 точка
   VertexArray[10][X]= 1;
   VertexArray[10][Y]= 1;
   VertexArray[10][Z]= -0.12;

   //11 точка
   VertexArray[11][X]= 1;
   VertexArray[11][Y]= 1.5 - (0.5314132)*cos(0.3455556 + nAni);
   VertexArray[11][Z]= -(0.5314132)*sin(0.3455556 + nAni);

   //12 точка
   VertexArray[12][X]= 1;
   VertexArray[12][Y]= 1.5 - (3.5046255)*cos(0.0513833 + nAni);
   VertexArray[12][Z]= -(3.5046255)*sin(0.0513833 + nAni);

   //13 точка
   VertexArray[13][X]= -1;
   VertexArray[13][Y]= 1.5 - (3.5046255)*cos(0.0513833 + nAni);
   VertexArray[13][Z]= -(3.5046255)*sin(0.0513833 + nAni);

   //14 точка
   VertexArray[14][X]= -1;
   VertexArray[14][Y]= 1.5 - (0.5787055)*cos(0.3162861 + nAni);
   VertexArray[14][Z]= -(0.5787055)*sin(0.3162861 + nAni);

   //15 точка
   VertexArray[15][X]= -1;
   VertexArray[15][Y]= 1.5 - (0.7433034)*cos(0.7378151 + nAni);
   VertexArray[15][Z]= -(0.7433034)*sin(0.7378151 + nAni);

   //16 точка
   VertexArray[16][X]= -1;
   VertexArray[16][Y]= 1.5 - (3.4365681)*cos(0.1460123 + nAni);
   VertexArray[16][Z]= -(3.4365681)*sin(0.1460123 + nAni);

   //17 точка
   VertexArray[17][X]= 1;
   VertexArray[17][Y]= 1.5 - (3.4365681)*cos(0.1460123 + nAni);
   VertexArray[17][Z]= -(3.4365681)*sin(0.1460123 + nAni);

   //18 точка
   VertexArray[18][X]= 1;
   VertexArray[18][Y]= 1.5 - (0.7071068)*cos(0.7853982 + nAni);
   VertexArray[18][Z]= -(0.7071068)*sin(0.7853982 + nAni);

   //19 точка
   VertexArray[19][X]= 0.6;
   VertexArray[19][Y]= 2;
   VertexArray[19][Z]= -0.5;

   //20 точка
   VertexArray[20][X]= 1;
   VertexArray[20][Y]= 1;
   VertexArray[20][Z]= -0.5;

   //21 точка
   VertexArray[21][X]= 0.6;
   VertexArray[21][Y]= 2;
   VertexArray[21][Z]= -0.5;

   //22 точка
   VertexArray[22][X]= 0.6;
   VertexArray[22][Y]= 1;
   VertexArray[22][Z]= -0.5;

   //23 точка
   VertexArray[23][X]= 1;
   VertexArray[23][Y]= 1;
   VertexArray[23][Z]= 0.5;

   //28 точка
   VertexArray[28][X]= 0.6;
   VertexArray[28][Y]= 2;
   VertexArray[28][Z]= 0.5;

   //29 точка
   VertexArray[29][X]= 0.6;
   VertexArray[29][Y]= 1;
   VertexArray[29][Z]= 0.5;

   //30 точка
   VertexArray[30][X]= -1;
   VertexArray[30][Y]= 1;
   VertexArray[30][Z]= 0.5;



   //24 точка
   VertexArray[24][X]= 0.66;
   VertexArray[24][Y]= 1.5 - (1.3928388)*cos(0.3671738 + nAni);
   VertexArray[24][Z]= -(1.3928388)*sin(0.3671738 + nAni);

   //25 точка
   VertexArray[25][X]= 0.66;
   VertexArray[25][Y]= 1.5 - (1.7720045)*cos(0.2860514 + nAni);
   VertexArray[25][Z]= -(1.7720045)*sin(0.2860514 + nAni);

   //26 точка
   VertexArray[26][X]= -0.66;
   VertexArray[26][Y]= 1.5 - (1.7720045)*cos(0.2860514 + nAni);
   VertexArray[26][Z]= -(1.7720045)*sin(0.2860514 + nAni);

   //27 точка
   VertexArray[27][X]= -0.66;
   VertexArray[27][Y]= 1.5 - (1.3928388)*cos(0.3671738 + nAni);
   VertexArray[27][Z]= -(1.3928388)*sin(0.3671738 + nAni);



   //31 точка
   VertexArray[31][X]= 0.82;
   VertexArray[31][Y]= 1.5 - (1.059481)*cos(0.3366748 + nAni);
   VertexArray[31][Z]= -(1.059481)*sin(0.3366748 + nAni);

   //32 точка
   VertexArray[32][X]= -0.82;
   VertexArray[32][Y]= 1.5 - (1.059481)*cos(0.3366748 + nAni);
   VertexArray[32][Z]= -(1.059481)*sin(0.3366748 + nAni);

   //33 точка
   VertexArray[33][X]= -0.82;
   VertexArray[33][Y]= 1.5 - (3.2190837)*cos(0.108942 + nAni);
   VertexArray[33][Z]= -(3.2190837)*sin(0.108942 + nAni);

   //34 точка
   VertexArray[34][X]= 0.82;
   VertexArray[34][Y]= 1.5 - (3.2190837)*cos(0.108942 + nAni);
   VertexArray[34][Z]= -(3.2190837)*sin(0.108942 + nAni);


   int l = 35;
   //35 точка
   VertexArray[l][X]= -0.85;
   VertexArray[l][Y]= 0.85;
   VertexArray[l++][Z]= -0.12;

   //36 точка
   VertexArray[l][X]= 0.85;
   VertexArray[l][Y]= 0.85;
   VertexArray[l++][Z]= -0.12;

   //37 точка
   VertexArray[l][X]= -0.85;
   VertexArray[l][Y]= 0.28;
   VertexArray[l++][Z]= -0.12;

   //38 точка
   VertexArray[l][X]= 0.85;
   VertexArray[l][Y]= 0.28;
   VertexArray[l++][Z]= -0.12;

   //39 точка
   VertexArray[l][X]= -0.85;
   VertexArray[l][Y]= 0.04;
   VertexArray[l++][Z]= -0.12;

   //40 точка
   VertexArray[l][X]= 0.85;
   VertexArray[l][Y]= 0.04;
   VertexArray[l++][Z]= -0.12;

   //41 точка
   VertexArray[l][X]= -0.85;
   VertexArray[l][Y]= -0.04;
   VertexArray[l++][Z]= -0.12;

   //42 точка
   VertexArray[l][X]= 0.85;
   VertexArray[l][Y]= -0.04;
   VertexArray[l++][Z]= -0.12;

   //43 точка
   VertexArray[l][X]= -0.85;
   VertexArray[l][Y]= -1.74;
   VertexArray[l++][Z]= -0.12;

   //44 точка
   VertexArray[l][X]= 0.85;
   VertexArray[l][Y]= -1.74;
   VertexArray[l++][Z]= -0.12;




   //чифр часы

    int k = 45;
    GLfloat R1 = 1.7435312;
    GLfloat R2 = 1.5814553;
    GLfloat R3 = 1.4212322;
    GLfloat R4 = 1.676604;
    GLfloat R5 = 1.4869435;
    GLfloat A1 = 0.2914568;
    GLfloat A2 = 0.3223504;
    GLfloat A3 = 0.360253;
    GLfloat A4 = 0.3034542;
    GLfloat A5 = 0.3436573;
   //45 точка
   VertexArray[k][X]= -0.61;
   VertexArray[k][Y]= 1.5 - R1 * cos(A1 + nAni);
   VertexArray[k++][Z]= - R1 * sin(A1 + nAni);

   //46 точка
   VertexArray[k][X]= -0.51;
   VertexArray[k][Y]= 1.5 - R1 * cos(A1 + nAni);
   VertexArray[k++][Z]= - R1 * sin(A1 + nAni);

   //47 точка
   VertexArray[k][X]= -0.61;
   VertexArray[k][Y]= 1.5 - R2 * cos(A2 + nAni);
   VertexArray[k++][Z]= - R2 * sin(A2 + nAni);

   //48 точка
   VertexArray[k][X]= -0.51;
   VertexArray[k][Y]= 1.5 - R2 * cos(A2 + nAni);
   VertexArray[k++][Z]= - R2 * sin(A2 + nAni);

   //49 точка
   VertexArray[k][X]= -0.61;
   VertexArray[k][Y]= 1.5 - R3 * cos(A3 + nAni);
   VertexArray[k++][Z]= - R3 * sin(A3 + nAni);

   //50 точка
   VertexArray[k][X]= -0.51;
   VertexArray[k][Y]= 1.5 - R3 * cos(A3 + nAni);
   VertexArray[k++][Z]= - R3 * sin(A3 + nAni);


   //51 точка
   VertexArray[k][X]= -0.45;
   VertexArray[k][Y]= 1.5 - R1 * cos(A1 + nAni);
   VertexArray[k++][Z]= - R1 * sin(A1 + nAni);

   //52 точка
   VertexArray[k][X]= -0.35;
   VertexArray[k][Y]= 1.5 - R1 * cos(A1 + nAni);
   VertexArray[k++][Z]= - R1 * sin(A1 + nAni);

   //53 точка
   VertexArray[k][X]= -0.45;
   VertexArray[k][Y]= 1.5 -  R2 * cos(A2 + nAni);
   VertexArray[k++][Z]= - R2 * sin(A2 + nAni);

   //54 точка
   VertexArray[k][X]= -0.35;
   VertexArray[k][Y]= 1.5 -  R2 * cos(A2 + nAni);
   VertexArray[k++][Z]= - R2 * sin(A2 + nAni);

   //55 точка
   VertexArray[k][X]= -0.45;
   VertexArray[k][Y]= 1.5 - R3 * cos(A3 + nAni);
   VertexArray[k++][Z]= - R3 * sin(A3 + nAni);

   //56 точка
   VertexArray[k][X]= -0.35;
   VertexArray[k][Y]= 1.5 - R3 * cos(A3 + nAni);
   VertexArray[k++][Z]= - R3 * sin(A3 + nAni);


   //57 точка
   VertexArray[k][X]= -0.24;
   VertexArray[k][Y]= 1.5 - R4 * cos(A4 + nAni);
   VertexArray[k++][Z]= - R4 * sin(A4 + nAni);

   //58 точка
   VertexArray[k][X]= -0.24;
   VertexArray[k][Y]= 1.5 - R5 * cos(A5 + nAni);
   VertexArray[k++][Z]= - R5 * sin(A5 + nAni);


   //59 точка
   VertexArray[k][X]= -0.13;
   VertexArray[k][Y]= 1.5 - R1 * cos(A1 + nAni);
   VertexArray[k++][Z]= - R1 * sin(A1 + nAni);

   //60 точка
   VertexArray[k][X]= -0.03;
   VertexArray[k][Y]= 1.5 - R1 * cos(A1 + nAni);
   VertexArray[k++][Z]= - R1 * sin(A1 + nAni);

   //61 точка
   VertexArray[k][X]= -0.13;
   VertexArray[k][Y]= 1.5 - R2 * cos(A2 + nAni);
   VertexArray[k++][Z]= - R2 * sin(A2 + nAni);

   //62 точка
   VertexArray[k][X]= -0.03;
   VertexArray[k][Y]= 1.5 - R2 * cos(A2 + nAni);
   VertexArray[k++][Z]= - R2 * sin(A2 + nAni);

   //63 точка
   VertexArray[k][X]= -0.13;
   VertexArray[k][Y]= 1.5 - R3 * cos(A3 + nAni);
   VertexArray[k++][Z]= - R3 * sin(A3 + nAni);

   //64 точка
   VertexArray[k][X]= -0.03;
   VertexArray[k][Y]= 1.5 - R3 * cos(A3 + nAni);
   VertexArray[k++][Z]= - R3 * sin(A3 + nAni);


   //65 точка
   VertexArray[k][X]= 0.03;
   VertexArray[k][Y]= 1.5 - R1 * cos(A1 + nAni);
   VertexArray[k++][Z]= - R1 * sin(A1 + nAni);

   //66 точка
   VertexArray[k][X]= 0.13;
   VertexArray[k][Y]= 1.5 - R1 * cos(A1 + nAni);
   VertexArray[k++][Z]= - R1 * sin(A1 + nAni);

   //67 точка
   VertexArray[k][X]= 0.03;
   VertexArray[k][Y]= 1.5 - R2 * cos(A2 + nAni);
   VertexArray[k++][Z]= - R2 * sin(A2 + nAni);

   //68 точка
   VertexArray[k][X]= 0.13;
   VertexArray[k][Y]= 1.5 - R2 * cos(A2 + nAni);
   VertexArray[k++][Z]= - R2 * sin(A2 + nAni);

   //69 точка
   VertexArray[k][X]= 0.03;
   VertexArray[k][Y]= 1.5 - R3 * cos(A3 + nAni);
   VertexArray[k++][Z]= - R3 * sin(A3 + nAni);

   //70 точка
   VertexArray[k][X]= 0.13;
   VertexArray[k][Y]= 1.5 - R3 * cos(A3 + nAni);
   VertexArray[k++][Z]= - R3 * sin(A3 + nAni);


   //71 точка
   VertexArray[k][X]= 0.24;
   VertexArray[k][Y]= 1.5 - R4 * cos(A4 + nAni);
   VertexArray[k++][Z]= - R4 * sin(A4 + nAni);

   //72 точка
   VertexArray[k][X]= 0.24;
   VertexArray[k][Y]= 1.5 - R5 * cos(A5 + nAni);
   VertexArray[k++][Z]= - R5 * sin(A5 + nAni);


   //73 точка
   VertexArray[k][X]= 0.35;
   VertexArray[k][Y]= 1.5 - R1 * cos(A1 + nAni);
   VertexArray[k++][Z]= - R1 * sin(A1 + nAni);

   //74 точка
   VertexArray[k][X]= 0.45;
   VertexArray[k][Y]= 1.5 - R1 * cos(A1 + nAni);
   VertexArray[k++][Z]= - R1 * sin(A1 + nAni);

   //75 точка
   VertexArray[k][X]= 0.35;
   VertexArray[k][Y]= 1.5 - R2 * cos(A2 + nAni);
   VertexArray[k++][Z]= - R2 * sin(A2 + nAni);

   //76 точка
   VertexArray[k][X]= 0.45;
   VertexArray[k][Y]= 1.5 - R2 * cos(A2 + nAni);
   VertexArray[k++][Z]= - R2 * sin(A2 + nAni);

   //77 точка
   VertexArray[k][X]= 0.35;
   VertexArray[k][Y]= 1.5 - R3 * cos(A3 + nAni);
   VertexArray[k++][Z]= - R3 * sin(A3 + nAni);

   //78 точка
   VertexArray[k][X]= 0.45;
   VertexArray[k][Y]= 1.5 - R3 * cos(A3 + nAni);
   VertexArray[k++][Z]= - R3 * sin(A3 + nAni);


   //79 точка
   VertexArray[k][X]= 0.51;
   VertexArray[k][Y]= 1.5 - R1 * cos(A1 + nAni);
   VertexArray[k++][Z]= - R1 * sin(A1 + nAni);

   //80 точка
   VertexArray[k][X]= 0.61;
   VertexArray[k][Y]= 1.5 - R1 * cos(A1 + nAni);
   VertexArray[k++][Z]= - R1 * sin(A1 + nAni);

   //81 точка
   VertexArray[k][X]= 0.51;
   VertexArray[k][Y]= 1.5 -  R2 * cos(A2 + nAni);
   VertexArray[k++][Z]= - R2 * sin(A2 + nAni);

   //82 точка
   VertexArray[k][X]= 0.61;
   VertexArray[k][Y]= 1.5 -  R2 * cos(A2 + nAni);
   VertexArray[k++][Z]= - R2 * sin(A2 + nAni);

   //83 точка
   VertexArray[k][X]= 0.51;
   VertexArray[k][Y]= 1.5 - R3 * cos(A3 + nAni);
   VertexArray[k++][Z]= - R3 * sin(A3 + nAni);

   //84 точка
   VertexArray[k][X]= 0.61;
   VertexArray[k][Y]= 1.5 - R3 * cos(A3 + nAni);
   VertexArray[k++][Z]= - R3 * sin(A3 + nAni);

   l = 85;

   //85 точка
   VertexArray[l][X]= -0.8;
   VertexArray[l][Y]= 0.82;
   VertexArray[l++][Z]= -0.12;

   //86 точка
   VertexArray[l][X]= -0.3;
   VertexArray[l][Y]= 0.82;
   VertexArray[l++][Z]= -0.12;

   //87 точка
   VertexArray[l][X]= 0.3;
   VertexArray[l][Y]= 0.82;
   VertexArray[l++][Z]= -0.12;

   //88 точка
   VertexArray[l][X]= 0.8;
   VertexArray[l][Y]= 0.82;
   VertexArray[l++][Z]= -0.12;


   //89 точка
   VertexArray[l][X]= -0.8;
   VertexArray[l][Y]= 0.57;
   VertexArray[l++][Z]= -0.13;

   //90 точка
   VertexArray[l][X]= -0.3;
   VertexArray[l][Y]= 0.57;
   VertexArray[l++][Z]= -0.13;

   //91 точка
   VertexArray[l][X]= 0.3;
   VertexArray[l][Y]= 0.57;
   VertexArray[l++][Z]= -0.13;

   //92 точка
   VertexArray[l][X]= 0.8;
   VertexArray[l][Y]= 0.57;
   VertexArray[l++][Z]= -0.13;


   //93 точка
   VertexArray[l][X]= -0.8;
   VertexArray[l][Y]= 0.32;
   VertexArray[l++][Z]= -0.12;

   //94 точка
   VertexArray[l][X]= -0.3;
   VertexArray[l][Y]= 0.32;
   VertexArray[l++][Z]= -0.12;

   //95 точка
   VertexArray[l][X]= 0.3;
   VertexArray[l][Y]= 0.32;
   VertexArray[l++][Z]= -0.12;

   //96 точка
   VertexArray[l][X]= 0.8;
   VertexArray[l][Y]= 0.32;
   VertexArray[l++][Z]= -0.12;


   //97 точка
   VertexArray[l][X]= -0.8;
   VertexArray[l][Y]= 0.25;
   VertexArray[l++][Z]= -0.12;

   //98 точка
   VertexArray[l][X]= -0.4;
   VertexArray[l][Y]= 0.25;
   VertexArray[l++][Z]= -0.13;

   //99 точка
   VertexArray[l][X]= 0;
   VertexArray[l][Y]= 0.25;
   VertexArray[l++][Z]= -0.13;

   //100 точка
   VertexArray[l][X]= 0.4;
   VertexArray[l][Y]= 0.25;
   VertexArray[l++][Z]= -0.13;

   //101 точка
   VertexArray[l][X]= 0.8;
   VertexArray[l][Y]= 0.25;
   VertexArray[l++][Z]= -0.12;


   //102 точка
   VertexArray[l][X]= -0.8;
   VertexArray[l][Y]= 0.07;
   VertexArray[l++][Z]= -0.12;

   //103 точка
   VertexArray[l][X]= -0.4;
   VertexArray[l][Y]= 0.07;
   VertexArray[l++][Z]= -0.13;

   //104 точка
   VertexArray[l][X]= 0;
   VertexArray[l][Y]= 0.07;
   VertexArray[l++][Z]= -0.13;

   //105 точка
   VertexArray[l][X]= 0.4;
   VertexArray[l][Y]= 0.07;
   VertexArray[l++][Z]= -0.13;

   //106 точка
   VertexArray[l][X]= 0.8;
   VertexArray[l][Y]= 0.07;
   VertexArray[l++][Z]= -0.12;


   //107 точка
   VertexArray[l][X]= -0.8;
   VertexArray[l][Y]= -0.09;
   VertexArray[l++][Z]= -0.12;

   //108 точка
   VertexArray[l][X]= -0.27;
   VertexArray[l][Y]= -0.09;
   VertexArray[l++][Z]= -0.13;

   //109 точка
   VertexArray[l][X]= 0.27;
   VertexArray[l][Y]= -0.09;
   VertexArray[l++][Z]= -0.13;

   //110 точка
   VertexArray[l][X]= 0.8;
   VertexArray[l][Y]= -0.09;
   VertexArray[l++][Z]= -0.13;


   //111 точка
   VertexArray[l][X]= -0.8;
   VertexArray[l][Y]= -0.49;
   VertexArray[l++][Z]= -0.13;

   //112 точка
   VertexArray[l][X]= -0.27;
   VertexArray[l][Y]= -0.49;
   VertexArray[l++][Z]= -0.13;

   //113 точка
   VertexArray[l][X]= 0.27;
   VertexArray[l][Y]= -0.49;
   VertexArray[l++][Z]= -0.13;

   //114 точка
   VertexArray[l][X]= 0.8;
   VertexArray[l][Y]= -0.49;
   VertexArray[l++][Z]= -0.13;


   //115 точка
   VertexArray[l][X]= -0.8;
   VertexArray[l][Y]= -0.89;
   VertexArray[l++][Z]= -0.13;

   //116 точка
   VertexArray[l][X]= -0.27;
   VertexArray[l][Y]= -0.89;
   VertexArray[l++][Z]= -0.13;

   //117 точка
   VertexArray[l][X]= 0.27;
   VertexArray[l][Y]= -0.89;
   VertexArray[l++][Z]= -0.13;

   //118 точка
   VertexArray[l][X]= 0.8;
   VertexArray[l][Y]= -0.89;
   VertexArray[l++][Z]= -0.13;


   //119 точка
   VertexArray[l][X]= -0.8;
   VertexArray[l][Y]= -1.29;
   VertexArray[l++][Z]= -0.13;

   //120 точка
   VertexArray[l][X]= -0.27;
   VertexArray[l][Y]= -1.29;
   VertexArray[l++][Z]= -0.13;

   //121 точка
   VertexArray[l][X]= 0.27;
   VertexArray[l][Y]= -1.29;
   VertexArray[l++][Z]= -0.13;

   //122 точка
   VertexArray[l][X]= 0.8;
   VertexArray[l][Y]= -1.29;
   VertexArray[l++][Z]= -0.13;


   //123 точка
   VertexArray[l][X]= -0.8;
   VertexArray[l][Y]= -1.69;
   VertexArray[l++][Z]= -0.12;

   //124 точка
   VertexArray[l][X]= -0.27;
   VertexArray[l][Y]= -1.69;
   VertexArray[l++][Z]= -0.13;

   //125 точка
   VertexArray[l][X]= 0.27;
   VertexArray[l][Y]= -1.69;
   VertexArray[l++][Z]= -0.13;

   //126 точка
   VertexArray[l][X]= 0.8;
   VertexArray[l][Y]= -1.69;
   VertexArray[l++][Z]= -0.12;


   //127 точка
   VertexArray[l][X]= -0.1;
   VertexArray[l][Y]= 0.67;
   VertexArray[l++][Z]= -0.12;

   //128 точка
   VertexArray[l][X]= -0.1;
   VertexArray[l][Y]= 0.47;
   VertexArray[l++][Z]= -0.12;

   //129 точка
   VertexArray[l][X]= 0.1;
   VertexArray[l][Y]= 0.67;
   VertexArray[l++][Z]= -0.12;

   //130 точка
   VertexArray[l][X]= 0.1;
   VertexArray[l][Y]= 0.47;
   VertexArray[l++][Z]= -0.12;


   //131 точка
   VertexArray[l][X]= -0.94;
   VertexArray[l][Y]= 1.9;
   VertexArray[l++][Z]= -0.4;

   //132 точка
   VertexArray[l][X]= -0.94;
   VertexArray[l][Y]= 1.9;
   VertexArray[l++][Z]= 0.4;

   //133 точка
   VertexArray[l][X]= -0.94;
   VertexArray[l][Y]= 1.1;
   VertexArray[l++][Z]= -0.4;

   //134 точка
   VertexArray[l][X]= -0.94;
   VertexArray[l][Y]= 1.1;
   VertexArray[l++][Z]= 0.4;


   //135 точка
   VertexArray[l][X]= -0.95;
   VertexArray[l][Y]= 1.7;
   VertexArray[l++][Z]= -0.2;

   //136 точка
   VertexArray[l][X]= -0.95;
   VertexArray[l][Y]= 1.7;
   VertexArray[l++][Z]= 0.2;

   //137 точка
   VertexArray[l][X]= -0.95;
   VertexArray[l][Y]= 1.3;
   VertexArray[l++][Z]= -0.2;

   //138 точка
   VertexArray[l][X]= -0.95;
   VertexArray[l][Y]= 1.3;
   VertexArray[l++][Z]= 0.2;


   //139 точка
   VertexArray[l][X]= -1.01;
   VertexArray[l][Y]= 1;
   VertexArray[l++][Z]= 0.4;

   //140 точка
   VertexArray[l][X]= -1.01;
   VertexArray[l][Y]= 1.1;
   VertexArray[l++][Z]= 0.1;

   //141 точка
   VertexArray[l][X]= -1.01;
   VertexArray[l][Y]= 1.1;
   VertexArray[l++][Z]= 0.4;

   //142 точка
   VertexArray[l][X]= -1.01;
   VertexArray[l][Y]= 1;
   VertexArray[l++][Z]= 0.1;

   //143 точка
   VertexArray[l][X]= -0.95;
   VertexArray[l][Y]= 1.1;
   VertexArray[l++][Z]= 0.1;

   //144 точка
   VertexArray[l][X]= -0.95;
   VertexArray[l][Y]= 1.1;
   VertexArray[l++][Z]= 0.4;

   //145 точка
   VertexArray[l][X]= -1.01;
   VertexArray[l][Y]= 0.9;
   VertexArray[l++][Z]= 0.4;

   //146 точка
   VertexArray[l][X]= -1.01;
   VertexArray[l][Y]= 0.9;
   VertexArray[l++][Z]= 0.1;


   //147 точка
   VertexArray[l][X]= 0.4;
   VertexArray[l][Y]= 2.01;
   VertexArray[l++][Z]= 0.1;

   //148 точка
   VertexArray[l][X]= 0.6;
   VertexArray[l][Y]= 2.01;
   VertexArray[l++][Z]= -0.1;

   //149 точка
   VertexArray[l][X]= 0.4;
   VertexArray[l][Y]= 2.01;
   VertexArray[l++][Z]= -0.1;

   //150 точка
   VertexArray[l][X]= 0.6;
   VertexArray[l][Y]= 2.01;
   VertexArray[l++][Z]= 0.1;

   //151 точка
   VertexArray[l][X]= 0.53;
   VertexArray[l][Y]= 2.02;
   VertexArray[l++][Z]= -0.07;

   //152 точка
   VertexArray[l][X]= 0.53;
   VertexArray[l][Y]= 2.02;
   VertexArray[l++][Z]= 0.07;

   //153 точка
   VertexArray[l][X]= 0.47;
   VertexArray[l][Y]= 2.02;
   VertexArray[l++][Z]= -0.07;

   //154 точка
   VertexArray[l][X]= 0.47;
   VertexArray[l][Y]= 2.02;
   VertexArray[l++][Z]= 0.07;

   //аналоговые часы

   //155 точка
   VertexArray[l][X]= 0;
   VertexArray[l][Y]= 1.5 - (2.1125577)*cos(0.109089 + nAni);
   VertexArray[l++][Z]= -(2.1125577)*sin(0.109089 + nAni);

   //часовая стрелка
   //156 точка
   VertexArray[l][X]= (0.2236068)*sin(-0.4636476 + (2 * pi * min12) / 60);
   VertexArray[l][Y]= 1.5 - (2.1114924 + (0.2236068)*cos(-0.4636476 + (2 * pi * min12) / 60))*cos(0.109089 + nAni);
   VertexArray[l++][Z]= - (2.1114924 + (0.2236068)*cos(-0.4636476 + (2 * pi * min12) / 60))*sin(0.109089 + nAni);

   //157 точка
   VertexArray[l][X]= (0.2236068)*sin(0.4636476 + (2 * pi * min12) / 60);
   VertexArray[l][Y]= 1.5 - (2.1114924 + (0.2236068)*cos(0.4636476 + (2 * pi * min12) / 60))*cos(0.109089 + nAni);
   VertexArray[l++][Z]= - (2.1114924 + (0.2236068)*cos(0.4636476 + (2 * pi * min12) / 60))*sin(0.109089 + nAni);

   //158 точка
   VertexArray[l][X]= (0.5)*sin((2 * pi * min12) / 60);
   VertexArray[l][Y]= 1.5 - (2.1114924 + (0.6)*cos((2 * pi * min12) / 60))*cos(0.109089 + nAni);
   VertexArray[l++][Z]= - (2.1114924 + (0.6)*cos((2 * pi * min12) / 60))*sin(0.109089 + nAni);

   //минутная стрелка
   //159 точка
   VertexArray[l][X]= (0.2061553)*sin(-0.2449787 + (2 * pi * min) / 60);
   VertexArray[l][Y]= 1.5 - (2.1104739 + (0.2061553)*cos(-0.2449787 + (2 * pi * min) / 60))*cos(0.109089 + nAni);
   VertexArray[l++][Z]= - (2.1104739 + (0.2061553)*cos(-0.2449787 + (2 * pi * min) / 60))*sin(0.109089 + nAni);

   //160 точка
   VertexArray[l][X]= (0.2061553)*sin(0.2449787 + (2 * pi * min) / 60);
   VertexArray[l][Y]= 1.5 - (2.1104739 + (0.2061553)*cos(0.2449787 + (2 * pi * min) / 60))*cos(0.109089 + nAni);
   VertexArray[l++][Z]= - (2.1104739 + (0.2061553)*cos(0.2449787 + (2 * pi * min) / 60))*sin(0.109089 + nAni);

   //161 точка
   VertexArray[l][X]= (0.8)*sin((2 * pi * min) / 60);
   VertexArray[l][Y]= 1.5 - (2.1104739 + (1.0)*cos((2 * pi * min) / 60))*cos(0.109089 + nAni);
   VertexArray[l++][Z]= - (2.1104739 + (1.0)*cos((2 * pi * min) / 60))*sin(0.109089 + nAni);


   //секундная стрелка
   //162 точка
   VertexArray[l][X]= (0.8)*sin((2 * pi * sec) / 60);
   VertexArray[l][Y]= 1.5 - (2.1095023 + (1.0)*cos((2 * pi * sec) / 60))*cos(0.109089 + nAni);
   VertexArray[l++][Z]= - (2.1095023 + (1.0)*cos((2 * pi * sec) / 60))*sin(0.109089 + nAni);



   //163 точка
   VertexArray[l][X]= 0;
   VertexArray[l][Y]= 1.5 - (3.1672385)*cos(0.1043812 + nAni);
   VertexArray[l++][Z]= -(3.1672385)*sin(0.1043812 + nAni);

   //164 точка
   VertexArray[l][X]= 0.8 * sin(pi/6);
   VertexArray[l][Y]= 1.5 - (3.0273664)*cos(0.1092227 + nAni);
   VertexArray[l++][Z]= -(3.0273664)*sin(0.1092227 + nAni);

   //165 точка
   VertexArray[l][X]= -0.8 * sin(pi/6);
   VertexArray[l][Y]= 1.5 - (3.0273664)*cos(0.1092227 + nAni);
   VertexArray[l++][Z]= -(3.0273664)*sin(0.1092227 + nAni);

   //166 точка
   VertexArray[l][X]= 0.8 * sin(pi/3);
   VertexArray[l][Y]= 1.5 - (2.6456615)*cos(0.1312413 + nAni);
   VertexArray[l++][Z]= -(2.6456615)*sin(0.1312413 + nAni);

   //167 точка
   VertexArray[l][X]= -0.8 * sin(pi/3);
   VertexArray[l][Y]= 1.5 - (2.6456615)*cos(0.1312413 + nAni);
   VertexArray[l++][Z]= -(2.6456615)*sin(0.1312413 + nAni);

   //168 точка
   VertexArray[l][X]= 0.8;
   VertexArray[l][Y]= 1.5 - (2.1257704)*cos(0.1558682 + nAni);
   VertexArray[l++][Z]= -(2.1257704)*sin(0.1558682 + nAni);

   //169 точка
   VertexArray[l][X]= -0.8;
   VertexArray[l][Y]= 1.5 - (2.1257704)*cos(0.1558682 + nAni);
   VertexArray[l++][Z]= -(2.1257704)*sin(0.1558682 + nAni);

   //170 точка
   VertexArray[l][X]= 0.8 * sin(2*pi/3);
   VertexArray[l][Y]= 1.5 - (1.6092001)*cos(0.1917331 + nAni);
   VertexArray[l++][Z]= -(1.6092001)*sin(0.1917331 + nAni);

   //171 точка
   VertexArray[l][X]= -0.8 * sin(2*pi/3);
   VertexArray[l][Y]= 1.5 - (1.6092001)*cos(0.1917331 + nAni);
   VertexArray[l++][Z]= -(1.6092001)*sin(0.1917331 + nAni);

   //172 точка
   VertexArray[l][X]= 0.8 * sin(5*pi/6);
   VertexArray[l][Y]= 1.5 - (1.2857066)*cos(0.2703678 + nAni);
   VertexArray[l++][Z]= -(1.2857066)*sin(0.2703678 + nAni);

   //173 точка
   VertexArray[l][X]= -0.8 * sin(5*pi/6);
   VertexArray[l][Y]= 1.5 - (1.2857066)*cos(0.2703678 + nAni);
   VertexArray[l++][Z]= -(1.2857066)*sin(0.2703678 + nAni);

   //174 точка
   VertexArray[l][X]= 0;
   VertexArray[l][Y]= 1.5 - (1.1006362)*cos(0.3045109 + nAni);
   VertexArray[l++][Z]= -(1.1006362)*sin(0.3045109 + nAni);

   //175 точка
   VertexArray[l][X]= 1.01;
   VertexArray[l][Y]= 0.9;
   VertexArray[l++][Z]= 0.4;

   //176 точка
   VertexArray[l][X]= 1.01;
   VertexArray[l][Y]= 0.9;
   VertexArray[l++][Z]= 0.0;

   //177 точка
   VertexArray[l][X]= 1.01;
   VertexArray[l][Y]= 0.5;
   VertexArray[l++][Z]= 0.0;

   //178 точка
   VertexArray[l][X]= 1.01;
   VertexArray[l][Y]= 0.5;
   VertexArray[l++][Z]= 0.4;

   //179 точка
   VertexArray[l][X]= 1.02;
   VertexArray[l][Y]= 0.8;
   VertexArray[l++][Z]= 0.3;

   //180 точка
   VertexArray[l][X]= 1.02;
   VertexArray[l][Y]= 0.8;
   VertexArray[l++][Z]= 0.1;

   //181 точка
   VertexArray[l][X]= 1.02;
   VertexArray[l][Y]= 0.6;
   VertexArray[l++][Z]= 0.1;

   //182 точка
   VertexArray[l][X]= 1.02;
   VertexArray[l][Y]= 0.6;
   VertexArray[l++][Z]= 0.3;

   //183 точка
   VertexArray[l][X]= 1.01;
   VertexArray[l][Y]= 0.5;
   VertexArray[l++][Z]= 0.3;

   //184 точка
   VertexArray[l][X]= 1.01;
   VertexArray[l][Y]= 0.5;
   VertexArray[l++][Z]= 0.05;

   //185 точка
   VertexArray[l][X]= 1.02;
   VertexArray[l][Y]= 0.3;
   VertexArray[l++][Z]= 0.05;

   //186 точка
   VertexArray[l][X]= 1.02;
   VertexArray[l][Y]= 0.3;
   VertexArray[l++][Z]= 0.3;

   //187 точка
   VertexArray[l][X]= 1.01;
   VertexArray[l][Y]= 0.1;
   VertexArray[l++][Z]= 0.3;

   //188 точка
   VertexArray[l][X]= 1.01;
   VertexArray[l][Y]= 0.1;
   VertexArray[l++][Z]= 0.05;

   //189 точка - 206 точка
   for (int q = 0;q < 18; q++)
   {
       VertexArray[l][X]= 1.01;
       VertexArray[l][Y]= 1.5 + 0.4 * cos(q * pi / 9);
       VertexArray[l++][Z]= 0.4 * sin(q * pi / 9);
   }
   //207 точка - 224 точка
   for (int q = 0;q < 18; q++)
   {
       VertexArray[l][X]= 1.02;
       VertexArray[l][Y]= 1.5 + 0.2 * cos(q * pi / 9);
       VertexArray[l++][Z]= 0.2 * sin(q * pi / 9);
   }

   //225 точка
   VertexArray[l][X]= 1.02;
   VertexArray[l][Y]= 1.95;
   VertexArray[l++][Z]= 0.1;

   //226 точка
   VertexArray[l][X]= 1.02;
   VertexArray[l][Y]= 1.75;
   VertexArray[l++][Z]= 0.1;

   //227 точка
   VertexArray[l][X]= 1.02;
   VertexArray[l][Y]= 1.75;
   VertexArray[l++][Z]= -0.1;

   //228 точка
   VertexArray[l][X]= 1.02;
   VertexArray[l][Y]= 1.95;
   VertexArray[l++][Z]= -0.1;

   //229 точка - 246 точка
   for (int q = 0;q < 18; q++)
   {
       VertexArray[l][X]= 1.03;
       VertexArray[l][Y]= 1.5 + 0.05 * cos(q * pi / 9);
       VertexArray[l++][Z]= 0.05 * sin(q * pi / 9);
   }



}

void Scene3D::getColorArray(const float k) // определить массив цветов вершин
{
   for (int i=0; i<139; i++)
   {
      ColorArray[i][0]=0; // R - красная составляющая
      ColorArray[i][1]=0; // G - зелёная составляющая
      ColorArray[i][2]=0; // B - синяя составляющая
      ColorArray[i][3]=k; // альфа канал
   }
   for (int i=24; i<25; i++)
   {
      ColorArray[i][0]=1; // R - красная составляющая
      ColorArray[i][1]=1; // G - зелёная составляющая
      ColorArray[i][2]=1; // B - синяя составляющая
      ColorArray[i][3]=1; // альфа канал
   }
   for (int i=34; i<35; i++)
   {
      ColorArray[i][0]=1; // R - красная составляющая
      ColorArray[i][1]=1; // G - зелёная составляющая
      ColorArray[i][2]=1; // B - синяя составляющая
      ColorArray[i][3]=1; // альфа канал
   }
   for (int i=35; i<45; i++)
   {
      ColorArray[i][0]=0.9; // R - красная составляющая
      ColorArray[i][1]=0.9; // G - зелёная составляющая
      ColorArray[i][2]=0.9; // B - синяя составляющая
      ColorArray[i][3]=k; // альфа канал
   }
   for (int i=131; i<135; i++)
   {
      ColorArray[i][0]=0; // R - красная составляющая
      ColorArray[i][1]=0; // G - зелёная составляющая
      ColorArray[i][2]=0; // B - синяя составляющая
      ColorArray[i][3]=1; // альфа канал
   }
   int p[]={86, 89, 90, 91, 92, 95, 98, 99, 100, 101, 103, 104, 105, 108, 109, 111, 114, 115, 118, 119 ,122, 124, 125, 134};
   for (int i=0; i<24; i++)
   {
      ColorArray[p[i]][0]=0.9; // R - красная составляющая
      ColorArray[p[i]][1]=0.9; // G - зелёная составляющая
      ColorArray[p[i]][2]=0.9; // B - синяя составляющая
      ColorArray[p[i]][3]=1; // альфа канал
   }

   for (int i=139; i<151; i++)
   {
      ColorArray[i][0]=0.7; // R - красная составляющая
      ColorArray[i][1]=0.7; // G - зелёная составляющая
      ColorArray[i][2]=0.7; // B - синяя составляющая
      ColorArray[i][3]=1; // альфа канал
   }
   for (int i=151; i<175; i++)
   {
      ColorArray[i][0]=0; // R - красная составляющая
      ColorArray[i][1]=0; // G - зелёная составляющая
      ColorArray[i][2]=0; // B - синяя составляющая
      ColorArray[i][3]=1; // альфа канал
   }
   for (int i=157; i<158; i++)
   {
      ColorArray[i][0]=0/*.1f*(qrand()%11)*/; // R - красная составляющая
      ColorArray[i][1]=0/*.1f*(qrand()%11)*/; // G - зелёная составляющая
      ColorArray[i][2]=1/*.1f*(qrand()%11)*/; // B - синяя составляющая
      ColorArray[i][3]=1/*.1f*(qrand()%11)*/; // альфа канал
      // qrand()%11 - псевдослучайное число от 0 до 10
   }
   for (int i=160; i<161; i++)
   {
      ColorArray[i][0]=0/*.1f*(qrand()%11)*/; // R - красная составляющая
      ColorArray[i][1]=1/*.1f*(qrand()%11)*/; // G - зелёная составляющая
      ColorArray[i][2]=0/*.1f*(qrand()%11)*/; // B - синяя составляющая
      ColorArray[i][3]=1/*.1f*(qrand()%11)*/; // альфа канал
      // qrand()%11 - псевдослучайное число от 0 до 10
   }
   for (int i=162; i<163; i++)
   {
      ColorArray[i][0]=1; // R - красная составляющая
      ColorArray[i][1]=0; // G - зелёная составляющая
      ColorArray[i][2]=0; // B - синяя составляющая
      ColorArray[i][3]=1; // альфа канал
      // qrand()%11 - псевдослучайное число от 0 до 10
   }
   int q[]={163, 168, 169, 174};
   for (int i=0; i<4; i++)
   {
      ColorArray[q[i]][0]=1; // R - красная составляющая
      ColorArray[q[i]][1]=0; // G - зелёная составляющая
      ColorArray[q[i]][2]=0; // B - синяя составляющая
      ColorArray[q[i]][3]=1; // альфа канал
   }
   for (int i=175; i<187; i++)
   {
      ColorArray[i][0]=0; // R - красная составляющая
      ColorArray[i][1]=0; // G - зелёная составляющая
      ColorArray[i][2]=0; // B - синяя составляющая
      ColorArray[i][3]=k; // альфа канал
   }
   for (int i=188; i<250; i++)
   {
      ColorArray[i][0]=0; // R - красная составляющая
      ColorArray[i][1]=0; // G - зелёная составляющая
      ColorArray[i][2]=0; // B - синяя составляющая
      ColorArray[i][3]=1; // альфа канал
   }
   for (int i=178; i<179; i++)
   {
      ColorArray[i][0]=0.9; // R - красная составляющая
      ColorArray[i][1]=0.9; // G - зелёная составляющая
      ColorArray[i][2]=0.9; // B - синяя составляющая
      ColorArray[i][3]=1; // альфа канал
      // qrand()%11 - псевдослучайное число от 0 до 10
   }
   for (int i=188; i<189; i++)
   {
      ColorArray[i][0]=0.9; // R - красная составляющая
      ColorArray[i][1]=0.9; // G - зелёная составляющая
      ColorArray[i][2]=0.9; // B - синяя составляющая
      ColorArray[i][3]=1; // альфа канал
   }

   for (int i=206; i<207; i++)
   {
      ColorArray[i][0]=0.9; // R - красная составляющая
      ColorArray[i][1]=0.9; // G - зелёная составляющая
      ColorArray[i][2]=0.9; // B - синяя составляющая
      ColorArray[i][3]=1; // альфа канал
   }


   for (int i=224; i<225; i++)
   {
      ColorArray[i][0]=0.7; // R - красная составляющая
      ColorArray[i][1]=0.7; // G - зелёная составляющая
      ColorArray[i][2]=0.7; // B - синяя составляющая
      ColorArray[i][3]=1; // альфа канал
   }

   for (int i=228; i<229; i++)
   {
      ColorArray[i][0]=0.7; // R - красная составляющая
      ColorArray[i][1]=0.7; // G - зелёная составляющая
      ColorArray[i][2]=0.7; // B - синяя составляющая
      ColorArray[i][3]=1; // альфа канал
   }

   for (int i=246; i<247; i++)
   {
      ColorArray[i][0]=1; // R - красная составляющая
      ColorArray[i][1]=0; // G - зелёная составляющая
      ColorArray[i][2]=0; // B - синяя составляющая
      ColorArray[i][3]=k; // альфа канал
   }

}

void Scene3D::getIndexArray()   // определить массив индексов и т д
{
   IndexArray[0][0]=0; // индекс (номер) 1-ой вершины
   IndexArray[0][1]=1; // индекс (номер) 2-ой вершины

   IndexArray[1][0]=1;
   IndexArray[1][1]=2;

   IndexArray[2][0]=2;
   IndexArray[2][1]=3;

   IndexArray[3][0]=3;
   IndexArray[3][1]=4;

   IndexArray[4][0]=4;
   IndexArray[4][1]=5;

   IndexArray[5][0]=5;
   IndexArray[5][1]=6;

   IndexArray[6][0]=6;
   IndexArray[6][1]=7;

   IndexArray[7][0]=7;
   IndexArray[7][1]=8;

   IndexArray[8][0]=0;
   IndexArray[8][1]=5;

   IndexArray[9][0]=1;
   IndexArray[9][1]=8;

   IndexArray[10][0]=0;
   IndexArray[10][1]=7;

   IndexArray[11][0]=8;
   IndexArray[11][1]=9;

   IndexArray[12][0]=9;
   IndexArray[12][1]=10;

   IndexArray[13][0]=10;
   IndexArray[13][1]=3;

   IndexArray[14][0]=9;
   IndexArray[14][1]=2;

   IndexArray[15][0]=20;
   IndexArray[15][1]=6;

   IndexArray[16][0]=11;
   IndexArray[16][1]=12;

   IndexArray[17][0]=12;
   IndexArray[17][1]=13;

   IndexArray[18][0]=13;
   IndexArray[18][1]=14;

   IndexArray[19][0]=14;
   IndexArray[19][1]=11;

   IndexArray[20][0]=14;
   IndexArray[20][1]=15;

   IndexArray[21][0]=15;
   IndexArray[21][1]=16;

   IndexArray[22][0]=16;
   IndexArray[22][1]=13;

   IndexArray[23][0]=16;
   IndexArray[23][1]=17;

   IndexArray[24][0]=17;
   IndexArray[24][1]=12;

   IndexArray[25][0]=17;
   IndexArray[25][1]=18;

   IndexArray[26][0]=6;
   IndexArray[26][1]=21;

   IndexArray[27][0]=23;
   IndexArray[27][1]=20;

   IndexArray[28][0]=22;
   IndexArray[28][1]=19;

   IndexArray[29][0]=4;
   IndexArray[29][1]=20;

   IndexArray[30][0]=19;
   IndexArray[30][1]=28;

   IndexArray[31][0]=28;
   IndexArray[31][1]=29;

   IndexArray[32][0]=23;
   IndexArray[32][1]=29;

   IndexArray[33][0]=27;
   IndexArray[33][1]=24;

   IndexArray[34][0]=24;
   IndexArray[34][1]=25;

   IndexArray[35][0]=25;
   IndexArray[35][1]=26;

   IndexArray[36][0]=26;
   IndexArray[36][1]=27;

   IndexArray[37][0]=22;
   IndexArray[37][1]=21;

   IndexArray[38][0]=11;
   IndexArray[38][1]=18;

   IndexArray[39][0]=18;
   IndexArray[39][1]=15;

   IndexArray[40][0]=31;
   IndexArray[40][1]=32;

   IndexArray[41][0]=32;
   IndexArray[41][1]=33;

   IndexArray[42][0]=33;
   IndexArray[42][1]=34;

   IndexArray[43][0]=34;
   IndexArray[43][1]=31;

   IndexArray[44][0]=22;
   IndexArray[44][1]=29;

   IndexArray[45][0]=89;
   IndexArray[45][1]=90;

   IndexArray[46][0]=91;
   IndexArray[46][1]=92;

   IndexArray[47][0]=98;
   IndexArray[47][1]=103;

   IndexArray[48][0]=99;
   IndexArray[48][1]=104;

   int h = 49;

   IndexArray[h][0]=100;
   IndexArray[h++][1]=105;

   IndexArray[h][0]=108;
   IndexArray[h++][1]=124;

   IndexArray[h][0]=125;
   IndexArray[h++][1]=109;

   IndexArray[h][0]=100;
   IndexArray[h++][1]=105;

   IndexArray[h][0]=111;
   IndexArray[h++][1]=114;

   IndexArray[h][0]=115;
   IndexArray[h++][1]=118;

   IndexArray[h][0]=119;
   IndexArray[h++][1]=122;

   IndexArray[h][0]=86;
   IndexArray[h++][1]=87;

   IndexArray[h][0]=95;
   IndexArray[h++][1]=87;

   IndexArray[h][0]=95;
   IndexArray[h++][1]=94;

   IndexArray[h][0]=86;
   IndexArray[h++][1]=94;

   IndexArray[h][0]=86;
   IndexArray[h++][1]=94;

   IndexArray[h][0]=175;
   IndexArray[h++][1]=176;

   IndexArray[h][0]=176;
   IndexArray[h++][1]=177;

   IndexArray[h][0]=178;
   IndexArray[h++][1]=177;

   IndexArray[h][0]=178;
   IndexArray[h++][1]=175;

   // линия 65
   IndexArray[h][0]=185;
   IndexArray[h++][1]=186;



   // 0 прямокгольник
   int k = 0, l = 0;
   Array4[k][0]=7; // индекс (номер) 1-ой вершины
   Array4[k][1]=8; // индекс (номер) 2-ой вершины
   Array4[k][2]=1; // индекс (номер) 3-ей вершины
   Array4[k++][3]=0; // индекс (номер)4-ой вершины

   // 1 прямокгольник
   Array4[k][0]=2; // индекс (номер) 1-ой вершины
   Array4[k][1]=43; // индекс (номер) 2-ой вершины
   Array4[k][2]=35; // индекс (номер) 3-ей вершины
   Array4[k++][3]=3; // индекс (номер) 4-ой вершины

   // 2 прямокгольник
   Array4[k][0]=20; // индекс (номер) 1-ой вершины
   Array4[k][1]=23; // индекс (номер) 2-ой вершины
   Array4[k][2]=7; // индекс (номер) 3-ей вершины
   Array4[k++][3]=6; // индекс (номер) 4-ой вершины

   // 3 прямокгольник
   Array4[k][0]=16; // индекс (номер) 1-ой вершины
   Array4[k][1]=15; // индекс (номер) 2-ой вершины
   Array4[k][2]=14; // индекс (номер) 3-ей вершины
   Array4[k++][3]=13; // индекс (номер) 4-ой вершины

   // 0d прямокгольник
   Array4d[l][0]=27; // индекс (номер) 1-ой вершины
   Array4d[l][1]=26; // индекс (номер) 2-ой вершины
   Array4d[l][2]=25; // индекс (номер) 3-ей вершины
   Array4d[l++][3]=24; // индекс (номер) 4-ой вершины

   // 4 прямокгольник
   Array4[k][0]=17; // индекс (номер) 1-ой вершины
   Array4[k][1]=16; // индекс (номер) 2-ой вершины
   Array4[k][2]=13; // индекс (номер) 3-ей вершины
   Array4[k++][3]=12; // индекс (номер) 4-ой вершины

   // 1d прямокгольник
   Array4d[l][0]=33; // индекс (номер) 1-ой вершины
   Array4d[l][1]=32; // индекс (номер) 2-ой вершины
   Array4d[l][2]=31; // индекс (номер) 3-ей вершины
   Array4d[l++][3]=34; // индекс (номер) 4-ой вершины

   // 5 прямокгольник
   Array4[k][0]=18; // индекс (номер) 1-ой вершины
   Array4[k][1]=17; // индекс (номер) 2-ой вершины
   Array4[k][2]=12; // индекс (номер) 3-ей вершины
   Array4[k++][3]=11; // индекс (номер) 4-ой вершины

   // 6 прямокгольник
   Array4[k][0]=0; // индекс (номер) 1-ой вершины
   Array4[k][1]=5; // индекс (номер) 2-ой вершины
   Array4[k][2]=6; // индекс (номер) 3-ей вершины
   Array4[k++][3]=7; // индекс (номер) 4-ой вершины

   // 7 прямокгольник
   Array4[k][0]=8; // индекс (номер) 1-ой вершины
   Array4[k][1]=9; // индекс (номер) 2-ой вершины
   Array4[k][2]=2; // индекс (номер) 3-ей вершины
   Array4[k++][3]=1; // индекс (номер) 4-ой вершины

   // 8 прямокгольник
   Array4[k][0]=10; // индекс (номер) 1-ой вершины
   Array4[k][1]=18; // индекс (номер) 2-ой вершины
   Array4[k][2]=4; // индекс (номер) 3-ей вершины
   Array4[k++][3]=3; // индекс (номер) 4-ой вершины

   // 9 прямокгольник
   Array4[k][0]=18; // индекс (номер) 1-ой вершины
   Array4[k][1]=6; // индекс (номер) 2-ой вершины
   Array4[k][2]=21; // индекс (номер) 3-ей вершины
   Array4[k++][3]=22; // индекс (номер) 4-ой вершины

   // 10 прямокгольник
   Array4[k][0]=18; // индекс (номер) 1-ой вершины
   Array4[k][1]=23; // индекс (номер) 2-ой вершины
   Array4[k][2]=7; // индекс (номер) 3-ей вершины
   Array4[k++][3]=6; // индекс (номер) 4-ой вершины

   // 11 прямокгольник
   Array4[k][0]=9; // индекс (номер) 1-ой вершины
   Array4[k][1]=8; // индекс (номер) 2-ой вершины
   Array4[k][2]=23; // индекс (номер) 3-ей вершины
   Array4[k++][3]=10; // индекс (номер) 4-ой вершины

   // 12 прямокгольник
   Array4[k][0]=6; // индекс (номер) 1-ой вершины
   Array4[k][1]=5; // индекс (номер) 2-ой вершины
   Array4[k][2]=4; // индекс (номер) 3-ей вершины
   Array4[k++][3]=20; // индекс (номер) 4-ой вершины

   // 13 прямокгольник
   Array4[k][0]=1; // индекс (номер) 1-ой вершины
   Array4[k][1]=2; // индекс (номер) 2-ой вершины
   Array4[k][2]=3; // индекс (номер) 3-ей вершины
   Array4[k++][3]=30; // индекс (номер) 4-ой вершины

   // 14 прямокгольник
   Array4[k][0]=11; // индекс (номер) 1-ой вершины
   Array4[k][1]=14; // индекс (номер) 2-ой вершины
   Array4[k][2]=15; // индекс (номер) 3-ей вершины
   Array4[k++][3]=18; // индекс (номер) 4-ой вершины

   // 15 прямокгольник
   Array4[k][0]=10; // индекс (номер) 1-ой вершины
   Array4[k][1]=20; // индекс (номер) 2-ой вершины
   Array4[k][2]=4; // индекс (номер) 3-ей вершины
   Array4[k++][3]=3; // индекс (номер) 4-ой вершины

    // 16 прямокгольник
    Array4[k][0]=26; // индекс (номер) 1-ой вершины
    Array4[k][1]=27; // индекс (номер) 2-ой вершины
    Array4[k][2]=15; // индекс (номер) 3-ей вершины
    Array4[k++][3]=16; // индекс (номер) 4-ой вершины

    // 17 прямокгольник
    Array4[k][0]=24; // индекс (номер) 1-ой вершины
    Array4[k][1]=18; // индекс (номер) 2-ой вершины
    Array4[k][2]=15; // индекс (номер) 3-ей вершины
    Array4[k++][3]=27; // индекс (номер) 4-ой вершины

    // 18 прямокгольник
    Array4[k][0]=17; // индекс (номер) 1-ой вершины
    Array4[k][1]=18; // индекс (номер) 2-ой вершины
    Array4[k][2]=24; // индекс (номер) 3-ей вершины
    Array4[k++][3]=25; // индекс (номер) 4-ой вершины

    // 19 прямокгольник
    Array4[k][0]=16; // индекс (номер) 1-ой вершины
    Array4[k][1]=17; // индекс (номер) 2-ой вершины
    Array4[k][2]=25; // индекс (номер) 3-ей вершины
    Array4[k++][3]=26; // индекс (номер) 4-ой вершины

    // 20 прямокгольник
    Array4[k][0]=14; // индекс (номер) 1-ой вершины
    Array4[k][1]=32; // индекс (номер) 2-ой вершины
    Array4[k][2]=33; // индекс (номер) 3-ей вершины
    Array4[k++][3]=13; // индекс (номер) 4-ой вершины

    // 21 прямокгольник
    Array4[k][0]=13; // индекс (номер) 1-ой вершины
    Array4[k][1]=33; // индекс (номер) 2-ой вершины
    Array4[k][2]=34; // индекс (номер) 3-ей вершины
    Array4[k++][3]=12; // индекс (номер) 4-ой вершины

    // 22 прямокгольник
    Array4[k][0]=12; // индекс (номер) 1-ой вершины
    Array4[k][1]=34; // индекс (номер) 2-ой вершины
    Array4[k][2]=31; // индекс (номер) 3-ей вершины
    Array4[k++][3]=11; // индекс (номер) 4-ой вершины

    // 23 прямокгольник
    Array4[k][0]=11; // индекс (номер) 1-ой вершины
    Array4[k][1]=31; // индекс (номер) 2-ой вершины
    Array4[k][2]=32; // индекс (номер) 3-ей вершины
    Array4[k++][3]=14; // индекс (номер) 4-ой вершины

    // 2d прямокгольник
    Array4d[l][0]=133; // индекс (номер) 1-ой вершины
    Array4d[l][1]=131; // индекс (номер) 2-ой вершины
    Array4d[l][2]=132; // индекс (номер) 3-ей вершины
    Array4d[l++][3]=134; // индекс (номер) 4-ой вершины

    // 24 прямокгольник
    Array4[k][0]=9; // индекс (номер) 1-ой вершины
    Array4[k][1]=44; // индекс (номер) 2-ой вершины
    Array4[k][2]=43; // индекс (номер) 3-ей вершины
    Array4[k++][3]=2; // индекс (номер) 4-ой вершины

    // 25 прямокгольник
    Array4[k][0]=10; // индекс (номер) 1-ой вершины
    Array4[k][1]=36; // индекс (номер) 2-ой вершины
    Array4[k][2]=44; // индекс (номер) 3-ей вершины
    Array4[k++][3]=9; // индекс (номер) 4-ой вершины

    // 26 прямокгольник
    Array4[k][0]=3; // индекс (номер) 1-ой вершины
    Array4[k][1]=35; // индекс (номер) 2-ой вершины
    Array4[k][2]=36; // индекс (номер) 3-ей вершины
    Array4[k++][3]=10; // индекс (номер) 4-ой вершины

    // 27 прямокгольник
    Array4[k][0]=39; // индекс (номер) 1-ой вершины
    Array4[k][1]=41; // индекс (номер) 2-ой вершины
    Array4[k][2]=42; // индекс (номер) 3-ей вершины
    Array4[k++][3]=40; // индекс (номер) 4-ой вершины

    // 3d прямокгольник
    Array4d[l][0]=39; // индекс (номер) 1-ой вершины
    Array4d[l][1]=102; // индекс (номер) 2-ой вершины
    Array4d[l][2]=85; // индекс (номер) 3-ей вершины
    Array4d[l++][3]=35; // индекс (номер) 4-ой вершины

    // 4d прямокгольник
    Array4d[l][0]=35; // индекс (номер) 1-ой вершины
    Array4d[l][1]=85; // индекс (номер) 2-ой вершины
    Array4d[l][2]=88; // индекс (номер) 3-ей вершины
    Array4d[l++][3]=36; // индекс (номер) 4-ой вершины

    // 5d прямокгольник
    Array4d[l][0]=96; // индекс (номер) 1-ой вершины
    Array4d[l][1]=93; // индекс (номер) 2-ой вершины
    Array4d[l][2]=97; // индекс (номер) 3-ей вершины
    Array4d[l++][3]=101; // индекс (номер) 4-ой вершины

    // 6d прямокгольник
    Array4d[l][0]=88; // индекс (номер) 1-ой вершины
    Array4d[l][1]=106; // индекс (номер) 2-ой вершины
    Array4d[l][2]=40; // индекс (номер) 3-ей вершины
    Array4d[l++][3]=36; // индекс (номер) 4-ой вершины

    // 7d прямокгольник
    Array4d[l][0]=40; // индекс (номер) 1-ой вершины
    Array4d[l][1]=106; // индекс (номер) 2-ой вершины
    Array4d[l][2]=102; // индекс (номер) 3-ей вершины
    Array4d[l++][3]=39; // индекс (номер) 4-ой вершины

    // 8d прямокгольник
    Array4d[l][0]=97; // индекс (номер) 1-ой вершины
    Array4d[l][1]=93; // индекс (номер) 2-ой вершины
    Array4d[l][2]=96; // индекс (номер) 3-ей вершины
    Array4d[l++][3]=100; // индекс (номер) 4-ой вершины

    // 28 прямокгольник
    Array4[k][0]=94; // индекс (номер) 1-ой вершины
    Array4[k][1]=86; // индекс (номер) 2-ой вершины
    Array4[k][2]=85; // индекс (номер) 3-ей вершины
    Array4[k++][3]=93; // индекс (номер) 4-ой вершины

    // 29 прямокгольник
    Array4[k][0]=88; // индекс (номер) 1-ой вершины
    Array4[k][1]=87; // индекс (номер) 2-ой вершины
    Array4[k][2]=95; // индекс (номер) 3-ей вершины
    Array4[k++][3]=96; // индекс (номер) 4-ой вершины

    // 9d прямокгольник
    Array4d[l][0]=94; // индекс (номер) 1-ой вершины
    Array4d[l][1]=128; // индекс (номер) 2-ой вершины
    Array4d[l][2]=127; // индекс (номер) 3-ей вершины
    Array4d[l++][3]=86; // индекс (номер) 4-ой вершины

    // 10d прямокгольник
    Array4d[l][0]=87; // индекс (номер) 1-ой вершины
    Array4d[l][1]=129; // индекс (номер) 2-ой вершины
    Array4d[l][2]=130; // индекс (номер) 3-ей вершины
    Array4d[l++][3]=95; // индекс (номер) 4-ой вершины

    // 11d прямокгольник
    Array4d[l][0]=127; // индекс (номер) 1-ой вершины
    Array4d[l][1]=129; // индекс (номер) 2-ой вершины
    Array4d[l][2]=87; // индекс (номер) 3-ей вершины
    Array4d[l++][3]=86; // индекс (номер) 4-ой вершины

    // 12d прямокгольник
    Array4d[l][0]=130; // индекс (номер) 1-ой вершины
    Array4d[l][1]=128; // индекс (номер) 2-ой вершины
    Array4d[l][2]=94; // индекс (номер) 3-ей вершины
    Array4d[l++][3]=95; // индекс (номер) 4-ой вершины

    // 30 прямокгольник
    Array4[k][0]=127; // индекс (номер) 1-ой вершины
    Array4[k][1]=128; // индекс (номер) 2-ой вершины
    Array4[k][2]=130; // индекс (номер) 3-ей вершины
    Array4[k++][3]=129; // индекс (номер) 4-ой вершины

    // 31 прямокгольник
    Array4[k][0]=101; // индекс (номер) 1-ой вершины
    Array4[k][1]=97; // индекс (номер) 2-ой вершины
    Array4[k][2]=102; // индекс (номер) 3-ей вершины
    Array4[k++][3]=106; // индекс (номер) 4-ой вершины

    // 13d прямокгольник
    Array4d[l][0]=43; // индекс (номер) 1-ой вершины
    Array4d[l][1]=123; // индекс (номер) 2-ой вершины
    Array4d[l][2]=107; // индекс (номер) 3-ей вершины
    Array4d[l++][3]=41; // индекс (номер) 4-ой вершины

    // 14d прямокгольник
    Array4d[l][0]=126; // индекс (номер) 1-ой вершины
    Array4d[l][1]=123; // индекс (номер) 2-ой вершины
    Array4d[l][2]=43; // индекс (номер) 3-ей вершины
    Array4d[l++][3]=44; // индекс (номер) 4-ой вершины

    // 15d прямокгольник
    Array4d[l][0]=110; // индекс (номер) 1-ой вершины
    Array4d[l][1]=126; // индекс (номер) 2-ой вершины
    Array4d[l][2]=44; // индекс (номер) 3-ей вершины
    Array4d[l++][3]=42; // индекс (номер) 4-ой вершины

    // 16d прямокгольник
    Array4d[l][0]=107; // индекс (номер) 1-ой вершины
    Array4d[l][1]=110; // индекс (номер) 2-ой вершины
    Array4d[l][2]=42; // индекс (номер) 3-ей вершины
    Array4d[l++][3]=41; // индекс (номер) 4-ой вершины

    // 32 прямокгольник
    Array4[k][0]=107; // индекс (номер) 1-ой вершины
    Array4[k][1]=123; // индекс (номер) 2-ой вершины
    Array4[k][2]=126; // индекс (номер) 3-ей вершины
    Array4[k++][3]=110; // индекс (номер) 4-ой вершины

    // 33 прямокгольник
    Array4[k][0]=0; // индекс (номер) 1-ой вершины
    Array4[k][1]=132; // индекс (номер) 2-ой вершины
    Array4[k][2]=131; // индекс (номер) 3-ей вершины
    Array4[k++][3]=5; // индекс (номер) 4-ой вершины

    // 34 прямокгольник
    Array4[k][0]=5; // индекс (номер) 1-ой вершины
    Array4[k][1]=131; // индекс (номер) 2-ой вершины
    Array4[k][2]=133; // индекс (номер) 3-ей вершины
    Array4[k++][3]=4; // индекс (номер) 4-ой вершины

    // 35 прямокгольник
    Array4[k][0]=4; // индекс (номер) 1-ой вершины
    Array4[k][1]=133; // индекс (номер) 2-ой вершины
    Array4[k][2]=134; // индекс (номер) 3-ей вершины
    Array4[k++][3]=30; // индекс (номер) 4-ой вершины

    // 36 прямокгольник
    Array4[k][0]=30; // индекс (номер) 1-ой вершины
    Array4[k][1]=134; // индекс (номер) 2-ой вершины
    Array4[k][2]=132; // индекс (номер) 3-ей вершины
    Array4[k++][3]=0; // индекс (номер) 4-ой вершины

    // 37 прямокгольник
    Array4[k][0]=179; // индекс (номер) 1-ой вершины
    Array4[k][1]=180; // индекс (номер) 2-ой вершины
    Array4[k][2]=181; // индекс (номер) 3-ей вершины
    Array4[k++][3]=182; // индекс (номер) 4-ой вершины

    // 38 прямокгольник
    Array4[k][0]=227; // индекс (номер) 1-ой вершины
    Array4[k][1]=226; // индекс (номер) 2-ой вершины
    Array4[k][2]=225; // индекс (номер) 3-ей вершины
    Array4[k++][3]=228; // индекс (номер) 4-ой вершины

    // 17d прямокгольник
    Array4d[l][0]=137; // индекс (номер) 1-ой вершины
    Array4d[l][1]=135; // индекс (номер) 2-ой вершины
    Array4d[l][2]=136; // индекс (номер) 3-ей вершины
    Array4d[l++][3]=138; // индекс (номер) 4-ой вершины

    // 18d прямокгольник
    Array4d[l][0]=140; // индекс (номер) 1-ой вершины
    Array4d[l][1]=141; // индекс (номер) 2-ой вершины
    Array4d[l][2]=139; // индекс (номер) 3-ей вершины
    Array4d[l++][3]=142; // индекс (номер) 4-ой вершины

    // 19d прямокгольник
    Array4d[l][0]=144; // индекс (номер) 1-ой вершины
    Array4d[l][1]=141; // индекс (номер) 2-ой вершины
    Array4d[l][2]=140; // индекс (номер) 3-ей вершины
    Array4d[l++][3]=143; // индекс (номер) 4-ой вершины

    // 20d прямокгольник
    Array4d[l][0]=144; // индекс (номер) 1-ой вершины
    Array4d[l][1]=139; // индекс (номер) 2-ой вершины
    Array4d[l][2]=141; // индекс (номер) 3-ей вершины
    Array4d[l++][3]=144; // индекс (номер) 4-ой вершины

    // 21d прямокгольник
    Array4d[l][0]=143; // индекс (номер) 1-ой вершины
    Array4d[l][1]=140; // индекс (номер) 2-ой вершины
    Array4d[l][2]=142; // индекс (номер) 3-ей вершины
    Array4d[l++][3]=143; // индекс (номер) 4-ой вершины


    // 22d прямокгольник
    Array4d[l][0]=142; // индекс (номер) 1-ой вершины
    Array4d[l][1]=139; // индекс (номер) 2-ой вершины
    Array4d[l][2]=145; // индекс (номер) 3-ей вершины
    Array4d[l++][3]=146; // индекс (номер) 4-ой вершины

    // 23d прямокгольник
    Array4d[l][0]=147; // индекс (номер) 1-ой вершины
    Array4d[l][1]=149; // индекс (номер) 2-ой вершины
    Array4d[l][2]=148; // индекс (номер) 3-ей вершины
    Array4d[l++][3]=150; // индекс (номер) 4-ой вершины

    // 24d прямокгольник
    Array4d[l][0]=153; // индекс (номер) 1-ой вершины
    Array4d[l][1]=151; // индекс (номер) 2-ой вершины
    Array4d[l][2]=152; // индекс (номер) 3-ей вершины
    Array4d[l++][3]=154; // индекс (номер) 4-ой вершины

    // 25d прямокгольник
    Array4d[l][0]=175; // индекс (номер) 1-ой вершины
    Array4d[l][1]=176; // индекс (номер) 2-ой вершины
    Array4d[l][2]=177; // индекс (номер) 3-ей вершины
    Array4d[l++][3]=178; // индекс (номер) 4-ой вершины

    // 26d прямокгольник
    Array4d[l][0]=187; // индекс (номер) 1-ой вершины
    Array4d[l][1]=183; // индекс (номер) 2-ой вершины
    Array4d[l][2]=184; // индекс (номер) 3-ей вершины
    Array4d[l++][3]=188; // индекс (номер) 4-ой вершины


    int m = 0;
    // 0m прямокгольник
    Array4m[m][0]=12; // индекс (номер) 1-ой вершины
    Array4m[m][1]=13; // индекс (номер) 2-ой вершины
    Array4m[m][2]=14; // индекс (номер) 3-ей вершины
    Array4m[m++][3]=11; // индекс (номер) 4-ой вершины

    // 1m прямокгольник
    Array4m[m][0]=4; // индекс (номер) 1-ой вершины
    Array4m[m][1]=5; // индекс (номер) 2-ой вершины
    Array4m[m][2]=0; // индекс (номер) 3-ей вершины
    Array4m[m++][3]=30; // индекс (номер) 4-ой вершины

    for (m = 0; m < 18; m++) Array18[0][m]= 206 - m;
    Array18[0][18] = 206;
    for (m = 0; m < 18; m++) Array18[1][m]= 224 - m;
    Array18[1][18] = 224;
    for (m = 0; m < 18; m++) Array18[2][m]= 246 - m;
    Array18[2][18] = 246;


    for (int q=0;q<12;q++)
    {
        PointsHo[q] = q + 163;
    }
}


void Scene3D::drawNumb( int hour, int min, int sec)
{
    int t;
    t = hour / 10;
    GLubyte pos = 45;
    int arr = 0;
    switchNumb(t, pos, arr);
    t = hour % 10;
    pos = 51;
    arr = 5;
    switchNumb(t, pos, arr);
    t = min / 10;
    pos = 59;
    arr = 10;
    switchNumb(t, pos, arr);
    t = min % 10;
    pos = 65;
    arr = 15;
    switchNumb(t, pos, arr);
    t = sec / 10;
    pos = 73;
    arr = 20;
    switchNumb(t, pos, arr);
    t = sec % 10;
    pos = 79;
    arr = 25;
    switchNumb(t, pos, arr);

    ArrayNum[30][0]=57;
    ArrayNum[30][1]=58;

    ArrayNum[31][0]=71;
    ArrayNum[31][1]=72;


    int y = 0;
    ArrayAn[y][0]=158; // индекс (номер) 1-ой вершины
    ArrayAn[y][1]=156; // индекс (номер) 2-ой вершины
    ArrayAn[y][2]=155; // индекс (номер) 2-ой вершины
    ArrayAn[y++][3]=157; // индекс (номер) 2-ой вершины

    ArrayAn[y][0]=161; // индекс (номер) 1-ой вершины
    ArrayAn[y][1]=159; // индекс (номер) 2-ой вершины
    ArrayAn[y][2]=155; // индекс (номер) 2-ой вершины
    ArrayAn[y++][3]=160; // индекс (номер) 2-ой вершины

    secStr[0] = 155;
    secStr[1] = 162;

}

void Scene3D::switchNumb(int t, GLubyte pos, int arr)
{
    switch (t)
    {
        case 0:
            draw0(pos, arr);
        break;

        case 1:
            draw1(pos, arr);
        break;

        case 2:
            draw2(pos, arr);
        break;

        case 3:
            draw3(pos, arr);
        break;

        case 4:
            draw4(pos, arr);
        break;

        case 5:
            draw5(pos, arr);
        break;

        case 6:
            draw6(pos, arr);
        break;

        case 7:
            draw7(pos, arr);
        break;

        case 8:
            draw8(pos, arr);
        break;

        case 9:
            draw9(pos, arr);
        break;
    }


}

void Scene3D::draw0(GLubyte pos, int arr)
{

    ArrayNum[arr][0]=pos;
    ArrayNum[arr++][1]=pos + 1;

    ArrayNum[arr][0]=pos + 1;
    ArrayNum[arr++][1]=pos + 5;

    ArrayNum[arr][0]=pos;
    ArrayNum[arr++][1]=pos + 4;

    ArrayNum[arr][0]=pos + 4;
    ArrayNum[arr++][1]=pos + 5;

    ArrayNum[arr][0]=pos;
    ArrayNum[arr][1]=pos;

}

void Scene3D::draw1(GLubyte pos, int arr)
{

    ArrayNum[arr][0]=pos + 1;
    ArrayNum[arr++][1]=pos + 5;

    ArrayNum[arr][0]=pos;
    ArrayNum[arr++][1]=pos;

    ArrayNum[arr][0]=pos;
    ArrayNum[arr++][1]=pos;

    ArrayNum[arr][0]=pos;
    ArrayNum[arr++][1]=pos;

    ArrayNum[arr][0]=pos;
    ArrayNum[arr][1]=pos;

}

void Scene3D::draw2(GLubyte pos, int arr)
{

    ArrayNum[arr][0]=pos;
    ArrayNum[arr++][1]=pos + 1;

    ArrayNum[arr][0]=pos;
    ArrayNum[arr++][1]=pos + 2;

    ArrayNum[arr][0]=pos + 3;
    ArrayNum[arr++][1]=pos + 2;

    ArrayNum[arr][0]=pos + 3;
    ArrayNum[arr++][1]=pos + 5;

    ArrayNum[arr][0]=pos + 4;
    ArrayNum[arr][1]=pos + 5;

}

void Scene3D::draw3(GLubyte pos, int arr)
{

    ArrayNum[arr][0]=pos;
    ArrayNum[arr++][1]=pos + 1;

    ArrayNum[arr][0]=pos + 1;
    ArrayNum[arr++][1]=pos + 5;

    ArrayNum[arr][0]=pos + 3;
    ArrayNum[arr++][1]=pos + 2;

    ArrayNum[arr][0]=pos + 5;
    ArrayNum[arr++][1]=pos + 4;

    ArrayNum[arr][0]=pos;
    ArrayNum[arr][1]=pos;

}

void Scene3D::draw4(GLubyte pos, int arr)
{

    ArrayNum[arr][0]=pos + 4;
    ArrayNum[arr++][1]=pos + 2;

    ArrayNum[arr][0]=pos + 1;
    ArrayNum[arr++][1]=pos + 3;

    ArrayNum[arr][0]=pos + 3;
    ArrayNum[arr++][1]=pos + 2;

    ArrayNum[arr][0]=pos + 3;
    ArrayNum[arr++][1]=pos + 5;

    ArrayNum[arr][0]=pos;
    ArrayNum[arr][1]=pos;

}

void Scene3D::draw5(GLubyte pos, int arr)
{

    ArrayNum[arr][0]=pos;
    ArrayNum[arr++][1]=pos + 1;

    ArrayNum[arr][0]=pos + 1;
    ArrayNum[arr++][1]=pos + 3;

    ArrayNum[arr][0]=pos + 3;
    ArrayNum[arr++][1]=pos + 2;

    ArrayNum[arr][0]=pos + 2;
    ArrayNum[arr++][1]=pos + 4;

    ArrayNum[arr][0]=pos + 4;
    ArrayNum[arr][1]=pos + 5;

}

void Scene3D::draw6(GLubyte pos, int arr)
{

    ArrayNum[arr][0]=pos ;
    ArrayNum[arr++][1]=pos + 1;

    ArrayNum[arr][0]=pos + 1;
    ArrayNum[arr++][1]=pos + 3;

    ArrayNum[arr][0]=pos + 3;
    ArrayNum[arr++][1]=pos + 2;

    ArrayNum[arr][0]=pos + 2;
    ArrayNum[arr++][1]=pos;

    ArrayNum[arr][0]=pos + 2;
    ArrayNum[arr][1]=pos + 5;

}

void Scene3D::draw7(GLubyte pos, int arr)
{

    ArrayNum[arr][0]=pos;
    ArrayNum[arr++][1]=pos + 5;

    ArrayNum[arr][0]=pos + 5;
    ArrayNum[arr++][1]=pos + 4;

    ArrayNum[arr][0]=pos;
    ArrayNum[arr++][1]=pos;

    ArrayNum[arr][0]=pos;
    ArrayNum[arr++][1]=pos;

    ArrayNum[arr][0]=pos;
    ArrayNum[arr][1]=pos;

}

void Scene3D::draw8(GLubyte pos, int arr)
{

    ArrayNum[arr][0]=pos;
    ArrayNum[arr++][1]=pos + 1;

    ArrayNum[arr][0]=pos + 1;
    ArrayNum[arr++][1]=pos + 5;

    ArrayNum[arr][0]=pos;
    ArrayNum[arr++][1]=pos + 4;

    ArrayNum[arr][0]=pos + 4;
    ArrayNum[arr++][1]=pos + 5;

    ArrayNum[arr][0]=pos + 3;
    ArrayNum[arr][1]=pos + 2;

}

void Scene3D::draw9(GLubyte pos, int arr)
{

    ArrayNum[arr][0]=pos + 4;
    ArrayNum[arr++][1]=pos + 5;

    ArrayNum[arr][0]=pos + 5;
    ArrayNum[arr++][1]=pos + 3;

    ArrayNum[arr][0]=pos + 4;
    ArrayNum[arr++][1]=pos + 2;

    ArrayNum[arr][0]=pos + 3;
    ArrayNum[arr++][1]=pos + 2;

    ArrayNum[arr][0]=pos + 3;
    ArrayNum[arr][1]=pos;

}


void Scene3D::drawFigure() // построить фигуру
{
   glVertexPointer(3, GL_FLOAT, 0, VertexArray);
   glColorPointer(4, GL_FLOAT, 0, ColorArray);

   glDrawElements(GL_QUADS, 160, GL_UNSIGNED_BYTE, Array4[0]);
   glDisable(GL_LIGHTING);
   glDrawElements(GL_LINES, 133, GL_UNSIGNED_BYTE, IndexArray);
   glDrawElements(GL_QUADS, 110, GL_UNSIGNED_BYTE, Array4d[0]);
   glDrawElements(GL_POLYGON, 19, GL_UNSIGNED_BYTE, Array18[0]);
   glDrawElements(GL_POLYGON, 19, GL_UNSIGNED_BYTE, Array18[1]);
   glDrawElements(GL_POLYGON, 19, GL_UNSIGNED_BYTE, Array18[2]);

   //
   int q[]={163, 168, 169, 174};
   for(int i = 0; i < 12; i++)
   {
        glPointSize(2);
        for(int j = 0; j < 4; j++)
            if (PointsHo[i] == q[j]) glPointSize(5);
        glDrawElements(GL_POINTS, 1, GL_UNSIGNED_BYTE, &PointsHo[i]);
   }

   updateTime(); // обновляем время

   /* образ текстуры */
   glGenTextures(1,&texture);

   glEnable(GL_LIGHTING);
   texture = bindTexture(QPixmap(QString("C:/Users/user/Desktop/qt/task33/nqw.bmp")),GL_TEXTURE_2D );
   /* идентификаторы текстур */

        glBegin(GL_QUADS);
            glTexCoord2d(0, 0);
            glVertex3f(0.82, 1.5 - (3.2190837)*cos(0.108942 + nAni), -(3.2190837)*sin(0.108942 + nAni)) ;

            glTexCoord2d(2, 0);
            glVertex3f(0.82, 1.5 - (1.059481)*cos(0.3366748 + nAni), -(1.059481)*sin(0.3366748 + nAni)) ;

            glTexCoord2d(2, 2);
            glVertex3f(0.82, 1.5 - (1.059481)*cos(0.3366748 + nAni), -(1.059481)*sin(0.3366748 + nAni)) ;

            glTexCoord2d(0, 2);
            glVertex3f(0.82, 1.5 - (3.2190837)*cos(0.108942 + nAni), -(3.2190837)*sin(0.108942 + nAni)) ;

       glEnd();

    glEnable(GL_LIGHTING);

}
