nuclear@0: #ifndef _3DSCENE_H_ nuclear@0: #define _3DSCENE_H_ nuclear@0: nuclear@0: #include nuclear@0: #include "3dengine.h" nuclear@0: #include "camera.h" nuclear@0: #include "lights.h" nuclear@0: #include "objects.h" nuclear@0: #include "curves.h" nuclear@0: nuclear@0: struct ShadowVolume { nuclear@0: TriMesh *shadow_mesh; nuclear@0: const Light *light; nuclear@0: }; nuclear@0: nuclear@0: class Scene { nuclear@0: private: nuclear@0: GraphicsContext *gc; nuclear@0: nuclear@0: Light *lights[8]; nuclear@0: std::list cameras; nuclear@0: std::list objects; nuclear@0: std::list StaticShadowVolumes; nuclear@0: std::list curves; nuclear@0: bool ManageData; nuclear@0: nuclear@0: Camera *ActiveCamera; nuclear@0: nuclear@0: bool Shadows; nuclear@0: bool LightHalos; nuclear@0: float HaloSize; nuclear@0: nuclear@0: Color AmbientLight; nuclear@0: nuclear@0: bool UseFog; nuclear@0: Color FogColor; nuclear@0: float NearFogRange, FarFogRange; nuclear@0: nuclear@0: public: nuclear@0: nuclear@0: Scene(GraphicsContext *gc = 0); nuclear@0: ~Scene(); nuclear@0: nuclear@0: void SetGraphicsContext(GraphicsContext *gc); nuclear@0: nuclear@0: void AddCamera(Camera *cam); nuclear@0: void AddLight(Light *light); nuclear@0: void AddObject(Object *obj); nuclear@0: void AddStaticShadowVolume(TriMesh *mesh, const Light *light); nuclear@0: void AddCurve(Curve *curve); nuclear@0: nuclear@0: void RemoveObject(const Object *obj); nuclear@0: void RemoveLight(const Light *light); nuclear@0: nuclear@0: Camera *GetCamera(const char *name); nuclear@0: Light *GetLight(const char *name); nuclear@0: Object *GetObject(const char *name); nuclear@0: Curve *GetCurve(const char *name); nuclear@0: nuclear@0: std::list *GetObjectsList(); nuclear@0: nuclear@0: void SetActiveCamera(Camera *cam); nuclear@0: Camera *GetActiveCamera() const; nuclear@0: nuclear@0: void SetShadows(bool enable); nuclear@0: void SetHaloDrawing(bool enable); nuclear@0: void SetHaloSize(float size); nuclear@0: void SetAmbientLight(Color ambient); nuclear@0: Color GetAmbientLight() const; nuclear@0: void SetFog(bool enable, Color FogColor = Color(0l), float Near = 0.0f, float Far = 1000.0f); nuclear@0: nuclear@0: // render states nuclear@0: void SetupLights() const; nuclear@0: nuclear@0: void RenderShadows() const; nuclear@0: void Render() const; nuclear@0: }; nuclear@0: nuclear@0: nuclear@0: nuclear@0: #endif // _3DSCENE_H_