Skip to content

API Overview

Core API structure of CUDA Ray Tracer.

Module Structure

ModuleDirectoryDescription
Coreinclude/core/Math primitives, CUDA utilities, random
Geometryinclude/geometry/Primitives, AABB, BVH, hit record
Renderinginclude/rendering/Renderer, camera, materials, kernels
Sceneinclude/scene/Scene container, builders, presets
Imageinclude/image/Tone mapping, PPM output
include/
├── core/
│   ├── vec3.cuh         # 3D vector math
│   ├── ray.cuh          # Ray structure
│   ├── random.cuh       # cuRAND utilities
│   ├── constants.cuh    # Global constants
│   └── cuda_utils.cuh   # Error handling
├── geometry/
│   ├── geometry.cuh     # Sphere, Plane primitives
│   ├── aabb.cuh         # Axis-aligned bounding box
│   ├── bvh.cuh          # BVH builder & traversal
│   └── hit_record.cuh   # Intersection result
├── rendering/
│   ├── camera.cuh       # Camera model
│   ├── kernels.cuh      # CUDA kernels
│   ├── renderer.cuh     # Main renderer
│   ├── phong.cuh        # Blinn-Phong shading
│   ├── material.cuh     # Material system
│   ├── ray_sort.cuh     # Ray sorting
│   └── render_config.cuh # Configuration
├── scene/
│   ├── scene.cuh        # Scene container
│   └── scenes.cuh       # Preset scenes
└── image/
    └── image.cuh        # Output processing

Rendering Pipeline

Quick Start Example

Phong Shading

cpp
#include "renderer.cuh"
#include "scene/scenes.cuh"

int main() {
    // Create scene
    Scene scene = create_demo_scene();
    scene.build_bvh();

    // Configure renderer
    Renderer renderer(800, 600);
    renderer.set_scene(scene);
    renderer.set_mode(RenderMode::Phong);

    // Render
    renderer.render();

    // Output
    renderer.save_ppm("output.ppm");
    return 0;
}

Path Tracing

cpp
#include "renderer.cuh"
#include "scene/scenes.cuh"

int main() {
    Scene scene = create_cornell_box();
    scene.build_bvh();

    Renderer renderer(800, 600);
    renderer.set_scene(scene);
    renderer.set_mode(RenderMode::PathTrace);
    renderer.set_samples(128);

    renderer.render();
    renderer.save_ppm("cornell.ppm");
    return 0;
}

Detailed Documentation

Technical Whitepaper · Built with VitePress