From aea57a190139fdeacd9df006a6f046d9bf47c6fe Mon Sep 17 00:00:00 2001 From: Roman Pytkov Date: Thu, 19 Mar 2026 17:57:45 +0300 Subject: [PATCH] =?UTF-8?q?=D0=BC=D0=B5=D0=BB=D0=BA=D0=B8=D0=B5=20=D0=BF?= =?UTF-8?q?=D1=80=D0=B0=D0=B2=D0=BA=D0=B8=20=D0=B2=20=D0=BE=D1=82=D1=87?= =?UTF-8?q?=D1=91=D1=82=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Report/sample_1.pdf | Bin 1035062 -> 1034979 bytes Report/zivro-open-project-report-with-code.md | 1 - Report/zivro-open-project-report.md | 2 +- src/render/RenderStats.zig | 2 +- 4 files changed, 2 insertions(+), 3 deletions(-) diff --git a/Report/sample_1.pdf b/Report/sample_1.pdf index 28677adc5ac3dffec6af4f6c5c5e7fc1970ed4d5..0cb8e30e2cbafaca668c62b75343ac31b0f2872c 100644 GIT binary patch delta 18164 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 delta 18202 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 GaRC6HMq3a7 diff --git a/Report/zivro-open-project-report-with-code.md b/Report/zivro-open-project-report-with-code.md index a0f9ae2..05ad92e 100644 --- a/Report/zivro-open-project-report-with-code.md +++ b/Report/zivro-open-project-report-with-code.md @@ -102,7 +102,6 @@ ## 6. Математические алгоритмы проекта (подробное текстовое описание) В данном разделе подробно рассмотрены алгоритмы, которые формируют геометрию и цвет в CPU-рендере. -Диаграммы PlantUML будут добавлены отдельным шагом, после фиксации текстовой части. ### 6.1. Иерархические трансформации объектов diff --git a/Report/zivro-open-project-report.md b/Report/zivro-open-project-report.md index e32a0f1..8d7e97e 100644 --- a/Report/zivro-open-project-report.md +++ b/Report/zivro-open-project-report.md @@ -263,7 +263,7 @@ $$ В `broken.zig` ломаная строится как цепочка сегментов `P0->P1->...->Pn`, а при `closed` добавляется `Pn->P0`. -Для корректной заливки применяется двухфазный алгоритм. +Для корректной заливки применяется трёхфазный алгоритм. #### 6.5.1. Фаза 1: сбор пикселей границы diff --git a/src/render/RenderStats.zig b/src/render/RenderStats.zig index 04df7f0..b7118de 100644 --- a/src/render/RenderStats.zig +++ b/src/render/RenderStats.zig @@ -1,3 +1,3 @@ const RenderStats = @This(); -render_time_ns: u64, // Время рендера кадра в микросекундах +render_time_ns: u64, // Время рендера кадра в наносекундах