Post on 22-Dec-2015
CS425CS425
OpenGL MaterialsOpenGL Materials
What Color Is It?What Color Is It?
green & blue absorbed
white light
Looks red
What Color Is It?What Color Is It?
red & blue absorbed
white light
Looks green
What Color Is It?What Color Is It?
blue absorbed
white light
Looks yellow
What Color Is It?What Color Is It?
red absorbed
red light?
cyan
What Color Is It?What Color Is It?
red absorbed
red light
cyanLooks black
What Color Is It?What Color Is It?
blue absorbed
magenta light?
What Color Is It?What Color Is It?
blue absorbed
magenta light
Looks red
Material Response to LightMaterial Response to Light
• The material specified in OpenGL can have three different responses to the light hitting it plus one emissive characteristic.
• You can separately specify the response to:– Ambient– Diffuse– Specular
• And you can specify that the material “emits light”
glMaterial{if}v(face, pname, param)glMaterial{if}v(face, pname, param)
• face– GL_FRONT– GL_BACK– GL_FRONT_AND_BACK
glMaterial{if}v(face, pname, param)glMaterial{if}v(face, pname, param)
• pname– GL_AMBIENT (ambient color of material) – GL_DIFFUSE (diffuse color of material)– GL_AMBIENT_AND_DIFFUSE (both)– GL_SPECULAR (specular color of material) – GL_SHININESS (specular exponent)– GL_EMISSION (emissive color of material)– GL_COLOR_INDEXES (ambient, diffuse, and
specular color indices)
glMaterial{if}v(face, pname, param ) glMaterial{if}v(face, pname, param )
• paramThe value for the pname’d material property
• ExampleGLfloat mat_amb_diff [ ] = {0.1, 0.5, 0.8, 1.0};
glMaterialfv( GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, mat_amb_diff);
NO
Ambient
(.7, .7, .7)
Ambient
(.8, .8, .2)
Ambient
Diffuse only (.1, .5, .8. 1.0)
diffuse & specular (low shininess)
diffuse & specular (high shininess)
+ (.3,.2,.2,.0) emmissive, no specular
specular (1,1,1,1) shininess (5.0)
specular (1,1,1,1)shininess (100.0)
Nate Robbins LightmaterialNate Robbins Lightmaterial
Color Material ModeColor Material Mode
• I didn’t find this previously.
• Causes the material property specified to track the value of the current color (glColor*)
• glColorMaterial(face, mode)
• “face” and “mode” are same as for glMaterial.
• Must use glEnable (see example)
glColorMaterial exampleglColorMaterial example
glEnable(GL_COLOR_MATERIAL);
glColorMaterial(GL_FRONT, GL_DIFFUSE);
glColor3f(0.2, 0.5, 0.8);
/* draw some objects */
glColorMaterial(GL_FRONT, GL_SPECULAR);
/*glColor no longer changes diffuse reflection, it now changes secular reflection */
glColor3f(0.9, 0.0, 0.2);
/* draw some other objects */
glDisable(GL_COLOR_MATERIAL);
colormat.ccolormat.c
Two Sided MaterialsTwo Sided Materials
GLfloat outside = {0.2, 1.0, 1.0, 1.0};
GLfloat inside = {1.0, 0.5, 0.5, 1.0};
…
glMaterialfv(GL_FRONT, GL_DIFFUSE, outside);
glMaterialfv(GL_BACK, GL_DIFFUSE, inside);
…
glLightModelf(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE);
Additional Clipping PlaneAdditional Clipping Plane
GLdouble eqn[ ] = {0.0, -1.0, 0.07, 0.5};…glEnable(GL_CLIP_PLANE0);…glClipPlane(GL_CLIP_PLANE0, eqn);
A B C D Plane equation
See cutting.c (handout)
Two Sided Materials Two Sided Materials with Cutting Planewith Cutting Plane
OpenGL AttenuationOpenGL Attenuation
Same formula that Denbigh gave.
c = constant factor
l = linear factor
q = quadratic factor d = distance
Function CallsFunction Calls
• You use the glLightf function to select attenuation factors. Default values are kc=1, kl=0, kq=0.– glLightf(GL_LIGHT0, GL_CONSTANT_ATTENUATION, 2.0);
– glLightf(GL_LIGHT0, GL_LINEAR_ATTENUATION, 0.0);
– glLlightf(GL_LIGHT0, GL_QUADRATIC_ATTENUATION, 0.0);
kc=1kl=0kq=0
kc=0kl=1kq=0
kc=0kl=0.5kq=0
kc=0kl=0.2kq=0
kc=0kl=0.1kq=0
kc=0kl=0.01kq=0
kc=0kl=0kq=0.1
kc=0kl=0kq=0.001
kc=1kl=0kq=0.001
+ =