Model3D.h 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. #pragma once
  2. #include "vec2.h"
  3. #include "Array.h"
  4. #include "Mat4.h"
  5. #include "Zeichnung3D.h"
  6. struct ID3D11Buffer;
  7. namespace Framework
  8. {
  9. struct Polygon2D; // Model2D.h
  10. class Textur; // Textur.h
  11. class Model2DData; // Model2D.h
  12. class DXIndexBuffer; // DXBuffer.h
  13. class DXVertexBuffer; // DXBuffer.h
  14. class Render3D; // Render3D.h
  15. class Model3DTextur; // Model3D.h
  16. class Model3DList; // Model3DList.h
  17. struct Vertex3D
  18. {
  19. Vec3< float > pos;
  20. Vec2< float > tPos;
  21. };
  22. class Knochen
  23. {
  24. private:
  25. Vec3< float > pos;
  26. Vec3< float > winkel;
  27. int *indexList;
  28. int indexAnz;
  29. DXIndexBuffer *indexBuffer;
  30. public:
  31. // Konstruktor
  32. Knochen();
  33. // Destruktor
  34. ~Knochen();
  35. // Setzt die Anzahl der mit dem Knochen verbundenen Vertecies
  36. // anz: Die Anzahl der Vertecies
  37. void setVertexAnzahl( int anz );
  38. // Setzt deinen bestimmten Vertex des Knochens
  39. // i: Der Index des Vertex im Knochen
  40. // vId: Der Index des Vertex im Model
  41. inline void setVertex( int i, int vId );
  42. // Setzt die Position des Knochens relativ zum Model Ursprung
  43. // pos: Die Position
  44. void setPosition( Vec3< float > &pos );
  45. // Setzt die Drehung des Knochens relativ zum Model Ursprung
  46. // winkel: Ein Vektor der die Drehung um die verschiedenen Achsen als Komponenten hat
  47. void setDrehung( Vec3< float > &winkel );
  48. //
  49. void render( Render3D *zRObj, Mat4< float > &mat, )
  50. };
  51. class Skelett
  52. {
  53. private:
  54. public:
  55. };
  56. struct Polygon3D
  57. {
  58. int *indexList;
  59. int indexAnz;
  60. DXIndexBuffer *indexBuffer;
  61. // Konstruktor
  62. __declspec( dllexport ) Polygon3D();
  63. // Destruktor
  64. __declspec( dllexport ) ~Polygon3D();
  65. };
  66. // Speichert alle Geometrischen Daten eines Modells, also
  67. // Raum - und Textur Koordinaten aller Eckpunkte
  68. class Model3DData
  69. {
  70. private:
  71. Vertex3D *vertexList;
  72. DXVertexBuffer *vertexBuffer;
  73. Array< Polygon3D* > *polygons;
  74. float radius;
  75. int id;
  76. int ref;
  77. public:
  78. // Konstruktor
  79. __declspec( dllexport ) Model3DData();
  80. // Destruktor
  81. __declspec( dllexport ) ~Model3DData();
  82. // Löscht alle Model daten
  83. __declspec( dllexport ) void clearModel();
  84. // Setzt einen Zeiger auf eine Liste mit allen Vertecies des Models
  85. // vertexList: Ein Array mit Vertecies
  86. // anz: Die Anzahl der Vertecies im Array
  87. __declspec( dllexport ) void setVertecies( Vertex3D *vertexList, int anz );
  88. // Fügt ein Polygon zum Model hinzu
  89. // polygon: Das Polygon, das hinzugefügt erden soll
  90. __declspec( dllexport ) void addPolygon( Polygon3D *polygon );
  91. // Konvertiert ein 2d Model zu 3D
  92. // model: Das 2d Model, das zu 3d konvertiert werden soll
  93. // z: Die z koordinate aller punkte des Models
  94. __declspec( dllexport ) void copyModel2D( Model2DData *model, float z );
  95. // Entfernt ein Polygon
  96. // index: Der Index des Polygons
  97. __declspec( dllexport ) void removePolygon( int index );
  98. // Zeichnet alle Polygons
  99. // world: Die Welt Matrix, die das Model in die Welt transformiert
  100. // zTxt: Eine Liste mit Texturen der einzelnen Polygone
  101. // zRObj: Das Objekt, mit dem gezeichnet werden soll
  102. __declspec( dllexport ) void render( Mat4< float > &welt, const Model3DTextur *zTxt, Render3D *zRObj );
  103. // Gibt die Anzahl an Polygonen zurück
  104. __declspec( dllexport ) int getPolygonAnzahl();
  105. // Gibt ein bestimmtes Polygon zurück
  106. // index: Der Index des Polygons
  107. __declspec( dllexport ) Polygon3D *getPolygon( int index );
  108. // Gibt den radius einer Kugel zurück, die das gesammte Model umschließt
  109. __declspec( dllexport ) float getRadius() const;
  110. // Erhöht den Reference Counting Zähler.
  111. // return: this.
  112. __declspec( dllexport ) Model3DData *getThis();
  113. // Verringert den Reference Counting Zähler. Wenn der Zähler 0 erreicht, wird das Zeichnung automatisch gelöscht.
  114. // return: 0.
  115. __declspec( dllexport ) Model3DData *release();
  116. friend Model3DList;
  117. };
  118. // Speichert eine Liste mit Texturen und für welche Polygone welche Textur benutzt werden soll
  119. class Model3DTextur
  120. {
  121. private:
  122. RCArray< Textur > *textures;
  123. int ref;
  124. public:
  125. // Konstruktor
  126. __declspec( dllexport ) Model3DTextur();
  127. // Destruktor
  128. __declspec( dllexport ) ~Model3DTextur();
  129. // Legt fest, welche Textur für welches Polygon ist
  130. // pI: Der Index des Polygons
  131. // txt: Die Textur des Polygons
  132. __declspec( dllexport ) void setPolygonTextur( int pI, Textur *txt );
  133. // Gibt einen Zeiger auf die Textur eines Polygons zurück ohne erhöhten Reference Counter
  134. // i: Der Index des Polygons
  135. __declspec( dllexport ) Textur *zPolygonTextur( int i ) const;
  136. // Erhöht den Reference Counting Zähler.
  137. // return: this.
  138. __declspec( dllexport ) Model3DTextur *getThis();
  139. // Verringert den Reference Counting Zähler. Wenn der Zähler 0 erreicht, wird das Zeichnung automatisch gelöscht.
  140. // return: 0.
  141. __declspec( dllexport ) Model3DTextur *release();
  142. };
  143. class Model3D : public Zeichnung3D
  144. {
  145. protected:
  146. Model3DData *model;
  147. Model3DTextur *textur;
  148. int ref;
  149. public:
  150. // Konstruktor
  151. __declspec( dllexport ) Model3D();
  152. // Destruktor
  153. __declspec( dllexport ) ~Model3D();
  154. // Setzt die Daten des Models
  155. // data: Die Daten
  156. __declspec( dllexport ) void setModelDaten( Model3DData *data );
  157. // Setzt die zum Zeichnen zu benutzenden Texturen
  158. // txt: Ein Liste mit Texturen zu den verschiedenen Polygonen zugeordnet
  159. __declspec( dllexport ) void setModelTextur( Model3DTextur *txt );
  160. // Verarbeitet die vergangene Zeit
  161. // tickval: Die zeit in sekunden, die seit dem letzten Aufruf der Funktion vergangen ist
  162. // return: true, wenn sich das Objekt verändert hat, false sonnst.
  163. __declspec( dllexport ) virtual bool tick( double tickval );
  164. // Zeichnet das Model
  165. // zRObj: Ein Zeiger auf das Objekt, das zum Zeichnen verwendet werden soll (ohne erhöhten Reference Counter)
  166. __declspec( dllexport ) void render( Render3D *zRObj ) override;
  167. // Erhöht den Reference Counting Zähler.
  168. // return: this.
  169. __declspec( dllexport ) Model3D *getThis();
  170. // Verringert den Reference Counting Zähler. Wenn der Zähler 0 erreicht, wird das Zeichnung automatisch gelöscht.
  171. // return: 0.
  172. __declspec( dllexport ) virtual Model3D *release();
  173. };
  174. }