Bonjour
Est-ce que vous connaissez le modèle de programmation "Component-based programming" ? Voici un lien très intéressant sur le sujet Component-based game design
Je me demandais si on pouvais adapter ce modèle dans le développement d'un moteur 3D par exemple pour la gestion d'un graphe de scène. On aurait des components de ce genre
Et pour le graphe de scène on pourrait avoir ce genre d'acteurs :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 class Component { public: virtual ~Component(); virtual void Initialize() = 0; virtual void Update() = 0; virtual void Shutdown() = 0; }; class MeshComponent : public Component { public: virtual ~MeshComponent(); virtual void Initialize(); virtual void Update(); virtual void Shutdown(); void SetMeshData(MeshData* pMesh); private: MeshData* m_pMesh; }; class LightComponent : public Component { public: virtual ~LightComponent(); virtual void Initialize(); virtual void Update(); virtual void Shutdown(); void SetLightData(LightData* pLight); private: LightData* m_pLight; };
On pourrait ainsi construire facilement notre graphe de scène et créer nos propres acteurs (rigidbody, particules,...)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 class Actor : public Spatial { public: virtual ~Actor(); template<class T> T* AddComponent<T>(); void RemoveComponent(Component* pComponent); void RemoveAllComponents(); template<class T> T* GetComponent<T>(); void UpdateComponents(float dt); protected: std::vector<Component*> m_vComponents; }; class MeshActor : public Actor { public; MeshActor (MeshData* pMesh) { MeshComponent* pMeshComponent = this.AddComponent<MeshComponent>(); pMeshComponent->SetMeshData( pMesh ); } }; class LightActor: public Actor { public; LightActor(LightData* pLight) { LightComponent* pLightComponent = this.AddComponent<LightComponent>(); pLightComponent ->SetLightData( pLight); } };
Kromagg
Partager