Browse Source

Update shaders_basic_pbr.c

Ray 1 year ago
parent
commit
706f74bce0
1 changed files with 26 additions and 26 deletions
  1. 26 26
      examples/shaders/shaders_basic_pbr.c

+ 26 - 26
examples/shaders/shaders_basic_pbr.c

@@ -37,30 +37,31 @@
 // Types and Structures Definition
 // Types and Structures Definition
 //----------------------------------------------------------------------------------
 //----------------------------------------------------------------------------------
 
 
+// Light type
+typedef enum {
+    LIGHT_DIRECTIONAL = 0,
+    LIGHT_POINT,
+    LIGHT_SPOT
+} LightType;
+
 // Light data
 // Light data
 typedef struct {
 typedef struct {
-    int enabled;
     int type;
     int type;
+    int enabled;
     Vector3 position;
     Vector3 position;
     Vector3 target;
     Vector3 target;
     float color[4];
     float color[4];
     float intensity;
     float intensity;
 
 
-    int enabledLoc;
+    // Shader light parameters locations
     int typeLoc;
     int typeLoc;
+    int enabledLoc;
     int positionLoc;
     int positionLoc;
     int targetLoc;
     int targetLoc;
     int colorLoc;
     int colorLoc;
     int intensityLoc;
     int intensityLoc;
 } Light;
 } Light;
 
 
-// Light type
-typedef enum {
-    LIGHT_DIRECTIONAL = 0,
-    LIGHT_POINT,
-    LIGHT_SPOT
-} LightType;
-
 //----------------------------------------------------------------------------------
 //----------------------------------------------------------------------------------
 // Global Variables Definition
 // Global Variables Definition
 //----------------------------------------------------------------------------------
 //----------------------------------------------------------------------------------
@@ -119,16 +120,13 @@ int main()
     SetShaderValue(shader, lightCountLoc, &maxLightCount, SHADER_UNIFORM_INT);
     SetShaderValue(shader, lightCountLoc, &maxLightCount, SHADER_UNIFORM_INT);
 
 
     // Setup ambient color and intensity parameters
     // Setup ambient color and intensity parameters
+    float ambientIntensity = 0.02f;
     Color ambientColor = (Color){ 26, 32, 135, 255 };
     Color ambientColor = (Color){ 26, 32, 135, 255 };
     Vector3 ambientColorNormalized = (Vector3){ ambientColor.r/255.0f, ambientColor.g/255.0f, ambientColor.b/255.0f };
     Vector3 ambientColorNormalized = (Vector3){ ambientColor.r/255.0f, ambientColor.g/255.0f, ambientColor.b/255.0f };
-    float ambientIntensity = 0.02;
-
-    int albedoLoc = GetShaderLocation(shader, "albedo");
-    int ambientColorLoc = GetShaderLocation(shader, "ambientColor");
-    int ambientLoc = GetShaderLocation(shader, "ambient");
-    SetShaderValue(shader, ambientColorLoc, &ambientColorNormalized, SHADER_UNIFORM_VEC3);
-    SetShaderValue(shader, ambientLoc, &ambientIntensity, SHADER_UNIFORM_FLOAT);
+    SetShaderValue(shader, GetShaderLocation(shader, "ambientColor"), &ambientColorNormalized, SHADER_UNIFORM_VEC3);
+    SetShaderValue(shader, GetShaderLocation(shader, "ambient"), &ambientIntensity, SHADER_UNIFORM_FLOAT);
 
 
+    // Get location for shader parameters that can be modified in real time
     int emissiveIntensityLoc = GetShaderLocation(shader, "emissivePower");
     int emissiveIntensityLoc = GetShaderLocation(shader, "emissivePower");
     int emissiveColorLoc = GetShaderLocation(shader, "emissiveColor");
     int emissiveColorLoc = GetShaderLocation(shader, "emissiveColor");
     int textureTilingLoc = GetShaderLocation(shader, "tiling");
     int textureTilingLoc = GetShaderLocation(shader, "tiling");
@@ -156,12 +154,12 @@ int main()
     car.materials[0].maps[MATERIAL_MAP_NORMAL].texture = LoadTexture("resources/old_car_n.png");
     car.materials[0].maps[MATERIAL_MAP_NORMAL].texture = LoadTexture("resources/old_car_n.png");
     car.materials[0].maps[MATERIAL_MAP_EMISSION].texture = LoadTexture("resources/old_car_e.png");
     car.materials[0].maps[MATERIAL_MAP_EMISSION].texture = LoadTexture("resources/old_car_e.png");
     
     
-    // Old car model texture tiling parameter can be stored in the Material struct if required (CURRENTLY NOT USED)
-    // NOTE: Material.params[4] are available for generic parameters storage (float)
-    Vector2 carTextureTiling = (Vector2){ 0.5f, 0.5f };
-
     // Load floor model mesh and assign material parameters
     // Load floor model mesh and assign material parameters
+    // NOTE: A basic plane shape can be generated instead of being loaded from a model file
     Model floor = LoadModel("resources/models/plane.glb");
     Model floor = LoadModel("resources/models/plane.glb");
+    //Mesh floorMesh = GenMeshPlane(10, 10, 10, 10);
+    //GenMeshTangents(&floorMesh);      // TODO: Review tangents generation
+    //Model floor = LoadModelFromMesh(floorMesh);
 
 
     // Assign material shader for our floor model, same PBR shader 
     // Assign material shader for our floor model, same PBR shader 
     floor.materials[0].shader = shader;
     floor.materials[0].shader = shader;
@@ -176,7 +174,9 @@ int main()
     floor.materials[0].maps[MATERIAL_MAP_METALNESS].texture = LoadTexture("resources/road_mra.png");
     floor.materials[0].maps[MATERIAL_MAP_METALNESS].texture = LoadTexture("resources/road_mra.png");
     floor.materials[0].maps[MATERIAL_MAP_NORMAL].texture = LoadTexture("resources/road_n.png");
     floor.materials[0].maps[MATERIAL_MAP_NORMAL].texture = LoadTexture("resources/road_n.png");
 
 
-    // Floor texture tiling parameter
+    // Models texture tiling parameter can be stored in the Material struct if required (CURRENTLY NOT USED)
+    // NOTE: Material.params[4] are available for generic parameters storage (float)
+    Vector2 carTextureTiling = (Vector2){ 0.5f, 0.5f };
     Vector2 floorTextureTiling = (Vector2){ 0.5f, 0.5f };
     Vector2 floorTextureTiling = (Vector2){ 0.5f, 0.5f };
 
 
     // Create some lights
     // Create some lights
@@ -209,10 +209,10 @@ int main()
         SetShaderValue(shader, shader.locs[SHADER_LOC_VECTOR_VIEW], cameraPos, SHADER_UNIFORM_VEC3);
         SetShaderValue(shader, shader.locs[SHADER_LOC_VECTOR_VIEW], cameraPos, SHADER_UNIFORM_VEC3);
 
 
         // Check key inputs to enable/disable lights
         // Check key inputs to enable/disable lights
-        if (IsKeyPressed(KEY_Y)) { lights[0].enabled = !lights[0].enabled; }
-        if (IsKeyPressed(KEY_G)) { lights[1].enabled = !lights[1].enabled; }
-        if (IsKeyPressed(KEY_R)) { lights[2].enabled = !lights[2].enabled; }
-        if (IsKeyPressed(KEY_B)) { lights[3].enabled = !lights[3].enabled; }
+        if (IsKeyPressed(KEY_ONE)) { lights[2].enabled = !lights[2].enabled; }
+        if (IsKeyPressed(KEY_TWO)) { lights[1].enabled = !lights[1].enabled; }
+        if (IsKeyPressed(KEY_THREE)) { lights[3].enabled = !lights[3].enabled; }
+        if (IsKeyPressed(KEY_FOUR)) { lights[0].enabled = !lights[0].enabled; }
 
 
         // Update light values on shader (actually, only enable/disable them)
         // Update light values on shader (actually, only enable/disable them)
         for (int i = 0; i < MAX_LIGHTS; i++) UpdateLight(shader, lights[i]);
         for (int i = 0; i < MAX_LIGHTS; i++) UpdateLight(shader, lights[i]);
@@ -253,7 +253,7 @@ int main()
                 
                 
             EndMode3D();
             EndMode3D();
             
             
-            DrawText("Toggle lights: [Y][R][G][B]", 10, 40, 20, LIGHTGRAY);
+            DrawText("Toggle lights: [1][2][3][4]", 10, 40, 20, LIGHTGRAY);
 
 
             DrawText("(c) Old Rusty Car model by Renafox (https://skfb.ly/LxRy)", screenWidth - 320, screenHeight - 20, 10, LIGHTGRAY);
             DrawText("(c) Old Rusty Car model by Renafox (https://skfb.ly/LxRy)", screenWidth - 320, screenHeight - 20, 10, LIGHTGRAY);