Skip to content

Project Structure

Yahasi edited this page Jul 10, 2026 · 3 revisions

🌐 English · Русский

← Self-Tests · Home →

Project Structure

The solution has three projects. A hard architecture rule keeps the engine dependency-free: all GPU / ILGPU code lives in a separate project.

The three projects

  • Nova3DVisualiser/ — the engine (library): vector math, shapes, raytracing, the colored-lighting pipeline, truecolor screen output, BVH, OBJ/mesh loading, networking, logging. It is dependency-free — no ILGPU, no UI toolkit, no third-party packages.
  • Nova3DVisualiser.Gpu/ — the optional GPU renderer (depends on the engine + ILGPU). Keeps the heavy GPU dependency out of the engine; provides GpuScreen, the NVIDIA/CUDA raytracing kernel, and the flat scene-snapshot upload. See GPU Renderer.
  • SampleGame/ — the runnable application: the setup wizard, the world system, the in-scene editor, the networking host, and the mesh/texture asset libraries.

Key engine folders (Nova3DVisualiser/)

Folder Contents
AbstractClass/ Core abstractions — e.g. Light (the multi-light system).
Shape/ Geometry — triangles, spheres, meshes, BVH.
Structure/ Value types — Rgb24, Rgba32, Texture, the scene snapshot, etc.
Implementation/ Concrete renderers — ConsoleScreenAsync (truecolor diff renderer).
StaticClass/ Helpers — colour conversion, math.
Network/ The TCP networking core.
Logging/ Timestamped file logging.
Interfaces/, UI/ Engine interfaces and console UI primitives.

Key app folders (SampleGame/)

Folder Contents
WizardUi/ The setup-wizard console-UI toolkit (keyboard + mouse, no external UI library) — the diff renderer, widgets, layout/focus, and the wizard flow. Guarded by uitest.
WorldSystem/ The world model (WorldConfig and friends) — graphics / platform / objects / lights / physics.
Physics/ The impulse-based rigid-body solver (RigidBody / Contact / ImpulseWorld), the joints (Joint / JointBuilder), and convex-hull collision (ConvexHull / Gjk), plus the extracted pure math helpers. See Physics.
TextureIO/ The PNG decoder and texture-loader cache (kept separate from the textures/ asset folder). See Textures.
Scenes/ The active scene PriviewNetworkScene, split across per-responsibility partial-class files, plus camera math.
NetworkPackets/ The packet types for world / physics / texture sync.
models/ The .obj mesh library.
textures/ The .png texture library.
worlds/ The saved worlds (<name>.json).
received/ Assets streamed from a server (meshes, textures).
logs/ Timestamped run logs.

Verification

The whole thing is guarded by a headless self-test suite (physics, world sync, editor, textures, and CPU↔GPU parity). The engine's dependency-free rule is enforced by keeping every GPU/ILGPU reference in Nova3DVisualiser.Gpu/.

Clone this wiki locally