Zeichnung3D.cpp 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  1. #include "Zeichnung3D.h"
  2. using namespace Framework;
  3. // Inhalt der Zeichnung3D Klasse
  4. // Konstruktor
  5. Zeichnung3D::Zeichnung3D()
  6. : ReferenceCounter()
  7. {
  8. welt = welt.identity();
  9. pos = Vec3< float >(0, 0, 0);
  10. angle = Vec3< float >(0, 0, 0);
  11. rend = 0;
  12. alpha = 0;
  13. radius = 0;
  14. size = 1.f;
  15. }
  16. Zeichnung3D::~Zeichnung3D()
  17. {}
  18. // Setzt die Position der Zeichnung in der Welt
  19. // p: Die Position
  20. void Zeichnung3D::setPosition(Vec3< float >& p)
  21. {
  22. pos = p;
  23. rend = 1;
  24. }
  25. // Setzt die Position der Zeichnung in der Welt
  26. // x: Die x Position
  27. // y: Die y Position
  28. // z: Die z Position
  29. void Zeichnung3D::setPosition(float x, float y, float z)
  30. {
  31. pos.x = x;
  32. pos.y = y;
  33. pos.z = z;
  34. rend = 1;
  35. }
  36. // Setzt die Position der Zeichnung in der Welt
  37. // x: Die x Position
  38. void Zeichnung3D::setX(float x)
  39. {
  40. pos.x = x;
  41. rend = 1;
  42. }
  43. // Setzt die Position der Zeichnung in der Welt
  44. // y: Die y Position
  45. void Zeichnung3D::setY(float y)
  46. {
  47. pos.y = y;
  48. rend = 1;
  49. }
  50. // Setzt die Position der Zeichnung in der Welt
  51. // z: Die z Position
  52. void Zeichnung3D::setZ(float z)
  53. {
  54. pos.z = z;
  55. rend = 1;
  56. }
  57. // Setzt die Drehung der Zeichnung in der Welt
  58. // d: Die drehung um die x, y und z achse
  59. void Zeichnung3D::setDrehung(Vec3< float >& d)
  60. {
  61. angle = d;
  62. rend = 1;
  63. }
  64. // Setzt die Drehung der Zeichnung in der Welt
  65. // xWinkel: Die drehung um die x achse
  66. // yWinkel: Die drehung um die y achse
  67. // zWinkel: Die drehung um die z achse
  68. void Zeichnung3D::setDrehung(float xWinkel, float yWinkel, float zWinkel)
  69. {
  70. angle.x = xWinkel;
  71. angle.y = yWinkel;
  72. angle.z = zWinkel;
  73. rend = 1;
  74. }
  75. // Setzt die Drehung der Zeichnung in der Welt
  76. // winkel: Die drehung um die x achse
  77. void Zeichnung3D::setDrehungX(float winkel)
  78. {
  79. angle.x = winkel;
  80. rend = 1;
  81. }
  82. // Setzt die Drehung der Zeichnung in der Welt
  83. // winkel: Die drehung um die y achse
  84. void Zeichnung3D::setDrehungY(float winkel)
  85. {
  86. angle.y = winkel;
  87. rend = 1;
  88. }
  89. // Setzt die Drehung der Zeichnung in der Welt
  90. // winkel: Die drehung um die z achse
  91. void Zeichnung3D::setDrehungZ(float winkel)
  92. {
  93. angle.z = winkel;
  94. rend = 1;
  95. }
  96. // Legt fest, ob das Objekt teilweise oder ganz transparente stellen enthält
  97. // a: true, wenn teilweise oder ganz transparente stellen vorhanden sind
  98. void Zeichnung3D::setAlpha(bool a)
  99. {
  100. alpha = a;
  101. rend = 1;
  102. }
  103. //! Setzt die skallierung
  104. void Zeichnung3D::setSize(float size)
  105. {
  106. this->size = size;
  107. rend = 1;
  108. }
  109. // Errechnet die Matrizen aller Knochen des Skeletts der Zeichnung
  110. // viewProj: Die miteinander multiplizierten Kameramatrizen
  111. // matBuffer: Ein Array mit Matrizen, der gefüllt werden soll
  112. // return: Die Anzahl der Matrizen, die die Zeichnung benötigt
  113. int Zeichnung3D::errechneMatrizen(Mat4< float >& viewProj, Mat4< float >* matBuffer)
  114. {
  115. matBuffer[0] = viewProj * welt;
  116. return 1;
  117. }
  118. // Verarbeitet ein Mausereignis
  119. // me: Das Mausereignis, das verarbeitet werden soll
  120. void Zeichnung3D::doMausEreignis(MausEreignis3D& me)
  121. {}
  122. // Verarbeitet ein Tastaturereignis
  123. // te: das Tastaturereignis, das verarbeitet werden soll
  124. void Zeichnung3D::doTastaturEreignis(TastaturEreignis& te)
  125. {}
  126. // Verarbeitet die vergangene Zeit
  127. // tickval: Die zeit in sekunden, die seit dem letzten Aufruf der Funktion vergangen ist
  128. // return: true, wenn sich das Objekt verändert hat, false sonnst.
  129. bool Zeichnung3D::tick(double tickval)
  130. {
  131. if (rend)
  132. {
  133. welt = welt.translation(pos) * welt.rotationZ(angle.z) * welt.rotationX(angle.x) * welt.rotationY(angle.y) * welt.scaling(size);
  134. rend = 0;
  135. return 1;
  136. }
  137. return 0;
  138. }
  139. // Gibt zurück, ob das Objekt teilweise oder ganz transparente stellen enthält
  140. bool Zeichnung3D::hatAlpha() const
  141. {
  142. return alpha;
  143. }
  144. // Gibt den radius einer Kugel zurück, die das gesammte Model umschließt
  145. float Zeichnung3D::getRadius() const
  146. {
  147. return radius;
  148. }
  149. // Gibt einen Punkt zurück, der die Position der Zeichnung in der Welt darstellt
  150. const Vec3< float >& Zeichnung3D::getPos() const
  151. {
  152. return pos;
  153. }
  154. // Gibt die X Position der Zeichnung in der Welt zurück
  155. float Zeichnung3D::getX() const
  156. {
  157. return pos.x;
  158. }
  159. // Gibt die Y Position der Zeichnung in der Welt zurück
  160. float Zeichnung3D::getY() const
  161. {
  162. return pos.y;
  163. }
  164. // Gibt die Z Position der Zeichnung in der Welt zurück
  165. float Zeichnung3D::getZ() const
  166. {
  167. return pos.z;
  168. }
  169. // 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
  170. const Vec3< float >& Zeichnung3D::getDrehung() const
  171. {
  172. return angle;
  173. }
  174. // Gibt die Drehung um die X Achse im Bogenmaß zurück
  175. float Zeichnung3D::getXDrehung() const
  176. {
  177. return angle.x;
  178. }
  179. // Gibt die Drehung um die Y Achse im Bogenmaß zurück
  180. float Zeichnung3D::getYDrehung() const
  181. {
  182. return angle.y;
  183. }
  184. // Gibt die Drehung um die Z Achse im Bogenmaß zurück
  185. float Zeichnung3D::getZDrehung() const
  186. {
  187. return angle.z;
  188. }
  189. // Gibt die Matrix zurück, die die Zeichnung in den Welt Raum übersetzt
  190. const Mat4< float >& Zeichnung3D::getMatrix() const
  191. {
  192. return welt;
  193. }
  194. //! Berechnet wür einen Punkt in lokalen Zeichnungs Koordinaten den Punkt in Weltkoordinaten durch anwendung von Drehung, Skallierung und Verschiebung
  195. Vec3<float> Zeichnung3D::applyWorldTransformation(Vec3<float> modelPos) const
  196. {
  197. return welt * modelPos;
  198. }