Welt3D.h 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. #pragma once
  2. #include "Array.h"
  3. #include "Critical.h"
  4. #include "GraphicsApi.h"
  5. #include "Model3DCollection.h"
  6. #include "Vec3.h"
  7. namespace Framework
  8. {
  9. class Zeichnung3D; //! Zeichnung.h
  10. class Render3D; //! Render3D.h
  11. struct MausEreignis3D; //! MausEreignis.h
  12. class Model3D;
  13. class DXBuffer;
  14. class Welt3D;
  15. //! Speichert alle 3D Zeichnungen einer Szene ab
  16. class Welt3D : public Model3DCollection
  17. {
  18. protected:
  19. DiffuseLight* diffuseLights;
  20. RCArray<Model3DCollection> modelCollections;
  21. int diffuseLightCount;
  22. PointLight* pointLights;
  23. int pointLightCount;
  24. private:
  25. RCArray<Model3D>* members;
  26. bool rend;
  27. Critical cs;
  28. public:
  29. //! Konstructor
  30. DLLEXPORT Welt3D();
  31. //! Destruktor
  32. DLLEXPORT virtual ~Welt3D();
  33. //! Blockiert den zugriff auf das Objekt und wartet gegebenfalls auf den
  34. //! Zugriff
  35. DLLEXPORT void lock();
  36. //! Gibt das Objekt für andere Threads frei
  37. DLLEXPORT void unlock();
  38. //! Fügt der Welt ein Objekt hinzu
  39. //! \param obj Das Objekt, was hinzugefügt werden soll
  40. DLLEXPORT void addZeichnung(Model3D* obj);
  41. //! Entfernt ein Objekt aus der Welt
  42. //! \param obj Das Objekt, das entwernt werden soll (ohne erhöhten
  43. //! reference Counter)
  44. DLLEXPORT void removeZeichnung(Model3D* zObj);
  45. //! Fügt der Welt eine Collection von Objekten hinzu
  46. //! \param collection Die Collection, die hinzugefügt werden soll
  47. DLLEXPORT void addCollection(Model3DCollection* collection);
  48. //! removes a collection of models from the world
  49. //! \param zCollection Die Collection die entfernt werden soll
  50. DLLEXPORT void removeCollection(Model3DCollection* zCollection);
  51. //! Verarbeitet ein Mausereignis
  52. //! \param me Das Mausereignis, das verarbeitet werden soll
  53. DLLEXPORT void doMausEreignis(MausEreignis3D& me);
  54. //! Verarbeitet die vergangene Zeit
  55. //! \param tickval Die zeit in sekunden, die seit dem letzten Aufruf der
  56. //! Funktion vergangen ist \return true, wenn sich das Objekt verändert
  57. //! hat, false sonnst.
  58. DLLEXPORT virtual bool tick(double tickval);
  59. //! brerechnet die Farbe eines Sichtstrahls, der von einem bestimmten
  60. //! punkt aus in eine bestimmte richtung schaut \param point Der
  61. //! ursprung des Strahls, \param dir Die Richtung des Strahls \return
  62. //! Die Farbe des Strahls
  63. DLLEXPORT virtual int traceRay(Vec3<float>& point, Vec3<float>& dir);
  64. //! führt eine funktion auf jedem Model aus
  65. DLLEXPORT virtual void forAll(std::function<void(Model3D*)> f) override;
  66. //! führt eine tick funktion auf jedem Model aus
  67. DLLEXPORT virtual bool tick(
  68. std::function<void(Model3D*)> f, double time) override;
  69. //! führt eine render funktion auf jedem Model aus
  70. DLLEXPORT virtual void render(std::function<void(Model3D*)> f) override;
  71. //! Gibt die Anzahl an Punkt Lichtquellen zurück
  72. DLLEXPORT int getPointLightCount() const;
  73. //! Gibt die Anzahl an Richtungs Lichtquellen zurück
  74. DLLEXPORT int getDiffuseLightCount() const;
  75. //! Kopiert alle Lichtquellen in die Buffer
  76. //! \param zDiffuse der Buffer für die rechtungs Lichtquellen
  77. //! \param zPoints der Buffer für die Punkt Lichtquellen
  78. DLLEXPORT void copyLight(DXBuffer* zDiffuse, DXBuffer* zPoints) const;
  79. //! fügt eine neue diffuse lichtquelle hinzu
  80. //! \param light Die neue Lichtquelle
  81. DLLEXPORT void addDiffuseLight(DiffuseLight light);
  82. //! fügt eine neue Punkt lichtquelle hinzu
  83. //! \param light Die neue Lichtquelle
  84. DLLEXPORT void addPointLight(PointLight light);
  85. //! Gibt die Referenz auf eine Diffuse Lichtquelle zurück
  86. //! \param index Der Index der Lichtquelle
  87. DLLEXPORT DiffuseLight& getDiffuseLight(int index) const;
  88. //! Gibt die Referenz auf eine Punkt Lichtquelle zurück
  89. //! \param index Der Index der Lichtquelle
  90. DLLEXPORT PointLight& getPointLight(int index) const;
  91. //! removes a specific fiffuse light from the world
  92. //! \param index the index of the light
  93. DLLEXPORT void removeDiffuseLight(int index);
  94. //! removes a specific point light from the world
  95. //! \param index the index of the light
  96. DLLEXPORT void removePointLight(int index);
  97. };
  98. } // namespace Framework