Giter Site home page Giter Site logo

ray-tracer's Introduction

Ray-Tracer

The Ray-tracer is a project for ENSTA Course IN204 developped by Clément Laroudie and Antoine Domingues. It will continue to be improved even after the final presentation.

Example of scene

Project description

Our Rendering Engine is able to render a scene composed of various 3D objects that can have a range of materials and colours.

The project exports the image to a .ppm file initially, for simplicity.

Requirement

  • The ray-tracer generates images in ppm format. If you do not have applications that can read this file format, you can use an online viewer/converter. We have chosen to use the application for linux ImageMagick (also available for Windows) for its simplicity of use.
  • The project has been built with CMake.

Create project

You can simply use the make command to build the project and run the ray-tracer with the default configuration. Other Makefile commands are available for simplicity:

  • all: Build the project, run the programme and convert image to png.
  • init: Clean folders and build the project
  • start: Starts the program with the default settings
  • build: Initialise cmake and build the project

You can convert the programme result in a format supported by ImageMagick with the following command : make png (Exemple pour le format png)

If you want to start the project manually, type the following command :

build/ray-tracer apps/config.json

Configuration

Rendering can be configured from Json files :

  • A config.json file for the rendering parameters.
  • A scene.json file that represents the scene.

Only the config.json file may be passed to the program as a parameter.

Details of the parameters are detailled here.

Development

We use the clang-format formatter.

Editor must be configured to work with cmake. (with >CMake: Configure for VSCode with the CMake tools extension).

Project has been configured to be developped using clangd or intellisense linter.

ray-tracer's People

Contributors

toniodo avatar clementlrd avatar

Stargazers

 avatar

Watchers

 avatar

ray-tracer's Issues

Camera

change screesize to int

[Json] Object Generator

  • Object range generator
    Generate object from json macro. (min, max, type, step ?)
    need an extra loop when generating the scene.
  • random value generator (in a range)

Multithreading

Mettre en place du multithreading pour le lancé de rayons pour le rendre plus rapide / efficace.

Fix cuboid rendering

Le rendu du cuboid fait des faces noires lorsqu'il est rendu avec un angle incident.

[Objects] Add cylinder

  • Cylinder is defined by a surface with boudaries and a direction
    • An update in surface abstract class may be required

Args

Permettre l'ajout d'arguments au programme, notamment pour les arguments de debug et les noms de fichiers

Camera

  • orientable : utiliser un vecteur normal
  • pivoter l'écran pas uniquement autour de la verticale
  • Utiliser la distance focale !
  • focus blur ?

Bug scanline display

Le multithreading a introduit un bug d'affichage graphique. Il peut être bien de revoir au passage la manière dont on note la progression

[Makefile] Fix bugs

  • Fix make png when cleaning render folder before
    When cleaning render folder before generating image, the $(IMG) variable seems to keep the value with no images.ppm

  • Fixer les prérequis qui se rechargent alors qu'ils existent déjà

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.