#pragma once #include "Mat4.h" #include "ReferenceCounter.h" namespace Framework { struct MausEreignis3D; struct TastaturEreignis; class Render3D; //! Render3D.h //! Ein Objekt, das von der Bildschirm3D Klasse gezeichnet werden kann. class Zeichnung3D : public virtual ReferenceCounter { protected: Vec3 pos; //! Position des Objekts Vec3 angle; //! Drehungswinkel für x, y und z Mat4 welt; //! Wlet translation matrix float radius; //! Der radius einer Kugel, der das gesamte Objekt //! umschließt bool alpha; //! Speichert ob das Objekt teilweise oder ganz transparente //! stellen enthält bool rend; float size; public: //! Konstruktor DLLEXPORT Zeichnung3D(); DLLEXPORT virtual ~Zeichnung3D(); //! Setzt die Position der Zeichnung in der Welt //! \param p Die Position DLLEXPORT void setPosition(Vec3& p); //! Setzt die Position der Zeichnung in der Welt //! \param x Die x Position //! \param y Die y Position //! \param z Die z Position DLLEXPORT void setPosition(float x, float y, float z); //! Setzt die Position der Zeichnung in der Welt //! \param x Die x Position DLLEXPORT void setX(float x); //! Setzt die Position der Zeichnung in der Welt //! \param y Die y Position DLLEXPORT void setY(float y); //! Setzt die Position der Zeichnung in der Welt //! \param z Die z Position DLLEXPORT void setZ(float z); //! Setzt die Drehung der Zeichnung in der Welt //! \param d Die drehung um die x, y und z achse DLLEXPORT void setDrehung(Vec3& d); //! Setzt die Drehung der Zeichnung in der Welt //! \param xWinkel Die drehung um die x achse //! \param yWinkel Die drehung um die y achse //! \param zWinkel Die drehung um die z achse DLLEXPORT void setDrehung(float xWinkel, float yWinkel, float zWinkel); //! Setzt die Drehung der Zeichnung in der Welt //! \param winkel Die drehung um die x achse DLLEXPORT void setDrehungX(float winkel); //! Setzt die Drehung der Zeichnung in der Welt //! \param winkel Die drehung um die y achse DLLEXPORT void setDrehungY(float winkel); //! Setzt die Drehung der Zeichnung in der Welt //! \param winkel Die drehung um die z achse DLLEXPORT void setDrehungZ(float winkel); //! Legt fest, ob das Objekt teilweise oder ganz transparente stellen //! enthält \param a true, wenn teilweise oder ganz transparente stellen //! vorhanden sind DLLEXPORT void setAlpha(bool a); //! Setzt die skallierung DLLEXPORT void setSize(float size); //! Errechnet die Matrizen aller Knochen des Skeletts der Zeichnung //! \param viewProj Die miteinander multiplizierten Kameramatrizen //! \param matBuffer Ein Array mit Matrizen, der gefüllt werden soll //! \return Die Anzahl der Matrizen, die die Zeichnung benötigt DLLEXPORT virtual int errechneMatrizen( Mat4& viewProj, Mat4* matBuffer); //! Verarbeitet ein Mausereignis //! \param me Das Mausereignis, das verarbeitet werden soll DLLEXPORT virtual void doMausEreignis(MausEreignis3D& me); //! Verarbeitet ein Tastaturereignis //! \param te das Tastaturereignis, das verarbeitet werden soll DLLEXPORT virtual void doTastaturEreignis(TastaturEreignis& te); //! Verarbeitet die vergangene Zeit //! \param tickval Die zeit in sekunden, die seit dem letzten Aufruf der //! Funktion vergangen ist \return true, wenn sich das Objekt verändert //! hat, false sonnst. DLLEXPORT virtual bool tick(double tickval); //! Gibt zurück, ob das Objekt teilweise oder ganz transparente stellen //! enthält DLLEXPORT bool hatAlpha() const; //! Gibt den radius einer Kugel zurück, die das gesammte Model //! umschließt DLLEXPORT inline float getRadius() const; //! Gibt einen Punkt zurück, der die Position der Zeichnung in der Welt //! darstellt DLLEXPORT const Vec3& getPos() const; //! Gibt die X Position der Zeichnung in der Welt zurück DLLEXPORT float getX() const; //! Gibt die Y Position der Zeichnung in der Welt zurück DLLEXPORT float getY() const; //! Gibt die Z Position der Zeichnung in der Welt zurück DLLEXPORT float getZ() const; //! Gibt einen Vektor zurück, der die drehung der Zeichnung in der Welt //! darstellt. x ist die Drehung um die X Achse im Bogenmaß usw DLLEXPORT const Vec3& getDrehung() const; //! Gibt die Drehung um die X Achse im Bogenmaß zurück DLLEXPORT float getXDrehung() const; //! Gibt die Drehung um die Y Achse im Bogenmaß zurück DLLEXPORT float getYDrehung() const; //! Gibt die Drehung um die Z Achse im Bogenmaß zurück DLLEXPORT float getZDrehung() const; //! Gibt die Matrix zurück, die die Zeichnung in den Welt Raum übersetzt DLLEXPORT const Mat4& getMatrix() const; //! Berechnet wür einen Punkt in lokalen Zeichnungs Koordinaten den //! Punkt in Weltkoordinaten durch anwendung von Drehung, Skallierung //! und Verschiebung DLLEXPORT Vec3 applyWorldTransformation( Vec3 modelPos) const; }; } // namespace Framework