Welt3D.h 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. #pragma once
  2. #include "Critical.h"
  3. #include "Array.h"
  4. #include "Vec3.h"
  5. namespace Framework
  6. {
  7. class Zeichnung3D; //! Zeichnung.h
  8. class Render3D; //! Render3D.h
  9. struct MausEreignis3D; //! MausEreignis.h
  10. class Model3D;
  11. struct DiffuseLight;
  12. struct PointLight;
  13. class DXBuffer;
  14. //! Speichert alle 3D Zeichnungen einer Szene ab
  15. class Welt3D : public virtual ReferenceCounter
  16. {
  17. protected:
  18. DiffuseLight *diffuseLights;
  19. int diffuseLightCount;
  20. PointLight *pointLights;
  21. int pointLightCount;
  22. private:
  23. RCArray< Model3D > *members;
  24. bool rend;
  25. Critical cs;
  26. public:
  27. //! Konstructor
  28. DLLEXPORT Welt3D();
  29. //! Destruktor
  30. DLLEXPORT virtual ~Welt3D();
  31. //! Blockiert den zugriff auf das Objekt und wartet gegebenfalls auf den Zugriff
  32. DLLEXPORT void lock();
  33. //! Gibt das Objekt für andere Threads frei
  34. DLLEXPORT void unlock();
  35. //! Fügt der Welt ein Objekt hinzu
  36. //! \param obj Das Objekt, was hinzugefügt werden soll
  37. DLLEXPORT void addZeichnung( Model3D *obj );
  38. //! Entfernt ein Objekt aus der Welt
  39. //! \param obj Das Objekt, das entwernt werden soll (ohne erhöhten reference Counter)
  40. DLLEXPORT void removeZeichnung( Model3D *zObj );
  41. //! Verarbeitet ein Mausereignis
  42. //! \param me Das Mausereignis, das verarbeitet werden soll
  43. DLLEXPORT void doMausEreignis( MausEreignis3D &me );
  44. //! Verarbeitet die vergangene Zeit
  45. //! \param tickval Die zeit in sekunden, die seit dem letzten Aufruf der Funktion vergangen ist
  46. //! \return true, wenn sich das Objekt verändert hat, false sonnst.
  47. DLLEXPORT virtual bool tick( double tickval );
  48. //! brerechnet die Farbe eines Sichtstrahls, der von einem bestimmten punkt aus in eine bestimmte richtung schaut
  49. //! \param point Der ursprung des Strahls,
  50. //! \param dir Die Richtung des Strahls
  51. //! \return Die Farbe des Strahls
  52. DLLEXPORT virtual int traceRay( Vec3< float > &point, Vec3< float > &dir );
  53. //! Gibt einen Iterator zurück, mit dem alle Members aufgezählt werden können
  54. DLLEXPORT Iterator< Model3D * > getMembers();
  55. //! Gibt die Anzahl an Punkt Lichtquellen zurück
  56. DLLEXPORT int getPointLightCount() const;
  57. //! Gibt die Anzahl an Richtungs Lichtquellen zurück
  58. DLLEXPORT int getDiffuseLightCount() const;
  59. //! Kopiert alle Lichtquellen in die Buffer
  60. //! \param zDiffuse der Buffer für die rechtungs Lichtquellen
  61. //! \param zPoints der Buffer für die Punkt Lichtquellen
  62. DLLEXPORT void copyLight( DXBuffer *zDiffuse, DXBuffer *zPoints ) const;
  63. };
  64. }