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 :
RENDERERouUSER_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 lehit. - 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
| Classe | Emplacement | Rôle |
|---|---|---|
Core | srcs/core/Core.* | Orchestration : plugins, scène, rendu, UI, historique, cluster. Implémente ICoreAccess. |
PluginLoader | srcs/core/PluginLoader.* | Implémente IPluginLoader : dlopen/dlclose, résolution de create_plugin/destroy_plugin. |
Scene | srcs/core/scene/Scene.* | Implémentation de IScene : primitives, lumières, matériaux, hiérarchie, BVH. |
SceneParser | srcs/core/scene/SceneParser.* | Lecture d’un fichier JSON en objets de scène. |
SceneRegister | srcs/core/scene/SceneRegister.* | Sérialisation de la scène en JSON. |
SceneObjectBuilder | srcs/core/scene/builder/ | Répartiteur primitive / lumière lors de la construction. |
PrimitiveBuilder | srcs/core/scene/builder/ | Construction concrète des primitives depuis leurs données. |
LightBuilder | srcs/core/scene/builder/ | Construction concrète des lumières depuis leurs données. |
SceneBuilder | srcs/core/scene/builder/ | Agrège caméra + matériaux + objets → Scene. |
PrimitiveFactory | srcs/core/scene/factory/ | Création d’une primitive par défaut selon une chaîne de type. |
LightFactory | srcs/core/scene/factory/ | Création d’une lumière par défaut selon une chaîne de type. |
Camera | srcs/core/scene/camera/ | Caméra perspective (implémente ICamera). |
BVHNode | srcs/core/scene/bvh/ | Nœud de la hiérarchie de volumes englobants (accélération des intersections). |
Material | srcs/common/Material.hpp | Paramètres de matériau (PHONG / PBR) : couleur, spéculaire, réflectivité, IOR, textures… |
MaterialLibrary | srcs/common/MaterialLibrary.hpp | Bibliothèque persistante (~/.raytracer/materials) : save, remove, loadAll, toJson/fromJson. |
ObjParser | srcs/core/obj/ | Import de fichiers Wavefront .obj. |
RenderExporter | srcs/core/utils/ | Export du rendu en PNG (via stb_image). |
FileObserver | srcs/core/utils/ | Surveille le fichier de scène pour rechargement à chaud. |
ClusterModule | srcs/core/cluster/ | Rendu distribué (implémente IClusterModule) : startServer, joinCluster, leaveCluster. |
Types mathématiques & utilitaires
| Type | Emplacement | Rôle |
|---|---|---|
Vector2f, Vector3f, Vector2i, Vector3i | srcs/common/Vector.hpp | Vecteurs 2D/3D flottants et entiers, avec opérateurs, dot, cross, normalize, rotate… |
Matrix | srcs/common/Matrix.hpp | Matrice de transformation. |
Ray | srcs/common/Ray.hpp | Rayon origin/direction avec at(t) = origin + t·direction. |
AABB | srcs/common/AABB.hpp | Boîte englobante alignée sur les axes (min/max, hit()) + BoundingBoxUtils::surrounding_box. |
Color / ColorF | srcs/common/Color.hpp | Couleur entière RGBA 0–255 / couleur flottante RGB (fromColor, toColor). |
Intersection | srcs/common/Intersection.hpp | Enregistrement 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/.