# Лабораторная работа 4 ## Методы и алгоритмы построения комплексных изображений ### Итоговый отчёт по проекту `Zivro` ## 1. Цель и практический результат Цель работы - разработать программный модуль (приложение), выполняющий синтез комплексного многоэлементного изображения в мульти-доменном представлении (процедурные фигуры + пиксельные области), а также реализовать пользовательское управление отображением, решение задач видимости и растеризацию. Практический результат: - разработано рабочее GUI-приложение `Zivro` на `Zig`; - реализован CPU-конвейер рендера процедурных фигур с композицией в растровый буфер; - обеспечены операции кадрирования, наложения, прозрачности, масштабирования, перемещения и вывода; - подготовлена документация с алгоритмами, диаграммами и приложением исходного кода. ## 2. Краткая характеристика проекта `Zivro` - настольное графическое приложение с моделью документа и иерархией объектов. Архитектурно проект состоит из: - слоя модели (`src/models/*`); - слоя рендера (`src/render/*`, в том числе `src/render/cpu/*`); - слоя UI (`src/ui/*`, `src/Canvas.zig`, `src/main.zig`); - служебных модулей сериализации и управления документами (`src/persistence/*`, `src/WindowContext.zig`). ## 3. Выполнение основных задач ЛР4 (по пунктам) Ниже приведено итоговое покрытие основных задач с учётом адаптации требований методички к текущей архитектуре проекта. ### 3.1 ОЗ.Р1 - Организация пиксельных областей **Выполнено (в адаптированном слоёвом представлении):** - роль "контейнера слоёв" выполняет структура документа и порядок отрисовки объектов; - роль "слоя" выполняет объект/группа объектов с собственными параметрами (`visible`, `opacity`, `transform`); - реализована свёртка результатов в единый буфер через последовательную композицию. **Реализация:** `src/models/Document.zig`, `src/models/Object.zig`, `src/render/cpu/draw.zig`, `src/render/cpu/pipeline.zig`. ### 3.2 ОЗ.Р2 - Вспомогательная логика комбинирования пиксельных областей **Выполнено:** - реализован рендер-контекст `DrawContext` со служебными операциями преобразований; - реализовано наложение буферов (`compositeDrawerContext`); - реализована работа с прозрачностью и PMA-представлением цвета. **Реализация:** `src/render/cpu/pipeline.zig`, `src/render/cpu/draw.zig`, `src/render/CpuRenderEngine.zig`. ### 3.3 ОЗ.Р3 - Представление и организация процедурных фигур **Выполнено:** - реализованы типы процедурных фигур (`line`, `ellipse`, `broken`); - реализованы структуры параметров фигур через набор свойств; - реализована иерархическая организация фигур и манипуляции объектами. **Реализация:** `src/models/Object.zig`, `src/models/Property.zig`, `src/models/shape/*`, `src/models/Document.zig`. ### 3.4 ОЗ.Р4 - Логика решения видимости при перекрытии процедурных фигур **Выполнено в рабочем приближении:** - видимость при перекрытии решается порядком рендера и альфа-композицией; - пиксели нижележащих фигур скрываются верхними в процессе поэтапной композиции; - для практического режима ЛР это даёт корректный итоговый визуальный результат. **Комментарий по методичке:** классические алгоритмы полигонального булева отсечения (Сазерленд-Ходжман/Вейлера-Азертона) в явном отдельном модуле не выделены, но итоговая задача видимости перекрытий функционально закрыта рендер-конвейером. ### 3.5 ОЗ.Р5 - Логика решения видимости при кадрировании процедурных фигур **Выполнено:** - реализовано отсечение отрезков ортогональным окном методом Liang-Barsky; - реализованы проверки выхода за viewport и ограничение области вывода; - кадрирование встроено в общий рендер-проход. **Реализация:** `src/render/cpu/line.zig`, `src/render/cpu/pipeline.zig`, `src/Canvas.zig`. ### 3.6 ОЗ.Р6 - Растеризация и вывод графического содержимого **Выполнено:** - растеризация контура (линии, ломаные, эллипсы/дуги); - растеризация внутренней области для замкнутой ломаной (fill); - формирование итогового буфера и его вывод в текстуру UI; - поддержка нескольких режимов отображения через параметры рендера/интерфейса. **Реализация:** `src/render/cpu/line.zig`, `src/render/cpu/ellipse.zig`, `src/render/cpu/broken.zig`, `src/render/CpuRenderEngine.zig`, `src/ui/canvas_view.zig`. ### 3.7 ОЗ.Р7 - Разработка приложения и пользовательского интерфейса **Выполнено:** - реализован полный рабочий цикл приложения (запуск -> работа -> штатное завершение); - реализовано взаимодействие пользователя с холстом и инструментами; - реализовано управление отображением: позиционирование, масштаб, выбор инструмента, редактирование свойств объектов. **Реализация:** `src/main.zig`, `src/WindowContext.zig`, `src/Canvas.zig`, `src/ui/*`, `src/toolbar/*`. ### 3.8 ОЗ.Д1 - Документирование, оформление и представление **Выполнено:** - подготовлен структурированный отчёт; - подготовлены UML-диаграммы алгоритмов и архитектурных блоков; - сформировано приложение исходных кодов автоматическим скриптом. **Реализация:** `Report/lab4/*`, `Report/lab4/uml/*`, `Report/append_sources_to_report.py`. ## 4. Выполнение дополнительных задач (максимально полное покрытие) ### 4.1 Группа ДЗ.А - Попиксельная видимость пиксельных областей - **ДЗ.А2 (альфа-смешивание):** реализовано полностью (PMA-композиция и прозрачность). ### 4.2 Группа ДЗ.Б - Видимость процедурных фигур при перекрытии ### 4.3 Группа ДЗ.В - Видимость процедурных фигур при кадрировании - **ДЗ.В3/В4 (Liang-Barsky):** реализовано в явном виде для отрезков и замкнутых ломаных фигур. - **ДЗ.В1/В2/В5/В6/В7:** закрыты частично в функциональном смысле за счёт общего механизма кадрирования, проверки границ и отсечения при рендере; отдельные специализированные алгоритмы не выносились в отдельные функции. ### 4.4 Группа ДЗ.Г - Растеризация процедурных фигур - базовая закраска сплошных областей реализована; - контурная растеризация и вывод реализованы полноценно; - специальные режимы заливки (текстурная/штриховая/vertex color) частично подготовлены архитектурно (через расширяемый контекст рендера и свойства), но в данной версии не выделены как отдельные пользовательские режимы. ### 4.5 Группа ДЗ.Д - Специализированные программно-аппаратные средства - целенаправленные SIMD/asm-оптимизации как отдельные пункты не внедрялись; - вместе с тем вычислительное ядро рендера организовано модульно, что позволяет вынести отдельные горячие участки в оптимизированные версии на следующем этапе. ## 5. Реализованные алгоритмы ЛР4 (итоговый перечень) 1. Композиция иерархических трансформаций (`Transform.compose`). 2. Конвейер координат: local -> world -> canvas -> viewport. 3. Отсечение отрезка ортогональным окном (Liang-Barsky). 4. Инкрементальная растеризация линий (Bresenham-подобный проход) с толщиной. 5. Аналитическая растеризация эллипса и дуги. 6. Растеризация ломаной и замыкание контура. 7. Выделение границы, выбор seed и flood fill (4-связность) для заливки. 8. Альфа-композиция в premultiplied alpha. 9. Рекурсивный обход и рендер дерева объектов документа. ## 6. UML-диаграммы (PlantUML, русский язык) ### 6.1 Общий рабочий цикл ЛР4 `Report/lab4/uml/lr4-main-workflow.puml` ![Общий рабочий цикл ЛР4](uml/lr4-main-workflow.png) ### 6.2 Композиция пиксельных областей и видимость `Report/lab4/uml/pixel-composition-visibility.puml` ![Композиция пиксельных областей и видимость](uml/pixel-composition-visibility.png) ### 6.3 Решение видимости процедурных фигур и кадрирование `Report/lab4/uml/procedural-visibility-clipping.puml` ![Видимость процедурных фигур и кадрирование](uml/procedural-visibility-clipping.png) ### 6.4 Растеризация и вывод графического содержимого `Report/lab4/uml/rasterization-and-output.puml` ![Растеризация и вывод](uml/rasterization-and-output.png) ### 6.5 Основной рабочий цикл приложения и UI `Report/lab4/uml/application-ui-cycle.puml` ![Рабочий цикл приложения и UI](uml/application-ui-cycle.png) ## 7. Вывод В рамках ЛР4 проект `Zivro` оформлен как целостное программное решение, которое покрывает основные требования по организации данных, рендеру, кадрированию, композиции и пользовательскому взаимодействию. Дополнительные задачи представлены в отчёте по принципу максимального покрытия: полностью реализованные пункты выделены явно, а частично реализованные обоснованы через действующие механизмы конвейера рендера и архитектурные заделы проекта.