Render3D.h 5.0 KB

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