Skip to content

Project Structure RU

Yahasi edited this page Jul 10, 2026 · 3 revisions

🌐 English · Русский

← Самотесты · Главная →

Структура проекта

В решении три проекта. Жёсткое архитектурное правило держит движок без зависимостей: весь код GPU / ILGPU живёт в отдельном проекте.

Три проекта

  • Nova3DVisualiser/движок (библиотека): векторная математика, фигуры, трассировка лучей, конвейер цветного освещения, truecolor-вывод в консоль, BVH, загрузка OBJ/мешей, сеть, логирование. Без зависимостей — ни ILGPU, ни UI-тулкита, ни сторонних пакетов.
  • Nova3DVisualiser.Gpu/ — опциональный GPU-рендерер (зависит от движка + ILGPU). Держит тяжёлую GPU-зависимость вне движка; содержит GpuScreen, ядро трассировки NVIDIA/CUDA и загрузку плоского снимка сцены. См. GPU-рендерер.
  • SampleGame/ — запускаемое приложение: мастер настройки, система миров, встроенный редактор сцены, сетевой хост, библиотеки ассетов (меши/текстуры), локальное хранилище профилей-никнеймов (UserProfiles) и генератор мира Test Lab (TestLab, запуск через -- maketestworld).

Ключевые папки движка (Nova3DVisualiser/)

Папка Содержимое
AbstractClass/ Базовые абстракции — напр. Light (система множественного света).
Shape/ Геометрия — треугольники, сферы, меши, BVH.
Structure/ Типы-значения — Rgb24, Rgba32, Texture, снимок сцены и т.д.
Implementation/ Конкретные рендереры — ConsoleScreenAsync (truecolor diff-рендерер).
StaticClass/ Хелперы — конвертация цвета, математика.
Network/ Ядро TCP-сети.
Logging/ Логирование в файл с отметками времени.
Interfaces/, UI/ Интерфейсы движка и консольные UI-примитивы.

Ключевые папки приложения (SampleGame/)

Папка Содержимое
WizardUi/ Консольный UI-тулкит мастера настройки (клавиатура + мышь, без внешней UI-библиотеки) — diff-рендерер, виджеты, компоновка/фокус и поток мастера. Защищён uitest.
WorldSystem/ Модель мира (WorldConfig и родственники) — графика / платформа / объекты / свет / физика.
Physics/ Импульсный решатель твёрдых тел (RigidBody / Contact / ImpulseWorld), шарниры (Joint / JointBuilder) и коллизия выпуклых оболочек (ConvexHull / Gjk), плюс извлечённые чистые математические хелперы. См. Физика.
TextureIO/ Декодер PNG и кэш загрузчика текстур (отдельно от папки ассетов textures/). См. Текстуры.
Scenes/ Активная сцена PriviewNetworkScene, разбитая на partial-class файлы по ответственности, плюс математика камеры.
NetworkPackets/ Типы пакетов для синхронизации мира / физики / текстур и пакет player-info (список никнеймов).
models/ Библиотека мешей .obj.
textures/ Библиотека текстур .png.
worlds/ Сохранённые миры (<name>.json).
received/ Ассеты, полученные с сервера (меши, текстуры).
logs/ Логи запусков с отметками времени.

Проверка

Всё это защищено пакетом headless-самотестов (физика, синхронизация мира, редактор, текстуры и паритет CPU↔GPU). Правило «движок без зависимостей» обеспечивается тем, что каждая ссылка на GPU/ILGPU держится в Nova3DVisualiser.Gpu/.

Clone this wiki locally