Kam3D.h 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. #pragma once
  2. #include "Mat4.h"
  3. #include "Zeichnung3D.h"
  4. #include "Punkt.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 Teil des Bildschirms zeichnet
  22. class Kam3D
  23. {
  24. public:
  25. class Style
  26. {
  27. public:
  28. const static __int64 Movable = 0x1;
  29. const static __int64 Rotatable = 0x2;
  30. const static __int64 Zoomable = 0x4;
  31. const static __int64 Tick = 0x8;
  32. };
  33. private:
  34. Mat4< float > view;
  35. Mat4< float > proj;
  36. float openingAngle;
  37. float minZ;
  38. float maxZ;
  39. Vec3< float > pos;
  40. float rotX;
  41. float rotY;
  42. float rotZ;
  43. ViewPort viewport;
  44. Welt3D *welt;
  45. __int64 style;
  46. int ref;
  47. //! Aktualisiert die view und projektion matrizen
  48. void updateMatrix();
  49. public:
  50. //! Konstruktor
  51. __declspec( dllexport ) Kam3D();
  52. //! Destruktor
  53. __declspec( dllexport ) ~Kam3D();
  54. //! Setzt die Position der Kamera in der 3D Welt
  55. __declspec( dllexport ) void setPosition( Vec3< float > pos );
  56. //! zoomt heran, indem sich die Kamera etwas auf das Blickziel zubewegt
  57. //! \param val Die länge der Strecke um die sich die Kamera bewegen soll
  58. __declspec( dllexport ) void scrollIn( float val );
  59. //! zppmt heraus, indem sich die Kamera etwas von dem Blockziel entfernt
  60. //! \param val Die länge der Strecke um die sich die Kamera bewegen soll
  61. __declspec( dllexport ) void scrollOut( float val );
  62. //! Richtet die Kamera so aus, dass sie genau auf einen bestimmten Punkt zeigt
  63. //! \param ziel Der Punkt, auf den die Kamera zeigen soll
  64. __declspec( dllexport ) void setAusrichtung( Vec3< float > ziel );
  65. //! Setzt die Position des Bildes auf dem Bildschirm
  66. //! \param p Ein Punkt mit x und y Koordinaten in Pixeln
  67. __declspec( dllexport ) void setBildschirmPosition( Punkt p );
  68. //! Setzt die Position des Bildes auf dem Bildschirm
  69. //! \param x Die x Koordinate in Pixeln
  70. //! \param y Die y Koordinate in Pixeln
  71. __declspec( dllexport ) void setBildschirmPosition( int x, int y );
  72. //! Setzt die Größe des Bildes auf dem Bildschirm
  73. //! \param p Ein Punkt, mit x als Breite und y als Höhe in Pixlen
  74. __declspec( dllexport ) void setBildschirmSize( Punkt p );
  75. //! Setzt die Größe des Bildes auf dem Bildschirm
  76. //! \param br Die Breite in Pixeln
  77. //! \param hi Die Höhe in Pixeln
  78. __declspec( dllexport ) void setBildschirmSize( int br, int hi );
  79. //! Setzt die Welt, die gezeichnet werden soll
  80. //! \param w Die Welt
  81. __declspec( dllexport ) void setWelt( Welt3D *w );
  82. //! Setzt den Style der Kamera
  83. //! \param style Der neue Style bestehend aus den Flags aus der zugehörigen Style Klasse
  84. __declspec( dllexport ) void setStyle( __int64 style );
  85. //! Setzt den Style der Kamera
  86. //! \param style Alle Style Flags, die verändert werden sollen
  87. //! add_remove: 1, falls der Style hinzugefügt werden soll. 0, falls der Style entfernt weden soll
  88. __declspec( dllexport ) void setStyle( __int64 style, bool add_remove );
  89. //! Fügt Style Flags hinzu
  90. //! \param style Der Style, der hinzugefügt werden soll
  91. __declspec( dllexport ) void addStyle( __int64 style );
  92. //! Entfernt Style Flags
  93. //! \param style Der Style, der entfernt werden soll
  94. __declspec( dllexport ) void removeStyle( __int64 style );
  95. //! Verarbeitet die vergangene Zeit
  96. //! \param tickval Die zeit in sekunden, die seit dem letzten Aufruf der Funktion vergangen ist
  97. //! \return true, wenn sich das Bild neu gezeichnet werden muss, false sonnst.
  98. __declspec( dllexport ) virtual bool tick( double tv );
  99. //! Verarbeitet ein Mausereignis
  100. //! \param me Das Mausereignis, das verarbeitet werden soll
  101. __declspec( dllexport ) virtual void doMausEreignis( MausEreignis &me );
  102. //! Verarbeitet ein Tastaturereignis
  103. //! \param te das Tastaturereignis, das verarbeitet werden soll
  104. __declspec( dllexport ) virtual void doTastaturEreignis( TastaturEreignis &te );
  105. //! Gibt zurück, ob bestimmte Styles gesetzt wurden
  106. //! \param style Die Styles, die überprüft werden sollen
  107. //! \return 1, falls alle Styles in style gesetzt wurden
  108. __declspec( dllexport ) bool hatStyle( __int64 style ) const;
  109. //! Gibt zurück, ob bestimmte Styles nicht gesetzt wurden
  110. //! \param style Die Styles, die geprüft werden sollen
  111. //! \return 1, falls alle Styles in style nicht gesetzt wurden
  112. __declspec( dllexport ) bool hatStyleNicht( __int64 style ) const;
  113. //! Gibt einen Zeiger auf den Viewport zurück
  114. __declspec( dllexport ) const ViewPort *zViewPort() const;
  115. //! Gibt die Position der Kamera in der Welt zurück
  116. __declspec( dllexport ) const Vec3< float > &getWorldPosition() const;
  117. //! Gibt die Position in der Welt zurück
  118. //! \param screen die Position auf dem Bildschirm, die übersetzt werden soll
  119. __declspec( dllexport ) const Vec3< float > getWorldPosition( Punkt screen ) const;
  120. //! Gibt die Richtung der Kamera in der Welt zurück
  121. //! \param screen die Position auf dem Bildschirm, die übersetzt werden soll
  122. __declspec( dllexport ) const Vec3< float > getWorldDirection( Punkt screen ) const;
  123. //! Gibt die Projektionsmatrix der Kamera zurück
  124. __declspec( dllexport ) const Mat4< float > &getProjectionMatrix() const;
  125. //! Gibt die Ansichtsmatrix der Kamera zurück
  126. __declspec( dllexport ) const Mat4< float > &getViewMatrix() const;
  127. //! Gibt die Welt zurück
  128. __declspec( dllexport ) Welt3D *getWelt() const;
  129. //! Gibt die Welt zurück
  130. __declspec( dllexport ) Welt3D *zWelt() const;
  131. //! Kopiert die Komplette Zeichnung, so dass sie ohne Effekt auf das Original verändert werden kann
  132. //! Erhöht den Reference Counter um 1
  133. //! \param Return Ein zeiger auf diesen Shader
  134. __declspec( dllexport ) Kam3D *getThis();
  135. //! Verringert den Reference Counter und löscht den Shader, falls der Refeence Counter auf 0 ist
  136. //! \param Return 0
  137. __declspec( dllexport ) Kam3D *release();
  138. };
  139. }