سؤال

I think this is an extremely stupid and newbie question, but then I am a newbie in graphics and openGL. Having drawn a sphere and put a light source nearby, also having specified ambient light, I started experimenting with light and material values and came to a surprising conclusion: the colors which we specify with glColor* do not matter at all when lighting is enabled. Instead, the equivalent is the material's ambient component. Is this conclusion correct? Thanks

هل كانت مفيدة؟

المحلول

If the lighting is enabled, then instead of the vertex color, the material color (well, colors - there are several of them for different types of response to light) is used. Material colors are specified by glMaterial* functions.

If you want to reuse your code, you can use glEnable(GL_COLOR_MATERIAL) and glColorMaterial(GL_AMBIENT_AND_DIFFUSE) to have your old glColor* calls mapped to material color automatically.

(And please switch to shaders as fast as possible - the shader approach is both easier and more powerful)

نصائح أخرى

I suppose you don't use fragment shader yet. From glprogramming.com:

vertex color =
    the material emission at that vertex + 
    the global ambient light scaled by the materials ambient
    property at that vertex + 
    the ambient, diffuse, and specular contributions from all the
    light sources, properly attenuated

So yes, vertex color is not used.

Edit: You can also look for GL lightning equation in GL specification (you have one nearby, do you? ^^)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top