# alicebaghunts/raytracer-minirt architecture

> Architecture diagram of the GitHub repository alicebaghunts/raytracer-minirt, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/alicebaghunts/raytracer-minirt
- Repository: https://github.com/alicebaghunts/raytracer-minirt

## Overview

miniRT is a C ray tracer that turns a `.rt` scene into an interactive rendered image. The principal workflow is scene-file loading, validation, scene-object construction and normalization, then camera-ray generation, primitive intersection, shading and pixel display. Rendering is split across threads; documented surface features include checkerboards and bump/texture mapping. The main entry point also wires mouse and keyboard actions, including camera switching and object render-mode selection. README capabilities are retained, but links involving unsampled implementations are limited to documented behavior and visible subsystem paths.

Main entry points: [`source/main.c`](https://github.com/alicebaghunts/raytracer-minirt/blob/main/source/main.c) (Application entry), [`source/ray_tracing/drawing/intersect.c`](https://github.com/alicebaghunts/raytracer-minirt/blob/main/source/ray_tracing/drawing/intersect.c) (Pixel rendering), [`source/initialization/initialization.c`](https://github.com/alicebaghunts/raytracer-minirt/blob/main/source/initialization/initialization.c) (Scene construction), [`source/ray_tracing/thread/thread.c`](https://github.com/alicebaghunts/raytracer-minirt/blob/main/source/ray_tracing/thread/thread.c) (Thread workers)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_scene["Scene setup"]
  node_file_input["Scene file input<br/>[file_handler.c]"]
  node_validation["Scene validation<br/>[validation.c]"]
  node_scene_init["Scene construction<br/>[initialization.c]"]
  node_object_init["Object initialization<br/>[init_cylinder.c]"]
  node_normalization["Vector normalization<br/>[normalize.c]"]
  node_textures_init["Texture loading<br/>[init_texture.c]"]
  node_scene_state["Scene state<br/>[object_types.h]"]
end

subgraph group_render["Ray rendering"]
  node_drawing["Render coordinator<br/>[drawing.c]"]
  node_threads["Thread workers<br/>[thread.c]"]
  node_pixel_render["Pixel rendering<br/>[intersect.c]"]
  node_camera_rays["Camera ray math<br/>[formulas.c]"]
  node_intersections["Primitive intersections<br/>[formulas.c]"]
  node_shading["Lighting and shadows<br/>[shade.c]"]
end

subgraph group_surface["Surface effects"]
  node_checkerboards["Checker patterns"]
  node_bump_texture["Bump and texture<br/>[bump.c]"]
end

subgraph group_display["Display and interaction"]
  node_main["Application entry<br/>[main.c]"]
  node_image["Image buffer<br/>[rendering.h]"]
  node_interaction["Input and selection<br/>[main.c]"]
end

node_user(("User"))
node_scene_file["RT scene"]
node_minilibx["miniLibX"]

node_user -->|"provides"| node_scene_file
node_scene_file -->|"read"| node_file_input
node_main -->|"loads scene"| node_file_input
node_main -->|"validates"| node_validation
node_main -->|"constructs"| node_scene_init
node_main -->|"normalizes"| node_normalization
node_scene_init -->|"dispatches objects"| node_object_init
node_scene_init -->|"populates"| node_scene_state
node_main -->|"loads textures"| node_textures_init
node_main -->|"starts rendering"| node_drawing
node_drawing -->|"starts workers"| node_threads
node_threads -->|"renders pixels"| node_pixel_render
node_pixel_render -->|"computes rays"| node_camera_rays
node_pixel_render -->|"finds hits"| node_intersections
node_pixel_render -->|"shades hits"| node_shading
node_shading -.->|"applies patterns"| node_checkerboards
node_shading -.->|"perturbs surfaces"| node_bump_texture
node_threads -->|"writes pixels"| node_image
node_main -->|"creates window"| node_minilibx
node_image -->|"displays image"| node_minilibx
node_user -->|"sends input"| node_interaction
node_interaction -->|"invokes hooks"| node_main
node_interaction -->|"updates selection"| node_scene_state
node_main -->|"runs event loop"| node_minilibx

click node_main "https://github.com/alicebaghunts/raytracer-minirt/blob/main/source/main.c"
click node_file_input "https://github.com/alicebaghunts/raytracer-minirt/blob/main/source/validation/utils/file_handler.c"
click node_validation "https://github.com/alicebaghunts/raytracer-minirt/blob/main/source/validation/validation.c"
click node_scene_init "https://github.com/alicebaghunts/raytracer-minirt/blob/main/source/initialization/initialization.c"
click node_object_init "https://github.com/alicebaghunts/raytracer-minirt/blob/main/source/initialization/objects/init_cylinder.c"
click node_normalization "https://github.com/alicebaghunts/raytracer-minirt/blob/main/source/initialization/utils/normalize.c"
click node_textures_init "https://github.com/alicebaghunts/raytracer-minirt/blob/main/source/initialization/utils/init_texture.c"
click node_scene_state "https://github.com/alicebaghunts/raytracer-minirt/blob/main/includes/object_types.h"
click node_drawing "https://github.com/alicebaghunts/raytracer-minirt/blob/main/source/ray_tracing/drawing/drawing.c"
click node_threads "https://github.com/alicebaghunts/raytracer-minirt/blob/main/source/ray_tracing/thread/thread.c"
click node_pixel_render "https://github.com/alicebaghunts/raytracer-minirt/blob/main/source/ray_tracing/drawing/intersect.c"
click node_camera_rays "https://github.com/alicebaghunts/raytracer-minirt/blob/main/source/formulas/formulas.c"
click node_intersections "https://github.com/alicebaghunts/raytracer-minirt/blob/main/source/formulas/formulas.c"
click node_shading "https://github.com/alicebaghunts/raytracer-minirt/blob/main/source/ray_tracing/shade/shade.c"
click node_checkerboards "https://github.com/alicebaghunts/raytracer-minirt/blob/main/source/ray_tracing/checkerboard/plane_checkerboard.c"
click node_bump_texture "https://github.com/alicebaghunts/raytracer-minirt/blob/main/source/ray_tracing/bump/bump.c"
click node_image "https://github.com/alicebaghunts/raytracer-minirt/blob/main/includes/rendering.h"
click node_interaction "https://github.com/alicebaghunts/raytracer-minirt/blob/main/source/main.c"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_file_input,node_validation,node_scene_init,node_object_init,node_normalization,node_textures_init,node_scene_state,node_user toneBlue
class node_drawing,node_threads,node_pixel_render,node_camera_rays,node_intersections,node_shading toneAmber
class node_checkerboards,node_bump_texture toneMint
class node_main,node_image,node_interaction toneRose
class node_scene_file,node_minilibx toneIndigo
```

## Components

### Scene setup

- [Scene file input](https://github.com/alicebaghunts/raytracer-minirt/blob/main/source/validation/utils/file_handler.c): `source/validation/utils/file_handler.c`
- [Scene validation](https://github.com/alicebaghunts/raytracer-minirt/blob/main/source/validation/validation.c): `source/validation/validation.c`
- [Scene construction](https://github.com/alicebaghunts/raytracer-minirt/blob/main/source/initialization/initialization.c): `source/initialization/initialization.c`
- [Object initialization](https://github.com/alicebaghunts/raytracer-minirt/blob/main/source/initialization/objects/init_cylinder.c): `source/initialization/objects/init_cylinder.c`
- [Vector normalization](https://github.com/alicebaghunts/raytracer-minirt/blob/main/source/initialization/utils/normalize.c): `source/initialization/utils/normalize.c`
- [Texture loading](https://github.com/alicebaghunts/raytracer-minirt/blob/main/source/initialization/utils/init_texture.c): `source/initialization/utils/init_texture.c`
- [Scene state](https://github.com/alicebaghunts/raytracer-minirt/blob/main/includes/object_types.h): `includes/object_types.h`

### Ray rendering

- [Render coordinator](https://github.com/alicebaghunts/raytracer-minirt/blob/main/source/ray_tracing/drawing/drawing.c): `source/ray_tracing/drawing/drawing.c`
- [Thread workers](https://github.com/alicebaghunts/raytracer-minirt/blob/main/source/ray_tracing/thread/thread.c): `source/ray_tracing/thread/thread.c`
- [Pixel rendering](https://github.com/alicebaghunts/raytracer-minirt/blob/main/source/ray_tracing/drawing/intersect.c): `source/ray_tracing/drawing/intersect.c`
- [Camera ray math](https://github.com/alicebaghunts/raytracer-minirt/blob/main/source/formulas/formulas.c): `source/formulas/formulas.c`
- [Primitive intersections](https://github.com/alicebaghunts/raytracer-minirt/blob/main/source/formulas/formulas.c): `source/formulas/formulas.c`
- [Lighting and shadows](https://github.com/alicebaghunts/raytracer-minirt/blob/main/source/ray_tracing/shade/shade.c): `source/ray_tracing/shade/shade.c`

### Surface effects

- [Checker patterns](https://github.com/alicebaghunts/raytracer-minirt/blob/main/source/ray_tracing/checkerboard/plane_checkerboard.c): `source/ray_tracing/checkerboard/plane_checkerboard.c`
- [Bump and texture](https://github.com/alicebaghunts/raytracer-minirt/blob/main/source/ray_tracing/bump/bump.c): `source/ray_tracing/bump/bump.c`

### Display and interaction

- [Application entry](https://github.com/alicebaghunts/raytracer-minirt/blob/main/source/main.c): `source/main.c`
- [Image buffer](https://github.com/alicebaghunts/raytracer-minirt/blob/main/includes/rendering.h): `includes/rendering.h`
- [Input and selection](https://github.com/alicebaghunts/raytracer-minirt/blob/main/source/main.c): `source/main.c`

### Other components

- **User**
- **RT scene**
- **miniLibX**

## Connections

- User → RT scene: provides
- RT scene → Scene file input: read
- Application entry → Scene file input: loads scene
- Application entry → Scene validation: validates
- Application entry → Scene construction: constructs
- Application entry → Vector normalization: normalizes
- Scene construction → Object initialization: dispatches objects
- Scene construction → Scene state: populates
- Application entry → Texture loading: loads textures
- Application entry → Render coordinator: starts rendering
- Render coordinator → Thread workers: starts workers
- Thread workers → Pixel rendering: renders pixels
- Pixel rendering → Camera ray math: computes rays
- Pixel rendering → Primitive intersections: finds hits
- Pixel rendering → Lighting and shadows: shades hits
- Lighting and shadows → Checker patterns: applies patterns
- Lighting and shadows → Bump and texture: perturbs surfaces
- Thread workers → Image buffer: writes pixels
- Application entry → miniLibX: creates window
- Image buffer → miniLibX: displays image
- User → Input and selection: sends input
- Input and selection → Application entry: invokes hooks
- Input and selection → Scene state: updates selection
- Application entry → miniLibX: runs event loop
