Лаб 8. Программируемая геометрия на GPU
Задание 1: Базовый тесселяционный ландшафт (3 балла)
1.1. Реализуйте простой патч-ландшафт
Исходные данные:
Патч размером 10×10, состоящий из 4 вершин (квадрат)
Карта высот (текстура 256×256, загружается из файла или генерируется procedural noise)
Критерии:
Отображение сетки с корректной тесселяцией
Применение карты высот
Возможность вращения камеры
Задание 2: Адаптивный LOD по расстоянию (3 балла)
2.1. Реализуйте динамическое изменение уровня тесселяции
Требование: Уровень тесселяции должен зависеть от расстояния от патча до камеры.
Указания:
Передайте в TCS позицию камеры через uniform
Вычислите центр патча (среднее арифметическое вершин)
Рассчитайте уровень тесселяции как
max(1, maxLevel / distance)
Критерии:
Видимое изменение детализации при приближении/отдалении камеры
Плавное изменение уровней (используйте
fractional_even_spacing)Отсутствие видимых "швов" между патчами
Задание 3: Геометрический шейдер для визуализации нормалей (2 балла)
3.1. Добавьте режим отладки с отображением нормалей
Требование: По нажатию клавиши 'N' переключается режим, в котором поверх каждого треугольника рисуется линия нормали.
Критерии:
Корректное отображение нормалей (длина, направление)
Переключение режима по нажатию клавиши
Отсутствие артефактов при включенном/выключенном режиме