// пример освещения по Гуро

// ПРИМЕЧАНИЕ: эти #define должны находится ДО #inlcude "mappers.h"
#define SUBPIXEL      // включает поддержку субпиксельной точности
#define SUBTEXEL      // включает поддержку субтексельной точности

#include <math.h>     // для sin()/cos()
#include "3d.h"       // подключим пару своих библиотек
#include "mappers.h"
#include "scene.h"
#include "video.h"

void main() {
  int i, frame = 0;

  initZBuffer();      // инициализируем z-буфер
  makeTorus();        // создадим объект
  calcNormals();      // посчитаем нормали
  initVideo();        // инициализируем видеосистему
  initPalette();      // поставим палитру

  while (!kbhit()) {
    clearZBuffer();     // очистим z-буфер
    clearVideoBuffer(); // очистим видеобуфер

    // поворачиваем все вершины объекта
    for (i = 0; i < numVerts; i++)
      xRotateVertex(&verts[i], frame * PI / 360);

    // рисуем все грани объекта в видеобуфер
    for (i = 0; i < numFaces; i++)
      drawGouraudZBufferedFace(&faces[i]);

    // копируем видеобуфер на экран
    showVideoBuffer();
    frame++;
  }

  // возвращаемся в текстовый видеорежим
  doneVideo();
}
