Zeichnung3D.cpp 5.2 KB

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