Welt3D.h 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  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
  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. int ref;
  27. public:
  28. //! Konstructor
  29. __declspec( dllexport ) Welt3D();
  30. //! Destruktor
  31. __declspec( dllexport ) virtual ~Welt3D();
  32. //! Blockiert den zugriff auf das Objekt und wartet gegebenfalls auf den Zugriff
  33. __declspec( dllexport ) void lock();
  34. //! Gibt das Objekt für andere Threads frei
  35. __declspec( dllexport ) void unlock();
  36. //! Fügt der Welt ein Objekt hinzu
  37. //! \param obj Das Objekt, was hinzugefügt werden soll
  38. __declspec( dllexport ) void addZeichnung( Model3D *obj );
  39. //! Entfernt ein Objekt aus der Welt
  40. //! \param obj Das Objekt, das entwernt werden soll (ohne erhöhten reference Counter)
  41. __declspec( dllexport ) void removeZeichnung( Model3D *zObj );
  42. //! Verarbeitet ein Mausereignis
  43. //! \param me Das Mausereignis, das verarbeitet werden soll
  44. __declspec( dllexport ) void doMausEreignis( MausEreignis3D &me );
  45. //! Verarbeitet die vergangene Zeit
  46. //! \param tickval Die zeit in sekunden, die seit dem letzten Aufruf der Funktion vergangen ist
  47. //! \return true, wenn sich das Objekt verändert hat, false sonnst.
  48. __declspec( dllexport ) virtual bool tick( double tickval );
  49. //! brerechnet die Farbe eines Sichtstrahls, der von einem bestimmten punkt aus in eine bestimmte richtung schaut
  50. //! \param point Der ursprung des Strahls,
  51. //! \param dir Die Richtung des Strahls
  52. //! \return Die Farbe des Strahls
  53. __declspec( dllexport ) virtual int traceRay( Vec3< float > &point, Vec3< float > &dir );
  54. //! Gibt einen Iterator zurück, mit dem alle Members aufgezählt werden können
  55. __declspec( dllexport ) Iterator< Model3D * > getMembers();
  56. //! Gibt die Anzahl an Punkt Lichtquellen zurück
  57. __declspec( dllexport ) int getPointLightCount() const;
  58. //! Gibt die Anzahl an Richtungs Lichtquellen zurück
  59. __declspec( dllexport ) int getDiffuseLightCount() const;
  60. //! Kopiert alle Lichtquellen in die Buffer
  61. //! \param zDiffuse der Buffer für die rechtungs Lichtquellen
  62. //! \param zPoints der Buffer für die Punkt Lichtquellen
  63. __declspec( dllexport ) void copyLight( DXBuffer *zDiffuse, DXBuffer *zPoints ) const;
  64. //! Erhöht den Reference Counting Zähler.
  65. //! \return this.
  66. __declspec( dllexport ) Welt3D *getThis();
  67. //! Verringert den Reference Counting Zähler. Wenn der Zähler 0 erreicht, wird das Zeichnung automatisch gelöscht.
  68. //! \return 0.
  69. __declspec( dllexport ) Welt3D *release();
  70. };
  71. }