Kam3D.h 5.4 KB

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