// пример текстурирования, z-буфера, субпиксельной и субтексельной точности

// ПРИМЕЧАНИЕ: эти #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-буфер
  initVideo();   // инициализируем видеосистему
  makeTorus();   // создадим объект
  initPalette(); // поставим палитру
  makeTexture(); // сгенерируем текстуру

  while (!kbhit()) {
    clearZBuffer();     // очистим z-буфер
    clearVideoBuffer(); // очистим видеобуфер

    // поворачиваем все вершины объекта
    for (i = 0; i < numVerts; i++)
      xRotateVertex(&verts[i], frame * PI / 360);

    // рисуем все грани объекта в видеобуфер
    for (i = 0; i < numFaces; i++)
      drawAffineTexturedZBufferedFace(&faces[i]);

    // скопируем видеобуфер на экран
    showVideoBuffer();
    frame++;
  }

  // вернемся в текстовый видеорежим
  doneVideo();
}
