Raytracer docs 🌐 EN

Accueil / Référence des classes

Référence des classes

Interfaces, classes concrètes et types de base du moteur. Les interfaces (préfixe I…) définissent les contrats et vivent dans srcs/common/ ; les implémentations concrètes vivent dans srcs/core/ et srcs/plugins/. Tout le code appartient au namespace rc. Les signatures ci-dessous sont reprises fidèlement des en-têtes du dépôt.

Chaque interface est un contrat de méthodes virtuelles pures. Une classe est repérée par son chemin d’en-tête à côté de son nom.

Interfaces principales

IPlugin srcs/common/IPlugin.hpp

Contrat de base de tout plugin dynamique (chargé en .so). L’enum PluginType ne contient que RENDERER et USER_INTERFACE.

virtual PluginType getType() const = 0
Retourne le type du plugin : RENDERER ou USER_INTERFACE.

ISceneRenderer srcs/common/ISceneRenderer.hpp

Contrat d’un renderer (hérite de IPlugin). Le rendu produit une structure Render (size_x, size_y, std::vector<Color> pixels).

virtual void renderScene(const IScene &scene) = 0
Rend la scène fournie.
virtual void setPixel(int x, int y, Color color) = 0
Écrit un pixel dans le tampon.
virtual void markSceneDirty()
Signale que la scène a changé (implémentation par défaut vide).
virtual void stopRendering() = 0
Interrompt le rendu en cours.
virtual bool isRendering() const = 0
Indique si un rendu est en cours.
virtual int getCurrentSample() const = 0
Numéro de l’échantillon courant (rendu progressif).
virtual Render getRender() const = 0
Retourne le rendu (dimensions + pixels).
virtual std::string getRendererName() const = 0
Nom du renderer (« Default », « Viewport »…).

IScene srcs/common/scene/IScene.hpp

Conteneur des données de scène (primitives, lumières, matériaux, caméra, hiérarchie) et point d’intersection global via le BVH.

virtual void addPrimitive(IPrimitive *primitive) = 0
Ajoute une primitive.
virtual void addLight(ILight *light) = 0
Ajoute une lumière.
virtual void addDefaultPrimitive(std::string type) = 0
Crée une primitive par défaut à partir d’un type.
virtual void addDefaultLight(std::string type) = 0
Crée une lumière par défaut à partir d’un type.
virtual ISceneObject *addGroup() = 0
Crée un groupe (nœud de hiérarchie).
virtual void reparent(ISceneObject *child, ISceneObject *newParent, int index = -1) = 0
Change le parent d’un objet.
virtual void removeObject(ISceneObject *object) = 0
Supprime un objet.
virtual IPrimitive *convertToMesh(IPrimitive *primitive) = 0
Convertit une primitive en maillage éditable.
virtual Material *getMaterial(const std::string &name) = 0
Récupère un matériau par nom.
virtual Material *createMaterial(const std::string &name) / createMaterial() = 0
Crée un matériau (nommé ou anonyme).
virtual void clear() = 0
Vide la scène.
virtual float getAmbientCoefficient() / getDiffuseCoefficient() const = 0
Coefficients d’éclairage global (+ setters correspondants).
virtual ICamera &getCamera() const = 0
Accès à la caméra.
virtual const std::vector<IPrimitive *> &getPrimitives() const = 0
Liste des primitives.
virtual const std::vector<ILight *> &getLights() const = 0
Liste des lumières.
virtual const std::map<std::string, Material> &getMaterials() const = 0
Table des matériaux.
virtual const std::vector<ISceneObject *> &getRoots() const = 0
Racines de la hiérarchie.
virtual void buildBvh() = 0
(Re)construit la structure d’accélération BVH.
virtual bool intersect(const Ray &ray, float tMin, float tMax, Intersection &hit) const = 0
Teste l’intersection la plus proche dans [tMin, tMax].

ICamera srcs/common/scene/ICamera.hpp

Caméra perspective : paramètres, base orthonormée et génération des rayons primaires.

virtual Vector2i getResolution() const = 0
Résolution du rendu (+ setResolution).
virtual Vector3f getPosition() / getRotation() const = 0
Pose de la caméra (+ setters).
virtual double getFov() const = 0
Champ de vision (+ setFov).
virtual Vector3f getForward() / getRight() const = 0
Vecteurs de base de la caméra.
virtual int getSamplesPerPixel() const = 0
Échantillons par pixel (+ setSamplesPerPixel).
virtual double getPixelSamplesScale() const = 0
Facteur d’accumulation anti-aliasing.
virtual Ray generateRay(int i, int j) const = 0
Génère le rayon primaire du pixel (i, j).

ISceneObject srcs/common/scene/ISceneObject.hpp

Base commune de tout objet de scène (primitive, lumière ou groupe). Porte la transformation (locale et monde), le nom, la visibilité et les liens de hiérarchie parent/enfants. L’enum ObjectType vaut PRIMITIVE, LIGHT ou GROUP.

virtual ObjectType getObjectType() const = 0
Nature de l’objet.
virtual Vector3f getPosition() / getRotation() / getScale() const = 0
Transformation monde (+ setters).
virtual Vector3f getLocalPosition() / getLocalRotation() / getLocalScale() const = 0
Transformation locale (+ setters).
virtual bool isHidden() const = 0
Visibilité (+ setHidden).
virtual std::string getName() / getTypeName() const = 0
Nom d’instance et nom de type (+ setName).
virtual ISceneObject *getParent() const = 0
Parent hiérarchique (+ setParent).
virtual const std::vector<ISceneObject *> &getChildren() const = 0
Enfants (+ addChild, insertChild, removeChild).

IPrimitive srcs/common/scene/IPrimitive.hpp

Contrat de toute surface intersectable (hérite virtuellement de ISceneObject ; getObjectType() renvoie PRIMITIVE).

virtual bool intersect(const Ray &ray, float tMin, float tMax, Intersection &hit) const = 0
Teste l’intersection dans [tMin, tMax] et remplit le hit.
virtual AABB bounding_box() const = 0
Boîte englobante (pour le BVH).
virtual bool isFinite() const = 0
Faux pour un objet infini (ex. un plan).
virtual std::map<std::string, std::pair<std::string, PropertyType>> getProperties() const = 0
Propriétés éditables (nom → valeur textuelle + type).
virtual void setPropertyFloat(const std::string &key, float value) = 0
Modifie une propriété scalaire.
virtual const Material *getMaterial() const = 0
Matériau associé (+ setMaterial).

Types de propriété (enum class PropertyType) : COLOR, VECTOR3F, VECTOR3I, VECTOR2F, VECTOR2I, FLOAT, INT, STRING.

IEditablePrimitive srcs/common/scene/IEditablePrimitive.hpp

Capacité optionnelle : une primitive éditable au sommet (Triangle, Mesh). Elle est découverte à l’exécution via dynamic_cast<IEditablePrimitive*>, ce qui laisse IPrimitive inchangé. Interface indépendante (n’hérite pas de IPrimitive).

virtual std::size_t getVertexCount() const = 0
Nombre de sommets éditables (les sommets soudés/partagés comptent une fois).
virtual Vector3f getVertex(std::size_t index) const = 0
Position monde d’un sommet.
virtual void setVertex(std::size_t index, const Vector3f &worldPos) = 0
Déplace un sommet en coordonnées monde.
virtual void onGeometryChanged() = 0
Notifie que la géométrie a changé (recalcul des normales/boîte).
virtual std::map<std::size_t, Vector3f> getVertexOverrides() const
Surcharges de sommets (défaut : map vide).

ILight srcs/common/scene/ILight.hpp

Contrat d’une source lumineuse (hérite virtuellement de ISceneObject ; getObjectType() renvoie LIGHT). L’enum LightKind vaut POINT, DIRECTIONAL ou UNKNOWN.

virtual LightKind getKind() const = 0
Nature de la lumière.
virtual float getIntensity() const = 0
Intensité (+ setIntensity).
virtual ColorF getColorF() const = 0
Couleur flottante (+ setColorF).
bool isHidden() const override = 0 / void setHidden(bool) override = 0
Visibilité (redéclarée pure).

IPluginLoader srcs/common/IPluginLoader.hpp

Contrat du chargeur de plugins. Le type imbriqué PluginHandle regroupe le handle dlopen, l’instance IPlugin* et le pointeur de destruction.

virtual bool load(const std::string &path) = 0
Charge un plugin .so.
virtual void unloadAll() = 0
Décharge tous les plugins.
virtual const std::vector<PluginHandle> &getPlugins() const = 0
Tous les plugins chargés.
virtual const std::vector<PluginHandle> getPlugins(PluginType pluginType) const = 0
Plugins filtrés par type.

ICoreAccess srcs/common/ICoreAccess.hpp

Façade que le cœur expose aux plugins : gestion de scène, accès aux renderers, au chargeur de plugins, au module cluster et à l’historique d’annulation. L’enum CoreState vaut INITIALIZING, LOADING_SCENE, RENDERING, READY, EXITING.

virtual void clearScene() = 0
Vide la scène courante.
virtual void loadScene(const std::string &scene_path) = 0
Charge une scène (+ loadNewScene, saveScene).
virtual ISceneRenderer *getRenderer() / getViewportRenderer() const = 0
Renderer principal et renderer de viewport.
virtual IPluginLoader *getPluginLoader() const = 0
Accès au chargeur de plugins.
virtual IClusterModule *getClusterModule() const = 0
Accès au module de rendu en cluster.
virtual std::string getCurrentScenePath() = 0
Chemin de la scène courante.
virtual IScene *getScene() const = 0
Scène courante.
virtual CoreState getState() const = 0
État interne du cœur.
virtual void requestRender() / stop() = 0
Déclenche / arrête un rendu.
virtual void historyReset() / historyCapture() / historyUndo() / historyRedo() = 0
Gestion de l’historique (annuler/rétablir).

Classes principales

ClasseEmplacementRôle
Coresrcs/core/Core.*Orchestration : plugins, scène, rendu, UI, historique, cluster. Implémente ICoreAccess.
PluginLoadersrcs/core/PluginLoader.*Implémente IPluginLoader : dlopen/dlclose, résolution de create_plugin/destroy_plugin.
Scenesrcs/core/scene/Scene.*Implémentation de IScene : primitives, lumières, matériaux, hiérarchie, BVH.
SceneParsersrcs/core/scene/SceneParser.*Lecture d’un fichier JSON en objets de scène.
SceneRegistersrcs/core/scene/SceneRegister.*Sérialisation de la scène en JSON.
SceneObjectBuildersrcs/core/scene/builder/Répartiteur primitive / lumière lors de la construction.
PrimitiveBuildersrcs/core/scene/builder/Construction concrète des primitives depuis leurs données.
LightBuildersrcs/core/scene/builder/Construction concrète des lumières depuis leurs données.
SceneBuildersrcs/core/scene/builder/Agrège caméra + matériaux + objets → Scene.
PrimitiveFactorysrcs/core/scene/factory/Création d’une primitive par défaut selon une chaîne de type.
LightFactorysrcs/core/scene/factory/Création d’une lumière par défaut selon une chaîne de type.
Camerasrcs/core/scene/camera/Caméra perspective (implémente ICamera).
BVHNodesrcs/core/scene/bvh/Nœud de la hiérarchie de volumes englobants (accélération des intersections).
Materialsrcs/common/Material.hppParamètres de matériau (PHONG / PBR) : couleur, spéculaire, réflectivité, IOR, textures…
MaterialLibrarysrcs/common/MaterialLibrary.hppBibliothèque persistante (~/.raytracer/materials) : save, remove, loadAll, toJson/fromJson.
ObjParsersrcs/core/obj/Import de fichiers Wavefront .obj.
RenderExportersrcs/core/utils/Export du rendu en PNG (via stb_image).
FileObserversrcs/core/utils/Surveille le fichier de scène pour rechargement à chaud.
ClusterModulesrcs/core/cluster/Rendu distribué (implémente IClusterModule) : startServer, joinCluster, leaveCluster.

Types mathématiques & utilitaires

TypeEmplacementRôle
Vector2f, Vector3f, Vector2i, Vector3isrcs/common/Vector.hppVecteurs 2D/3D flottants et entiers, avec opérateurs, dot, cross, normalize, rotate
Matrixsrcs/common/Matrix.hppMatrice de transformation.
Raysrcs/common/Ray.hppRayon origin/direction avec at(t) = origin + t·direction.
AABBsrcs/common/AABB.hppBoîte englobante alignée sur les axes (min/max, hit()) + BoundingBoxUtils::surrounding_box.
Color / ColorFsrcs/common/Color.hppCouleur entière RGBA 0–255 / couleur flottante RGB (fromColor, toColor).
Intersectionsrcs/common/Intersection.hppEnregistrement d’un impact : t, point, normal, front_face, uv, material, primitive.

Les signatures ci-dessus reprennent fidèlement les en-têtes d’interface du dépôt (namespace rc). Pour les détails d’implémentation, se reporter aux fichiers correspondants sous srcs/ et à la documentation Markdown du dossier docs/.