#version 330 struct Textures { sampler2D texture_diffuse; sampler2D texture_specular; sampler2D texture_normal; // Add more as needed }; uniform Textures uTextures; in vec2 TexCoord; in vec3 Normal; in vec3 FragPos; out vec4 FragColor; void main() { // Example: Combine diffuse and specular textures vec4 diffuseColor = texture(uTextures.texture_diffuse, TexCoord); vec4 specularColor = texture(uTextures.texture_specular, TexCoord); // Simple lighting calculation (for demonstration) vec3 lightDir = normalize(vec3(0.5, 1.0, 0.3)); float diff = max(dot(Normal, lightDir), 0.0); vec3 diffuse = diff * diffuseColor.rgb; vec3 viewDir = normalize(-FragPos); // Assuming camera at origin vec3 reflectDir = reflect(-lightDir, Normal); float spec = pow(max(dot(viewDir, reflectDir), 0.0), 32); vec3 specular = spec * specularColor.rgb; vec3 result = diffuse + specular; FragColor = vec4(result, diffuseColor.a); }