12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- #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();
- };
- }
|