Welt3D.h 3.3 KB

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