Comment pouvez-vous ajouter la couleur rouge à la couleur verte et devenir noir?
Voici mon vertex shader:
#version 400
layout (location = 0) in vec3 VertexPosition;
layout (location = 1) in vec3 VertexNormal;
out vec3 LightIntensity;
struct LightInfo {
vec3 Position; // Light position in eye coords.
vec3 La; // Ambient light intensity
vec3 Ld; // Diffuse light intensity
vec3 Ls; // Specular light intensity
};
uniform LightInfo Light;
struct MaterialInfo {
vec3 Ka; // Ambient reflectivity
vec3 Kd; // Diffuse reflectivity
vec3 Ks; // Specular reflectivity
float Shininess; // Specular shininess factor
};
uniform MaterialInfo Material;
uniform mat4 ModelViewMatrix;
uniform mat3 NormalMatrix;
uniform mat4 ProjectionMatrix;
uniform mat4 MVP;
void main()
{
mat4 normalMatrixBetter = transpose(inverse(ModelViewMatrix));
vec3 normalEyeSpace = normalize(vec3(normalMatrixBetter * vec4(VertexNormal, 0.0)));
//vec3 tnorm = normalize(normalMatrixBetter * VertexNormal);
vec4 vertexPositionInEyeCoords = ModelViewMatrix * vec4(VertexPosition, 1.0);
vec3 s = normalize(vec3(Light.Position.xyz - vertexPositionInEyeCoords.xyz));
vec3 v = normalize(-vertexPositionInEyeCoords.xyz);
vec3 r = reflect(-s, normalEyeSpace);
vec3 ambient = Light.La * Material.Ka;
float sDotN = max(dot(s, normalEyeSpace), 0.0);
vec3 diffuse = Light.Ld * Material.Kd * sDotN;
vec3 spec = vec3(0.0);
if (sDotN > 0.0)
{
spec = Light.Ls * Material.Ks * pow(max(dot(r, v), 0.0), Material.Shininess);
}
// LightIntensity = ambient;
// LightIntensity = diffuse;
// LightIntensity = spec;
// LightIntensity = ambient + diffuse;
LightIntensity = /*ambient +*/ diffuse + spec;
gl_Position = MVP * vec4(VertexPosition, 1.0);
}
Et voici le fragment:
#version 400
in vec3 LightIntensity;
layout(location = 0) out vec4 FragColor;
void main()
{
FragColor = vec4(LightIntensity, 1.0) * 0.3;
}
Voici les coefficients d'intensité et réflexion de la lumière correspondant:
vec3 lightSourceAmbientIntensity(1.0f, 1.0f, 1.0f); // La, Light source ambient intensity
vec3 lightSourceDiffuseIntensity(10.0f, 10.0f, 10.0f); // Ld, Light source diffuse intensity
vec3 lightSourceSpecularIntensity(1.0f, 1.0f, 1.0f); // Ls, Light source specular intensity
vec3 ambientReflectivity(0.5f, 0.0f, 0.0f); // Ka,
vec3 diffuseReflectivity(1.0f, 0.0f, 0.0f); // Kd,
vec3 specularReflectivity(0.0f, 0.9f, 0.0f); // Ks,
GLfloat materialShineness = 1.0f;
Lorsque LightIntensity = spec;
je vois des triangles verts qui devraient être brillants et le reste des triangles sont noirs. Quand LightIntensity = diffuse;
je vois très beau ombrage rouge diffus sur tous les triangles que la lumière tombe et reflète à la position de la caméra. Mais quand j'écris LightIntensity = /*ambient +*/ diffuse + spec;
des triangles deviennent noirs est dans le cas de l'ombrage SEULEMENT SPECULAIRE. Et voici ma question: Comment pouvez-vous ajouter du rouge au vert et devenir noir ?? Pourquoi quand j'ajoute l'éclairage spéculaire dans les couleurs d'ombrage de Phong ne sont pas ajoutés correctement?
Ajout d'images. Veuillez considérer que mes formes tournent autour de l'axe Y. Merci! – Narek