Files
Zivro/Report/lab4/zivro-lab4-report.md

14 KiB
Raw Permalink Blame History

Лабораторная работа 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 Группа ДЗ.Д - Специализированные программно-аппаратные средства

  • ДЗ.Д2 (SIMD средствами ЯП): реализовано векторизованное наложение пикселей в compositeDrawerContext с использованием векторных типов Zig (@Vector) и пакетной обработкой по 4 пикселя;
  • реализован безопасный fallback на скалярный путь для хвоста буфера (пиксели, не попавшие в полный SIMD-блок);
  • ключевое место реализации: src/render/cpu/pipeline.zig (функция compositeDrawerContext);

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. Рекурсивный обход и рендер дерева объектов документа.
  10. SIMD-ускорение композиции пикселей в compositeDrawerContext (@Vector, пакетная обработка RGBA).

6. UML-диаграммы (PlantUML, русский язык)

6.1 Общий рабочий цикл ЛР4

Report/lab4/uml/lr4-main-workflow.puml

Общий рабочий цикл ЛР4

6.2 Композиция пиксельных областей и видимость

Report/lab4/uml/pixel-composition-visibility.puml

Композиция пиксельных областей и видимость

6.3 Решение видимости процедурных фигур и кадрирование

Report/lab4/uml/procedural-visibility-clipping.puml

Видимость процедурных фигур и кадрирование

6.4 Растеризация и вывод графического содержимого

Report/lab4/uml/rasterization-and-output.puml

Растеризация и вывод

6.5 Основной рабочий цикл приложения и UI

Report/lab4/uml/application-ui-cycle.puml

Рабочий цикл приложения и UI

7. Вывод

В рамках ЛР4 проект Zivro оформлен как целостное программное решение, которое покрывает основные требования по организации данных, рендеру, кадрированию, композиции и пользовательскому взаимодействию.

Дополнительные задачи представлены в отчёте по принципу максимального покрытия: полностью реализованные пункты выделены явно, а частично реализованные обоснованы через действующие механизмы конвейера рендера и архитектурные заделы проекта.