Skip to content

Latest commit

 

History

History
363 lines (314 loc) · 8.83 KB

README.md

File metadata and controls

363 lines (314 loc) · 8.83 KB

Raytracer

Introduction

This is the Raytracer project, an Epitech project from the OOP module (Object Oriented Programming).

The objective is to build a 3D scene with light rays generate beautiful images.

We pushed the idea a little further with an interactive scene that creates, edit and delete primitives, loads objfile, saves image in runtime. See Features.

Screenshots

Requirements

This project is compatible with : Linux, Windows and MacOS.

Be sure to have libconfig++ installed.

Debian/ubuntu install :

sudo apt install libconfig++-dev

Arch install:

sudo pacman -S libconfig

Since ImGui isn't natively supporting SFML, you need to install the following dependencies :

  • glew
  • glfw

For Fedora :

sudo dnf install glew glfw

For Arch :

sudo pacman -S glew glfw

Getting started

First of all you will need to compile the project, for that you can write in your terminal

make

or if you want a way more impressive demo, you can write in your terminal

make bonus

or if you love yourself and want to watch you in our incredible raytracer, you can write in your terminal

make bonusbonus

Note: To change from normal interface to bonus interface or from bonus to normal, you need to apply clean your repository with make fclean

and now you can lauch it with :

./raytracer scenes/config_example.cfg

to have a picture in .ppm. If you want to have it in .png you can do the command

./raytracer && ffmpeg -y -i out.ppm out.png && xdg-open out.png

And if you want to have the interractive mode, you can add the -i option like :

./raytracer -i scenes/config_example.cfg

and if you want to recovered an old scene, you can do the command

./raytracer -i scenes/quicksave.cfg

Config

To have all the information about the config file, you can check the CONFIG.md file.

Documentation

To build the documentation, you can do the command

make doc

and to run it, you can do the command

make rundoc

Bonus

ImGui used with ImGuiSfml to create a GUI in SFML that allows to edit the scene in real time and save it, and more, check the shortcuts!

Keybinds (by default)

Move in the scene

Move in the scene

Key Action
Z Move forward
Q Move left
S Move backward
D Move right
Space bar Move up
Left Shift Move down
U Rotate up
J Rotate down
H Rotate left
K Rotate right
Left Control Sprint

Interact with the scene

Key Action In Minecraft mode
M Switch to Minecraft mode Goes back to normal mode
Left click Destroy minecraft block
Right click Use simple mouse to rotate the camera Place minecraft block
G / Middle click Select primitive at the center of the screen (in bonus mode) Same behavior
R Draw spheres at the reach distance Same behavior
0-9 Change the selected Material of your inventory

Save and quit

Key Action
Escape Exit (and saves your scene in scenes/temp.cfg)
C Save scene to the opened one and exit
X Quick save and exit (in scenes/quick_save.cfg)

Other

Key Action
F2 Take a screenshot (saved in screenshots/171503-.png
F3 Toggle debug tab
Delete Remove selected object (it has to be selected in the GUI)
F Toggle fullscreen
O Reset camera to the loaded position

Note: You can change the keybinds in config/keys.cfg file.

Attention: If you messed up your config, delete it and it will be recreated with default values.

Features

Primitives

  • Sphere
  • Plane
  • Cylinder
  • Cone
  • Limited Cylinder
  • Limited Cone
  • Triangle
  • Cube
  • Torus
  • Tanglecube
  • Objfile (with textures)
  • Mobius strip
  • Fractals

Lights

  • Point light
  • Directional light
  • Ambient light
  • Drop shadows
  • Multiple ambient lights
  • Multiple directional lights
  • Multiple point lights
  • Colored light
  • Phong reflection model
  • Ambient occlusion

Materials

  • Flat color
  • Transparency
  • Refraction
  • Reflection
  • Refraction
  • Texturing from file (on Spheres, Cubes, Triangles and Plane)
  • Texturing from procedural generation of chessboard (with any size and color)
  • Texturing from procedural generation of Perlin noise

Transformations

  • Translation
  • Rotation
  • Scale
  • Scene graph

Scene configuration

  • Add primitives to the scene (including objfile)
  • Set up lightning
  • Set up camera

Bonus

Can configure in real time with ImGui See CONFIG.md

  • Skybox
  • Inventory
  • Cube Primitive
  • Minecraft mode
  • Save scene
  • Cinematic mode
  • Texture camera in bonusbonus

Optimization

  • Space partitioning (bounding boxes)
  • Multithreading
  • Clustering