Render3D.h 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. #pragma once
  2. #include "Array.h"
  3. #include "Mat4.h"
  4. #include "Ebene3D.h"
  5. struct ID3D11Device;
  6. struct ID3D11DeviceContext;
  7. enum D3D_PRIMITIVE_TOPOLOGY;
  8. struct ID3D11ShaderResourceView;
  9. struct ID3D11RasterizerState;
  10. namespace Framework
  11. {
  12. class Shader; // Shader.h
  13. class DXVertexBuffer; // DXBuffer.h
  14. class DXIndexBuffer; // DXBuffer.h
  15. class DXStructuredBuffer; // DXBuffer.h
  16. class Textur; // Textur.h
  17. class Model3D; // Model3D.h
  18. struct DiffuseLight
  19. {
  20. Vec3<float> direction;
  21. Vec3<float> color;
  22. };
  23. struct PointLight
  24. {
  25. Vec3<float> position;
  26. Vec3<float> color;
  27. float radius;
  28. };
  29. // Verwaltet die Zeichenfunktionen der Grafikkarte und wird zum Zeichnen von 3D Modelen verwendet. Wird von Bildschirm3D automatisch erzeugt.
  30. class Render3D
  31. {
  32. private:
  33. Mat4< float > matrixBuffer[ MAX_KNOCHEN_ANZ ];
  34. float matirialBuffer[ 3 ]; // light factors (phong model)
  35. Mat4< float > viewAndProj[2];
  36. Ebene3D< float > frustrum[ 6 ];
  37. Vec3< float > kamPos;
  38. ID3D11Device *device;
  39. ID3D11DeviceContext *context;
  40. ID3D11RasterizerState *texturRS;
  41. ID3D11RasterizerState *meshRS;
  42. DXStructuredBuffer *diffuseLights;
  43. DXStructuredBuffer *pointLights;
  44. Textur *defaultTextur;
  45. RCArray< RCArray< Shader > > *shader;
  46. Array< int > *shaderId;
  47. int lastObjektId;
  48. int lastTexturId;
  49. int ref;
  50. public:
  51. // Konstruktor
  52. __declspec( dllexport ) Render3D();
  53. // Destruktor
  54. __declspec( dllexport ) ~Render3D();
  55. // Setzt das Device, was zum zeichnen verwendet werden soll
  56. // device: Das neue Device
  57. __declspec( dllexport ) void setDevice( ID3D11Device *device );
  58. // Setzt das Context Objekt, das zum Zeichnen verwendet werden soll
  59. // context: das neue Conext Objekt
  60. __declspec( dllexport ) void setContext( ID3D11DeviceContext *context );
  61. // Setzt den aktuellen Shader. Er wird hinten an die Liste mit zuletzt verwendeten Shadern angefügt
  62. // listIndex: Der Index der Liste mit zuletzt verwendeten Shadern
  63. // sh: Der Shader, der verwendet werden soll
  64. __declspec( dllexport ) void benutzeShader( int listIndex, Shader *sh );
  65. // Sprinkt in der Liste mit zuletzt benutzten Shadern zurück und benutzt wieder den dortiegen Shader
  66. // listIndex: Der Index der Liste mit zuletzt verwe deten Shadern
  67. // anz: Die Anzahl der Shader, die zurückgesprungen werden soll. Bei 0 passiert nichts
  68. __declspec( dllexport ) void releaseShader( int listIndex, int anz = 1 );
  69. // Setzt die View und Projektion Matrizen, die zum zeichnen verwendet werden sollen
  70. // view: Die View Matrix der Kamera
  71. // proj: Die Projektion Matrix der Kamera
  72. // kamPos: Die Position der Kamera in der Welt
  73. __declspec( dllexport ) void setKameraMatrix( Mat4< float > &view, Mat4< float > &proj, Vec3< float > &kamPos );
  74. // Beginnt das Zeichnen eines bestimmten objektes
  75. // zMdl: Das 3D Modelohne erhöhten Reference Counter
  76. __declspec( dllexport ) void beginnModel( Model3D *zMdl );
  77. // Zeichnet eine bestimmte struktur
  78. // zIndexBuffer: Ein IndexBuffer, der auf verschiedene Vertices aus dem Vertex Buffer des Models zeigt. Ohne erhöhten Reference Counter
  79. // textur: Ein Zeiger auf die Textur, die verwendet werden soll ohne erhöhten Reference Counter
  80. // struktur: Die Struktur der angegebenen Indices, Beispiel: D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST oder D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP ...
  81. __declspec( dllexport ) void draw( DXIndexBuffer *zIndexBuffer, Textur *zTextur, D3D_PRIMITIVE_TOPOLOGY struktur = (D3D_PRIMITIVE_TOPOLOGY)4 );
  82. // Gibt einen der aktuell verwendeten Shader zurück
  83. // listIndex: Der Index der Lise mit Shadern, von denen der aktuell benutzte zurückgegeben werden soll
  84. __declspec( dllexport ) Shader *getShader( int listIndex ) const;
  85. // Gibt einen der aktuell verwendeten Shader ohne erhöhten Reference Counter zurück
  86. // listIndex: Der Index der Lise mit Shadern, von denen der aktuell benutzte zurückgegeben werden soll
  87. __declspec( dllexport ) Shader *zShader( int listIndex ) const;
  88. // Gibt das momentan verwendete Device Objekt ohne erhöhten Reference Counter zurück
  89. __declspec( dllexport ) ID3D11Device *zDevice() const;
  90. // Gibt das momentan verwendete Context Objekt ohne erhöhten Reference Counter zurück
  91. __declspec( dllexport ) ID3D11DeviceContext *zContext() const;
  92. // Überprüft, ob eine Kugel in dem Sichtbaren Raum der Welt liegt und gezeichnet werden muss
  93. // pos: Der Mittelpunkt der Kugel
  94. // radius: Der Radius der Kugel
  95. // dist: Einen Zeiger auf einen float, in dem das quadrat des Abstands zur Kammeraposition gespeichert wird, falls diese Funktion true zurückgiebt und der Zeiger nicht 0 ist
  96. __declspec( dllexport ) bool isInFrustrum( const Vec3< float > &pos, float radius, float *dist = 0 ) const;
  97. // Erhöht den Reference Counting Zähler.
  98. // return: this.
  99. __declspec( dllexport ) Render3D *getThis();
  100. // Verringert den Reference Counting Zähler. Wenn der Zähler 0 erreicht, wird das Zeichnung automatisch gelöscht.
  101. // return: 0.
  102. __declspec( dllexport ) Render3D *release();
  103. };
  104. }