Kam3D.h 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. #pragma once
  2. #include "Mat4.h"
  3. #include "Punkt.h"
  4. #include "Zeichnung3D.h"
  5. //! DirectX 11 Types
  6. struct D3D11_VIEWPORT;
  7. namespace Framework
  8. {
  9. struct MausEreignis; //! MausEreignis.h
  10. class Render3D; //! Render3D.h
  11. class Welt3D; //! Welt3D.h
  12. struct ViewPort
  13. {
  14. float x;
  15. float y;
  16. float width;
  17. float height;
  18. float front;
  19. float back;
  20. };
  21. //! Eine 3d Kamera, die einen Ausschnitt einer 3D Welt in einen bestimmten
  22. //! Teil des Bildschirms zeichnet
  23. class Kam3D : public virtual Framework::ReferenceCounter
  24. {
  25. public:
  26. class Style
  27. {
  28. public:
  29. static const __int64 Movable = 0x1;
  30. static const __int64 Rotatable = 0x2;
  31. static const __int64 Zoomable = 0x4;
  32. static const __int64 Tick = 0x8;
  33. };
  34. protected:
  35. bool rend;
  36. private:
  37. Mat4<float> view;
  38. Mat4<float> proj;
  39. float openingAngle;
  40. float minZ;
  41. float maxZ;
  42. Vec3<float> pos;
  43. float rotX;
  44. float rotY;
  45. float rotZ;
  46. ViewPort viewport;
  47. Welt3D* welt;
  48. __int64 style;
  49. float speed;
  50. //! Aktualisiert die view und projektion matrizen
  51. void updateMatrix();
  52. public:
  53. //! Konstruktor
  54. DLLEXPORT Kam3D();
  55. //! Destruktor
  56. DLLEXPORT ~Kam3D();
  57. //! Setzt die Position der Kamera in der 3D Welt
  58. DLLEXPORT void setPosition(Vec3<float> pos);
  59. //! zoomt heran, indem sich die Kamera etwas auf das Blickziel zubewegt
  60. //! \param val Die länge der Strecke um die sich die Kamera bewegen soll
  61. DLLEXPORT void scrollIn(float val);
  62. //! zppmt heraus, indem sich die Kamera etwas von dem Blockziel entfernt
  63. //! \param val Die länge der Strecke um die sich die Kamera bewegen soll
  64. DLLEXPORT void scrollOut(float val);
  65. //! Richtet die Kamera so aus, dass sie genau auf einen bestimmten Punkt
  66. //! zeigt \param ziel Der Punkt, auf den die Kamera zeigen soll
  67. DLLEXPORT void setAusrichtung(Vec3<float> ziel);
  68. //! Legt die Drehung der Kamera um die einzelnen Axen fest
  69. //! \param rotation Die Drehung um die einzelnen Axen
  70. DLLEXPORT void setRotation(Vec3<float> rotation);
  71. //! Setzt die Position des Bildes auf dem Bildschirm
  72. //! \param p Ein Punkt mit x und y Koordinaten in Pixeln
  73. DLLEXPORT void setBildschirmPosition(Punkt p);
  74. //! Setzt die Position des Bildes auf dem Bildschirm
  75. //! \param x Die x Koordinate in Pixeln
  76. //! \param y Die y Koordinate in Pixeln
  77. DLLEXPORT void setBildschirmPosition(int x, int y);
  78. //! Setzt die Größe des Bildes auf dem Bildschirm
  79. //! \param p Ein Punkt, mit x als Breite und y als Höhe in Pixlen
  80. DLLEXPORT void setBildschirmSize(Punkt p);
  81. //! Setzt die Größe des Bildes auf dem Bildschirm
  82. //! \param br Die Breite in Pixeln
  83. //! \param hi Die Höhe in Pixeln
  84. DLLEXPORT void setBildschirmSize(int br, int hi);
  85. //! Setzt die Welt, die gezeichnet werden soll
  86. //! \param w Die Welt
  87. DLLEXPORT void setWelt(Welt3D* w);
  88. //! Setzt den Style der Kamera
  89. //! \param style Der neue Style bestehend aus den Flags aus der
  90. //! zugehörigen Style Klasse
  91. DLLEXPORT void setStyle(__int64 style);
  92. //! Setzt den Style der Kamera
  93. //! \param style Alle Style Flags, die verändert werden sollen
  94. //! add_remove: 1, falls der Style hinzugefügt werden soll. 0, falls
  95. //! der Style entfernt weden soll
  96. DLLEXPORT void setStyle(__int64 style, bool add_remove);
  97. //! Fügt Style Flags hinzu
  98. //! \param style Der Style, der hinzugefügt werden soll
  99. DLLEXPORT void addStyle(__int64 style);
  100. //! Entfernt Style Flags
  101. //! \param style Der Style, der entfernt werden soll
  102. DLLEXPORT void removeStyle(__int64 style);
  103. //! Set the movement speed per second if the camera has style Movable
  104. DLLEXPORT void setMovementSpeed(float speed);
  105. //! Verarbeitet die vergangene Zeit
  106. //! \param tickval Die zeit in sekunden, die seit dem letzten Aufruf der
  107. //! Funktion vergangen ist \return true, wenn sich das Bild neu
  108. //! gezeichnet werden muss, false sonnst.
  109. DLLEXPORT virtual bool tick(double tv);
  110. //! Verarbeitet ein Mausereignis
  111. //! \param me Das Mausereignis, das verarbeitet werden soll
  112. DLLEXPORT virtual void doMausEreignis(MausEreignis& me);
  113. //! Verarbeitet ein Tastaturereignis
  114. //! \param te das Tastaturereignis, das verarbeitet werden soll
  115. DLLEXPORT virtual void doTastaturEreignis(TastaturEreignis& te);
  116. //! Gibt zurück, ob bestimmte Styles gesetzt wurden
  117. //! \param style Die Styles, die überprüft werden sollen
  118. //! \return 1, falls alle Styles in style gesetzt wurden
  119. DLLEXPORT bool hatStyle(__int64 style) const;
  120. //! Gibt zurück, ob bestimmte Styles nicht gesetzt wurden
  121. //! \param style Die Styles, die geprüft werden sollen
  122. //! \return 1, falls alle Styles in style nicht gesetzt wurden
  123. DLLEXPORT bool hatStyleNicht(__int64 style) const;
  124. //! Gibt einen Zeiger auf den Viewport zurück
  125. DLLEXPORT const ViewPort* zViewPort() const;
  126. //! Gibt die Position der Kamera in der Welt zurück
  127. DLLEXPORT const Vec3<float>& getWorldPosition() const;
  128. //! Gibt die Position in der Welt zurück
  129. //! \param screen die Position auf dem Bildschirm, die übersetzt werden
  130. //! soll
  131. DLLEXPORT const Vec3<float> getWorldPosition(Punkt screen) const;
  132. //! Gibt die Richtung der Kamera in der Welt zurück
  133. //! \param screen die Position auf dem Bildschirm, die übersetzt werden
  134. //! soll
  135. DLLEXPORT const Vec3<float> getWorldDirection(Punkt screen) const;
  136. //! Gibt die Projektionsmatrix der Kamera zurück
  137. DLLEXPORT const Mat4<float>& getProjectionMatrix() const;
  138. //! Gibt die Ansichtsmatrix der Kamera zurück
  139. DLLEXPORT const Mat4<float>& getViewMatrix() const;
  140. //! Gibt die Rotation um die einzelnen axen zurück
  141. DLLEXPORT const Vec3<float> getRotation() const;
  142. //! Gibt die Position der Kamera auf dem Bildschirm zurück
  143. DLLEXPORT const Punkt getScreenPos() const;
  144. //! Gibt die Größe der Kamera auf dem Bildschirm zurück
  145. DLLEXPORT const Punkt getScreenSize() const;
  146. //! Gibt die Welt zurück
  147. DLLEXPORT Welt3D* getWelt() const;
  148. //! Gibt die Welt zurück
  149. DLLEXPORT Welt3D* zWelt() const;
  150. };
  151. } // namespace Framework