Browse Source

Model3D objekte können die lichtfaktoren der ModellDaten jetzt überschreiben

Kolja Strohm 5 years ago
parent
commit
74cf01b567
3 changed files with 47 additions and 5 deletions
  1. 2 2
      DX11GraphicsApi.cpp
  2. 33 3
      Model3D.cpp
  3. 12 0
      Model3D.h

+ 2 - 2
DX11GraphicsApi.cpp

@@ -476,8 +476,8 @@ void DirectX11::initialize( WFenster *fenster, Vec2<int> backBufferSize, bool fu
     indexBuffer = new DX11Buffer( sizeof( int ), d3d11Device, d3d11Context, D3D11_BIND_INDEX_BUFFER );
 
     DiffuseLight dl[ 1 ];
-    dl[ 0 ].direction = Vec3< float >( -0.5f, -0.5f, -0.5f ).normalize();
-    dl[ 0 ].color = Vec3<float>( 1.f, 0.f, 0.f );
+    dl[ 0 ].direction = Vec3< float >( 50.f, 50.f, -500.f ).normalize();
+    dl[ 0 ].color = Vec3<float>( 0.5f, 0.5f, 0.5f );
     diffuseLights = new DX11StructuredBuffer( sizeof( DiffuseLight ), d3d11Device, d3d11Context );
     diffuseLights->setData( dl );
     diffuseLights->setLength( sizeof( dl ) );

+ 33 - 3
Model3D.cpp

@@ -618,6 +618,9 @@ Model3D::Model3D()
     textur = 0;
     skelett = 0;
     animations = new RCArray< AnimationData >();
+    ambientFactor = 1.f;
+    diffusFactor = 0.f;
+    specularFactor = 0.f;
 }
 
 // Destruktor
@@ -667,6 +670,12 @@ void Model3D::setModelDaten( Model3DData * data )
         skelett = skelett->release();
     model = data;
     skelett = model->copySkelett();
+    if( model )
+    {
+        this->ambientFactor = model->getAmbientFactor();
+        this->specularFactor = model->getSpecularFactor();
+        this->diffusFactor = model->getDiffusFactor();
+    }
 }
 
 // Setzt die zum Zeichnen zu benutzenden Texturen
@@ -678,6 +687,27 @@ void Model3D::setModelTextur( Model3DTextur * txt )
     textur = txt;
 }
 
+// Git den Factor an, mit dem das umgebungslicht (textur farbe) multipliziert wird
+//  f: der neue Faktor (von 0 bis 1, ambient + specular + diffuse = 1)
+void Framework::Model3D::setAmbientFactor( float f )
+{
+    this->ambientFactor = f;
+}
+
+// Git den Factor an, mit dem die Lichtfarbe von Lichtquellen multipliziert wird
+//  f: der neue Faktor (von 0 bis 1, ambient + specular + diffuse = 1)
+void Framework::Model3D::setDiffusFactor( float f )
+{
+    diffusFactor = f;
+}
+
+// Git den Factor an, mit dem das umgebungslicht (textur farbe) multipliziert wird
+//  f: der neue Faktor (von 0 bis 1, ambient + specular + diffuse = 1)
+void Framework::Model3D::setSpecularFactor( float f )
+{
+    specularFactor = f;
+}
+
 // Errechnet die Matrizen aller Knochen des Skeletts des Models
 //  viewProj: Die miteinander multiplizierten Kameramatrizen
 //  matBuffer: Ein Array mit Matrizen, der gefüllt werden soll
@@ -858,19 +888,19 @@ int Model3D::getDatenId() const
 // Git den Factor an, mit dem das umgebungslicht (textur farbe) multipliziert wird
 float Model3D::getAmbientFactor() const
 {
-    return model ? model->getAmbientFactor() : 0.f;
+    return ambientFactor;
 }
 
 // Git den Factor an, mit dem die Lichtfarbe von Lichtquellen multipliziert wird
 float Model3D::getDiffusFactor() const
 {
-    return model ? model->getDiffusFactor() : 0.f;
+    return diffusFactor;
 }
 
 // Git den Factor an, mit dem die Reflektion von Lichtquellen multipliziert wird
 float Model3D::getSpecularFactor() const
 {
-    return model ? model->getSpecularFactor() : 0.f;
+    return specularFactor;
 }
 
 // Gibt die Anzahl an Vertices zurück

+ 12 - 0
Model3D.h

@@ -276,6 +276,9 @@ namespace Framework
         Model3DData *model;
         Model3DTextur *textur;
         RCArray< AnimationData > *animations;
+        float ambientFactor;
+        float diffusFactor;
+        float specularFactor;
 
     public:
         // Konstruktor
@@ -294,6 +297,15 @@ namespace Framework
         // Setzt die zum Zeichnen zu benutzenden Texturen
         //  txt: Ein Liste mit Texturen zu den verschiedenen Polygonen zugeordnet
         __declspec( dllexport ) void setModelTextur( Model3DTextur *txt );
+        // Git den Factor an, mit dem das umgebungslicht (textur farbe) multipliziert wird
+        //  f: der neue Faktor (von 0 bis 1, ambient + specular + diffuse = 1)
+        __declspec( dllexport ) void setAmbientFactor( float f );
+        // Git den Factor an, mit dem die Lichtfarbe von Lichtquellen multipliziert wird
+        //  f: der neue Faktor (von 0 bis 1, ambient + specular + diffuse = 1)
+        __declspec( dllexport ) void setDiffusFactor( float f );
+        // Git den Factor an, mit dem die Reflektion von Lichtquellen multipliziert wird
+        //  f: der neue Faktor (von 0 bis 1, ambient + specular + diffuse = 1)
+        __declspec( dllexport ) void setSpecularFactor( float f );
         // Errechnet die Matrizen aller Knochen des Skeletts des Models
         //  viewProj: Die miteinander multiplizierten Kameramatrizen
         //  matBuffer: Ein Array mit Matrizen, der gefüllt werden soll