Hi, I’m having a problem to get GL_ABMIENT and GL_DIFFUSE for the material to work; they seem to simply be set to the color which I have previously specified with glColor4f. However, GL_SPECULAR does work. I’m using the code below to specify some flags that OpenGL should use as well as the colors of the light and the material:
// OpegGL flags
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_COLOR_MATERIAL); // Enables color to work together with lighting
glEnable(GL_NORMALIZE);
glEnable(GL_DEPTH_TEST);
//glShadeModel(GL_SMOOTH); // Enable Gouraud shading
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, 0); // Unbind texture
// Light and materials
glColor4f(1, 1, 1, 1); // Set current color to white
GLfloat light_position[] = {1.0f, 0.0f, 0.0f, 0.0f}; // From the right
GLfloat light_color[] = {1.0f, 1.0f, 1.0f, 1.0f}; // White light
GLfloat ambient_color[] = {0.2f, 0.2f, 0.2f, 1.0f}; // Weak white light
GLfloat mat_shininess[] = {50.0};
GLfloat mat_ambientColor[] = {0.0f, 0.0f, 0.0f, 1.0f};
GLfloat mat_diffuseColor[] = {0.0f, 0.0f, 0.0f, 1.0f};
GLfloat mat_specularColor[] = {1.0f, 0.0f, 0.0f, 1.0f};
// Set current material
glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess);
glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambientColor);
glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuseColor);
glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specularColor);
// Set light
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
glLightfv(GL_LIGHT0, GL_AMBIENT, ambient_color);
glLightfv(GL_LIGHT0, GL_DIFFUSE, light_color);
glLightfv(GL_LIGHT0, GL_SPECULAR, light_color);
As you can see, I’m trying to set all the reflecting properties of the material to black except from the specular reflectance, which I set to red. However, when I render an object (I use a sphere for trying out the settings) afterwards, mat_ambientColor and mat_diffuseColor don’t have any effect - the sphere gets white, as specified by the glColor4f call (I have tried feeding this function with other colors too). mat_specularColor on the other hand, does have effect since the specular reflectance is red and is totally unaffected by the color I specify with glColor.
Why don’t I get the right ambient and diffuse colors on the material?