Ich bin ein wenig Anfänger bei OpenGL und ich habe die Beleuchtung einer Szene mit instanziierten Asteroiden implementiert, die einen Planeten umkreisen. Aus irgendeinem Grund scheint die einzige Ausgabe, die ich bekomme, die Umgebungsbeleuchtung für die Szene zu sein. Ich kann nicht diffus oder spiegelnd arbeiten.OpenGL-Fragment-Shader, der die Szene nicht beleuchtet
Hier ist ein Bild der Szene, wie sie ist (sehr schwer zu sehen ...) ambient only
Das Fragment-Shader-Code ist unten. FragPos, Normal und TexCoords sind wie erwartet. texture_diffuse1 ist die Planet/Asteroid-Textur, abhängig vom verwendeten Shader. LightPos kann bewegt werden, es wird durch den kleineren Planeten im Bild dargestellt (also direkt über dem zentralen Planeten) und viewPos ist die Kameraposition.
Weitere Informationen benötigt bitte lassen Sie mich wissen, aber dort ist der Rest des Codes wirklich geradlinig (Vertex Shader wirklich Standard, Assimp geladen Modelle in der Szene gezeichnet, Asteroiden instanziert 200.000 Mal).
Dank Jon
Fragment Shader:
`
#version 330 core
out vec4 fragColor;
in VS_OUT{
vec3 FragPos;
vec3 Normal;
vec2 TexCoords;
} fs_in;
uniform sampler2D texture_diffuse1;
uniform vec3 lightPos;
uniform vec3 viewPos;
void main()
{
vec3 color = texture(texture_diffuse1, fs_in.TexCoords).rgb;
//Ambient
vec3 ambient = 0.05f * color;
//Diffuse
vec3 lightDir = normalize(lightPos - fs_in.FragPos);
vec3 normal = normalize(fs_in.Normal);
float diff = max(dot(lightDir, normal), 0.0);
vec3 diffuse = diff * color;
//Specular
vec3 viewDir = normalize(viewPos - fs_in.FragPos);
float spec = 0.0f;
vec3 halfwayDir = normalize(lightDir + viewDir);
spec = pow(max(dot(normal, halfwayDir), 0.0), 32.0f);
vec3 specular = vec3(0.3f) * spec * color;
float distance = length(lightPos - fs_in.FragPos);
float attenuation = 1.0f/distance;
//fragColor = vec4(ambient + (diffuse + specular), 1.0f);
fragColor = vec4(pow(ambient + attenuation * (diffuse + specular),vec3(1.0f/2.2f)), 1.0f);
}
`
Wenn Ihre Lichtquelle und Ihr Planet 300 Einheiten entfernt sind, wird Ihr Planet nur von 1/300 ~ 0,003 Ihres Lichts betroffen sein. Ist das beabsichtigt? – Shiro
Es war Teil eines Tutorials zur Dämpfung gemischt mit Gammakorrektur. Ich habe das entfernt und es hat keinen Unterschied gemacht. –
Ich habe ein Programm zur Implementierung eines Solarsystems. Keine Instanziierung dort, aber es gibt Blitze (auch Schatten). Sie können schauen und vergleichen, vielleicht bemerken Sie, was falsch ist. Der Code ist hier: https://github.com/aromanro/SolarSystem –