Welt3D.h 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  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. class Welt3DIterator : public Model3DIterator
  16. {
  17. private:
  18. Iterator<Model3D*> modelIterator;
  19. Iterator<Model3DCollection*> collectionIterator;
  20. Model3DIterator* currentCollectionIterator;
  21. Model3D* nextModel;
  22. Welt3D* zWelt;
  23. Welt3DIterator( Welt3D* zWelt );
  24. ~Welt3DIterator();
  25. void calculateNext();
  26. public:
  27. Model3D* getNext() override;
  28. bool hasNext() override;
  29. friend Welt3D;
  30. };
  31. //! Speichert alle 3D Zeichnungen einer Szene ab
  32. class Welt3D : public Model3DCollection
  33. {
  34. protected:
  35. DiffuseLight* diffuseLights;
  36. RCArray< Model3DCollection> modelCollections;
  37. int diffuseLightCount;
  38. PointLight* pointLights;
  39. int pointLightCount;
  40. private:
  41. RCArray< Model3D >* members;
  42. bool rend;
  43. Critical cs;
  44. public:
  45. //! Konstructor
  46. DLLEXPORT Welt3D();
  47. //! Destruktor
  48. DLLEXPORT virtual ~Welt3D();
  49. //! Blockiert den zugriff auf das Objekt und wartet gegebenfalls auf den Zugriff
  50. DLLEXPORT void lock();
  51. //! Gibt das Objekt für andere Threads frei
  52. DLLEXPORT void unlock();
  53. //! Fügt der Welt ein Objekt hinzu
  54. //! \param obj Das Objekt, was hinzugefügt werden soll
  55. DLLEXPORT void addZeichnung( Model3D* obj );
  56. //! Entfernt ein Objekt aus der Welt
  57. //! \param obj Das Objekt, das entwernt werden soll (ohne erhöhten reference Counter)
  58. DLLEXPORT void removeZeichnung( Model3D* zObj );
  59. //! Fügt der Welt eine Collection von Objekten hinzu
  60. //! \param collection Die Collection, die hinzugefügt werden soll
  61. DLLEXPORT void addCollection( Model3DCollection* collection );
  62. //! removes a collection of models from the world
  63. //! \param zCollection Die Collection die entfernt werden soll
  64. DLLEXPORT void removeCollection( Model3DCollection* zCollection );
  65. //! Verarbeitet ein Mausereignis
  66. //! \param me Das Mausereignis, das verarbeitet werden soll
  67. DLLEXPORT void doMausEreignis( MausEreignis3D& me );
  68. //! Verarbeitet die vergangene Zeit
  69. //! \param tickval Die zeit in sekunden, die seit dem letzten Aufruf der Funktion vergangen ist
  70. //! \return true, wenn sich das Objekt verändert hat, false sonnst.
  71. DLLEXPORT virtual bool tick( double tickval );
  72. //! brerechnet die Farbe eines Sichtstrahls, der von einem bestimmten punkt aus in eine bestimmte richtung schaut
  73. //! \param point Der ursprung des Strahls,
  74. //! \param dir Die Richtung des Strahls
  75. //! \return Die Farbe des Strahls
  76. DLLEXPORT virtual int traceRay( Vec3< float >& point, Vec3< float >& dir );
  77. //! Gibt einen Iterator zurück, mit dem alle Members aufgezählt werden können
  78. DLLEXPORT Model3DIterator* getIterator() override;
  79. //! Gibt die Anzahl an Punkt Lichtquellen zurück
  80. DLLEXPORT int getPointLightCount() const;
  81. //! Gibt die Anzahl an Richtungs Lichtquellen zurück
  82. DLLEXPORT int getDiffuseLightCount() const;
  83. //! Kopiert alle Lichtquellen in die Buffer
  84. //! \param zDiffuse der Buffer für die rechtungs Lichtquellen
  85. //! \param zPoints der Buffer für die Punkt Lichtquellen
  86. DLLEXPORT void copyLight( DXBuffer* zDiffuse, DXBuffer* zPoints ) const;
  87. //! fügt eine neue diffuse lichtquelle hinzu
  88. //! \param light Die neue Lichtquelle
  89. DLLEXPORT void addDiffuseLight( DiffuseLight light );
  90. //! fügt eine neue Punkt lichtquelle hinzu
  91. //! \param light Die neue Lichtquelle
  92. DLLEXPORT void addPointLight( PointLight light );
  93. //! Gibt die Referenz auf eine Diffuse Lichtquelle zurück
  94. //! \param index Der Index der Lichtquelle
  95. DLLEXPORT DiffuseLight& getDiffuseLight( int index ) const;
  96. //! Gibt die Referenz auf eine Punkt Lichtquelle zurück
  97. //! \param index Der Index der Lichtquelle
  98. DLLEXPORT PointLight& getPointLight( int index ) const;
  99. friend Welt3DIterator;
  100. };
  101. }