В проекте реализованы:
-
загрузка 3D объектов и параметров их текстурирования из файлов, процедурное построение и текстурирование моделей 3D объектов: реализована генерация платоновых тел, сферы и ее производных, тора и его производных; для платоновых тел одна и та же текстура накладывается на каждую грань, для сферы, тора и их производных текстура накладывается на весь объект;
-
сохранение матрицы вершин и текстурных вершин, списка граней и текстурных граней последней добавленной модели;
-
аффинные преобразования объектов и пространства: реализованы масштабирование, сдвиги вдоль и вращения вокруг осей посредством мыши, реализовано движение каждого объекта в отдельности; реализованы режимы волчка и карусели; режим волчка реализован посредством сдвига в начало координат, вращения и сдвига обратно в цикле; режим карусели реализован посредством вращения в цикле;
-
получение параллельной и перспективной проекций сцены: реализованы два вида проекции - параллельная и одноточечная перспективная, между которыми можно переключаться;
-
вывод каркасных моделей и сплошных объектов: реализовано переключение между двумя режимами отображения;
-
отсечение ближней и дальней плоскостями отсечения: реализовано при помощи буфера глубины;
-
удаление невидимых ребер каркасных моделей и невидимых граней: реализован как алгоритм Робертса, так и удаление посредством буфера глубины; для пересекающихся каркасных моделей новые ребра не строятся;
-
включение / выключение точечного источника света: включение источника света не влияет на каркасную модель; при выключенном источники света каждый объект равномерно закрашивается своим цветом;
-
движение точечного источника света: реализованы масштабирование, сдвиги вдоль и вращения вокруг осей координат источника света; релизовано переключение между режимами движения объектов и источника света;
-
методы закраски объектов - плоская, по Гуро и по Фонгу;
-
включение / выключение режима построения теней;
-
регулирование свойств материалов выбранных объектов, а также привязка различных текстур;
-
вывод на экран и сохранение буферов кадра и глубины: буфер глубины записывается при включенном тесте глубины; буфер псевдо-глубины записывается при включенном теневом тесте; при включенном режиме движения источника света и теневом тесте отображаются: вместо буфера глубины - буфер псевдо-глубины, shadow map, вместо буфера кадра - буфер псевдо-кадра с проверками на глубину, с камерой в источнике освещения и направлением в центр сцены (0, 0, 0);