Welt3D.h 3.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. #pragma once
  2. #include "Critical.h"
  3. #include "Array.h"
  4. #include "Vec3.h"
  5. #include "GraphicsApi.h"
  6. #include "Model3DCollection.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 Zugriff
  34. DLLEXPORT void lock();
  35. //! Gibt das Objekt für andere Threads frei
  36. DLLEXPORT void unlock();
  37. //! Fügt der Welt ein Objekt hinzu
  38. //! \param obj Das Objekt, was hinzugefügt werden soll
  39. DLLEXPORT void addZeichnung( Model3D* obj );
  40. //! Entfernt ein Objekt aus der Welt
  41. //! \param obj Das Objekt, das entwernt werden soll (ohne erhöhten reference Counter)
  42. DLLEXPORT void removeZeichnung( Model3D* zObj );
  43. //! Fügt der Welt eine Collection von Objekten hinzu
  44. //! \param collection Die Collection, die hinzugefügt werden soll
  45. DLLEXPORT void addCollection( Model3DCollection* collection );
  46. //! removes a collection of models from the world
  47. //! \param zCollection Die Collection die entfernt werden soll
  48. DLLEXPORT void removeCollection( Model3DCollection* zCollection );
  49. //! Verarbeitet ein Mausereignis
  50. //! \param me Das Mausereignis, das verarbeitet werden soll
  51. DLLEXPORT void doMausEreignis( MausEreignis3D& me );
  52. //! Verarbeitet die vergangene Zeit
  53. //! \param tickval Die zeit in sekunden, die seit dem letzten Aufruf der Funktion vergangen ist
  54. //! \return true, wenn sich das Objekt verändert hat, false sonnst.
  55. DLLEXPORT virtual bool tick( double tickval );
  56. //! brerechnet die Farbe eines Sichtstrahls, der von einem bestimmten punkt aus in eine bestimmte richtung schaut
  57. //! \param point Der ursprung des Strahls,
  58. //! \param dir Die Richtung des Strahls
  59. //! \return Die Farbe des Strahls
  60. DLLEXPORT virtual int traceRay( Vec3< float >& point, Vec3< float >& dir );
  61. //! führt eine funktion auf jedem Model aus
  62. DLLEXPORT virtual void forAll( std::function<void( Model3D* )> f ) override;
  63. //! Gibt die Anzahl an Punkt Lichtquellen zurück
  64. DLLEXPORT int getPointLightCount() const;
  65. //! Gibt die Anzahl an Richtungs Lichtquellen zurück
  66. DLLEXPORT int getDiffuseLightCount() const;
  67. //! Kopiert alle Lichtquellen in die Buffer
  68. //! \param zDiffuse der Buffer für die rechtungs Lichtquellen
  69. //! \param zPoints der Buffer für die Punkt Lichtquellen
  70. DLLEXPORT void copyLight( DXBuffer* zDiffuse, DXBuffer* zPoints ) const;
  71. //! fügt eine neue diffuse lichtquelle hinzu
  72. //! \param light Die neue Lichtquelle
  73. DLLEXPORT void addDiffuseLight( DiffuseLight light );
  74. //! fügt eine neue Punkt lichtquelle hinzu
  75. //! \param light Die neue Lichtquelle
  76. DLLEXPORT void addPointLight( PointLight light );
  77. //! Gibt die Referenz auf eine Diffuse Lichtquelle zurück
  78. //! \param index Der Index der Lichtquelle
  79. DLLEXPORT DiffuseLight& getDiffuseLight( int index ) const;
  80. //! Gibt die Referenz auf eine Punkt Lichtquelle zurück
  81. //! \param index Der Index der Lichtquelle
  82. DLLEXPORT PointLight& getPointLight( int index ) const;
  83. };
  84. }