Домашни > Време е да помислите за проектите си! > Решения > Решението на Николай Георгиев

Резултати
0 точки от тестове
4 точки от учител

4 точки общо

0 успешни теста
0 неуспешни теста
Код

 1"""
 2[Title/Звание]
 3
 4RastPy — Софтуерен растеризатор в Python
 5
 6[Description/Обрисовка]
 7
 8RastPy е софтуерен 3D растеризатор, написан изцяло на Python, който зарежда
 93D модели от .obj файлове и ги рендерира като 2D изображения. Проектът
10имплементира целия класически растеризационен pipeline — от трансформации
11на върховете до z-буфер и shading — без да използва GPU или OpenGL,
12разчитайки единствено на NumPy за векторните операции и Pillow за изходния файл.
13
14[Functionalities/Надарености]
15
16Потребителят зарежда .obj файл чрез аргумент на командния ред или конфигурационен файл.
17Програмата парсва .obj файла и извлича върховете и триъгълниците на модела.
18Потребителят задава позиция на камерата, посока на гледане и ъгъл на видимост (FOV).
19Потребителят задава позиция и цвят на точков източник на светлина.
20Програмата прилага Model/View/Projection матрични трансформации върху всеки връх чрез NumPy.
21Програмата растеризира всеки триъгълник — определя кои пиксели попадат в него
22чрез барицентрични координати.
23Програмата поддържа z-буфер за коректно наслагване на припокриващи се обекти.
24Програмата изчислява flat shading на база нормалата на всеки триъгълник и посоката на светлината.
25(Разширение - ако сесията не ме приключи) Програмата поддържа Gouraud shading чрез интерполация на нормалите по върховете.
26Готовото изображение се записва като PNG файл чрез Pillow.
27
28[Milestones/Възлови точки]
29
301. .obj парсър — зареждане на върхове (v) и лица (f) от файл.
312. Математически модул — матрици за трансформация (translation, rotation, scale),
32   перспективна проекция, барицентрични координати, нормали на триъгълници.
333. Растеризатор — за всеки триъгълник определя обхващащия правоъгълник (bounding box),
34   итерира пикселите и проверява принадлежност.
354. Z-буфер — структура, която пази най-близката дълбочина за всеки пиксел
36   и отхвърля скритите фрагменти.
375. Shading модул — flat shading (един цвят на триъгълник);
38   (разширение) Gouraud shading с интерполация.
396. Изходен модул — запис на финалния пиксел-буфер като PNG чрез Pillow.
407. Конфигурационен интерфейс — четене на параметри (камера, светлина, входен файл)
41   от командния ред или JSON конфигурационен файл.
42
43[Estimate in man-hours/Времеоценка в човекочасове]
44
45~45 часа
46
47Разбивка по milestones:
48- да разбера как работи rasterization: 5-6ч
49- .obj парсър: 3ч
50- Математически модул: 8ч
51- Растеризатор + z-буфер: 10ч
52- Shading модул: 6ч
53- Изходен модул: 2ч
54- Конфигурационен интерфейс: 3ч
55- Тестове: 5ч
56
57[Usage of technologies/Потребление на технологии]
58
59- numpy — матрични операции, векторна математика, пиксел-буфер
60- Pillow (PIL) — запис на изходното изображение като PNG
61- pytest — unit тестове
62- библиотека за парсване на JSON 
63"""


----------------------------------------------------------------------
Ran 0 tests in 0.000s

NO TESTS RAN

Дискусия
Виктор Бечев
10.05.2026 18:53

Звучи супер. Ще ми е интересно как ще имплементираш много от нещата.
Николай Георгиев
06.05.2026 16:14

всъщност може .obj файл + конфигурационният файл да са в един JSON файл
История
Това решение има само една версия.