#pragma once #include "Critical.h" #include "Array.h" #include "Vec3.h" namespace Framework { class Zeichnung3D; //! Zeichnung.h class Render3D; //! Render3D.h struct MausEreignis3D; //! MausEreignis.h class Model3D; struct DiffuseLight; struct PointLight; class DXBuffer; //! Speichert alle 3D Zeichnungen einer Szene ab class Welt3D { protected: DiffuseLight *diffuseLights; int diffuseLightCount; PointLight *pointLights; int pointLightCount; private: RCArray< Model3D > *members; bool rend; Critical cs; int ref; public: //! Konstructor __declspec( dllexport ) Welt3D(); //! Destruktor __declspec( dllexport ) virtual ~Welt3D(); //! Blockiert den zugriff auf das Objekt und wartet gegebenfalls auf den Zugriff __declspec( dllexport ) void lock(); //! Gibt das Objekt für andere Threads frei __declspec( dllexport ) void unlock(); //! Fügt der Welt ein Objekt hinzu //! \param obj Das Objekt, was hinzugefügt werden soll __declspec( dllexport ) void addZeichnung( Model3D *obj ); //! Entfernt ein Objekt aus der Welt //! \param obj Das Objekt, das entwernt werden soll (ohne erhöhten reference Counter) __declspec( dllexport ) void removeZeichnung( Model3D *zObj ); //! Verarbeitet ein Mausereignis //! \param me Das Mausereignis, das verarbeitet werden soll __declspec( dllexport ) void doMausEreignis( MausEreignis3D &me ); //! Verarbeitet die vergangene Zeit //! \param tickval Die zeit in sekunden, die seit dem letzten Aufruf der Funktion vergangen ist //! \return true, wenn sich das Objekt verändert hat, false sonnst. __declspec( dllexport ) virtual bool tick( double tickval ); //! brerechnet die Farbe eines Sichtstrahls, der von einem bestimmten punkt aus in eine bestimmte richtung schaut //! \param point Der ursprung des Strahls, //! \param dir Die Richtung des Strahls //! \return Die Farbe des Strahls __declspec( dllexport ) virtual int traceRay( Vec3< float > &point, Vec3< float > &dir ); //! Gibt einen Iterator zurück, mit dem alle Members aufgezählt werden können __declspec( dllexport ) Iterator< Model3D * > getMembers(); //! Gibt die Anzahl an Punkt Lichtquellen zurück __declspec( dllexport ) int getPointLightCount() const; //! Gibt die Anzahl an Richtungs Lichtquellen zurück __declspec( dllexport ) int getDiffuseLightCount() const; //! Kopiert alle Lichtquellen in die Buffer //! \param zDiffuse der Buffer für die rechtungs Lichtquellen //! \param zPoints der Buffer für die Punkt Lichtquellen __declspec( dllexport ) void copyLight( DXBuffer *zDiffuse, DXBuffer *zPoints ) const; //! Erhöht den Reference Counting Zähler. //! \return this. __declspec( dllexport ) Welt3D *getThis(); //! Verringert den Reference Counting Zähler. Wenn der Zähler 0 erreicht, wird das Zeichnung automatisch gelöscht. //! \return 0. __declspec( dllexport ) Welt3D *release(); }; }