#pragma once #include "Mat4.h" #include "Zeichnung3D.h" #include "Punkt.h" //! DirectX 11 Types struct D3D11_VIEWPORT; namespace Framework { struct MausEreignis; //! MausEreignis.h class Render3D; //! Render3D.h class Welt3D; //! Welt3D.h struct ViewPort { float x; float y; float width; float height; float front; float back; }; //! Eine 3d Kamera, die einen Ausschnitt einer 3D Welt in einen bestimmten Teil des Bildschirms zeichnet class Kam3D { public: class Style { public: const static __int64 Movable = 0x1; const static __int64 Rotatable = 0x2; const static __int64 Zoomable = 0x4; const static __int64 Tick = 0x8; }; private: Mat4< float > view; Mat4< float > proj; float openingAngle; float minZ; float maxZ; Vec3< float > pos; float rotX; float rotY; float rotZ; ViewPort viewport; Welt3D *welt; __int64 style; int ref; //! Aktualisiert die view und projektion matrizen void updateMatrix(); public: //! Konstruktor __declspec( dllexport ) Kam3D(); //! Destruktor __declspec( dllexport ) ~Kam3D(); //! Setzt die Position der Kamera in der 3D Welt __declspec( dllexport ) void setPosition( Vec3< float > pos ); //! zoomt heran, indem sich die Kamera etwas auf das Blickziel zubewegt //! \param val Die länge der Strecke um die sich die Kamera bewegen soll __declspec( dllexport ) void scrollIn( float val ); //! zppmt heraus, indem sich die Kamera etwas von dem Blockziel entfernt //! \param val Die länge der Strecke um die sich die Kamera bewegen soll __declspec( dllexport ) void scrollOut( float val ); //! Richtet die Kamera so aus, dass sie genau auf einen bestimmten Punkt zeigt //! \param ziel Der Punkt, auf den die Kamera zeigen soll __declspec( dllexport ) void setAusrichtung( Vec3< float > ziel ); //! Setzt die Position des Bildes auf dem Bildschirm //! \param p Ein Punkt mit x und y Koordinaten in Pixeln __declspec( dllexport ) void setBildschirmPosition( Punkt p ); //! Setzt die Position des Bildes auf dem Bildschirm //! \param x Die x Koordinate in Pixeln //! \param y Die y Koordinate in Pixeln __declspec( dllexport ) void setBildschirmPosition( int x, int y ); //! Setzt die Größe des Bildes auf dem Bildschirm //! \param p Ein Punkt, mit x als Breite und y als Höhe in Pixlen __declspec( dllexport ) void setBildschirmSize( Punkt p ); //! Setzt die Größe des Bildes auf dem Bildschirm //! \param br Die Breite in Pixeln //! \param hi Die Höhe in Pixeln __declspec( dllexport ) void setBildschirmSize( int br, int hi ); //! Setzt die Welt, die gezeichnet werden soll //! \param w Die Welt __declspec( dllexport ) void setWelt( Welt3D *w ); //! Setzt den Style der Kamera //! \param style Der neue Style bestehend aus den Flags aus der zugehörigen Style Klasse __declspec( dllexport ) void setStyle( __int64 style ); //! Setzt den Style der Kamera //! \param style Alle Style Flags, die verändert werden sollen //! add_remove: 1, falls der Style hinzugefügt werden soll. 0, falls der Style entfernt weden soll __declspec( dllexport ) void setStyle( __int64 style, bool add_remove ); //! Fügt Style Flags hinzu //! \param style Der Style, der hinzugefügt werden soll __declspec( dllexport ) void addStyle( __int64 style ); //! Entfernt Style Flags //! \param style Der Style, der entfernt werden soll __declspec( dllexport ) void removeStyle( __int64 style ); //! Verarbeitet die vergangene Zeit //! \param tickval Die zeit in sekunden, die seit dem letzten Aufruf der Funktion vergangen ist //! \return true, wenn sich das Bild neu gezeichnet werden muss, false sonnst. __declspec( dllexport ) virtual bool tick( double tv ); //! Verarbeitet ein Mausereignis //! \param me Das Mausereignis, das verarbeitet werden soll __declspec( dllexport ) virtual void doMausEreignis( MausEreignis &me ); //! Verarbeitet ein Tastaturereignis //! \param te das Tastaturereignis, das verarbeitet werden soll __declspec( dllexport ) virtual void doTastaturEreignis( TastaturEreignis &te ); //! Gibt zurück, ob bestimmte Styles gesetzt wurden //! \param style Die Styles, die überprüft werden sollen //! \return 1, falls alle Styles in style gesetzt wurden __declspec( dllexport ) bool hatStyle( __int64 style ) const; //! Gibt zurück, ob bestimmte Styles nicht gesetzt wurden //! \param style Die Styles, die geprüft werden sollen //! \return 1, falls alle Styles in style nicht gesetzt wurden __declspec( dllexport ) bool hatStyleNicht( __int64 style ) const; //! Gibt einen Zeiger auf den Viewport zurück __declspec( dllexport ) const ViewPort *zViewPort() const; //! Gibt die Position der Kamera in der Welt zurück __declspec( dllexport ) const Vec3< float > &getWorldPosition() const; //! Gibt die Position in der Welt zurück //! \param screen die Position auf dem Bildschirm, die übersetzt werden soll __declspec( dllexport ) const Vec3< float > getWorldPosition( Punkt screen ) const; //! Gibt die Richtung der Kamera in der Welt zurück //! \param screen die Position auf dem Bildschirm, die übersetzt werden soll __declspec( dllexport ) const Vec3< float > getWorldDirection( Punkt screen ) const; //! Gibt die Projektionsmatrix der Kamera zurück __declspec( dllexport ) const Mat4< float > &getProjectionMatrix() const; //! Gibt die Ansichtsmatrix der Kamera zurück __declspec( dllexport ) const Mat4< float > &getViewMatrix() const; //! Gibt die Welt zurück __declspec( dllexport ) Welt3D *getWelt() const; //! Gibt die Welt zurück __declspec( dllexport ) Welt3D *zWelt() const; //! Kopiert die Komplette Zeichnung, so dass sie ohne Effekt auf das Original verändert werden kann //! Erhöht den Reference Counter um 1 //! \param Return Ein zeiger auf diesen Shader __declspec( dllexport ) Kam3D *getThis(); //! Verringert den Reference Counter und löscht den Shader, falls der Refeence Counter auf 0 ist //! \param Return 0 __declspec( dllexport ) Kam3D *release(); }; }