230 likes | 347 Views
CS425. OpenGL Materials. What Color Is It?. white light. green & blue absorbed. Looks red. What Color Is It?. white light. red & blue absorbed. Looks green. What Color Is It?. white light. blue absorbed. Looks yellow. What Color Is It?. red light. ?. red absorbed. cyan.
E N D
CS425 OpenGL Materials
What Color Is It? white light green & blue absorbed Looks red
What Color Is It? white light red & blue absorbed Looks green
What Color Is It? white light blue absorbed Looks yellow
What Color Is It? red light ? red absorbed cyan
What Color Is It? red light red absorbed cyan Looks black
What Color Is It? magenta light ? blue absorbed
What Color Is It? magenta light blue absorbed Looks red
Material 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) • face • GL_FRONT • GL_BACK • GL_FRONT_AND_BACK
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)
param The value for the pname’d material property Example GLfloat mat_amb_diff [ ] = {0.1, 0.5, 0.8, 1.0}; glMaterialfv( GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, mat_amb_diff); glMaterial{if}v(face, pname, param )
diffuse & specular (low shininess) diffuse & specular (high shininess) + (.3,.2,.2,.0) emmissive, no specular Diffuse only (.1, .5, .8. 1.0) NO Ambient specular (1,1,1,1) shininess (5.0) specular (1,1,1,1) shininess (100.0) (.7, .7, .7) Ambient (.8, .8, .2) Ambient
Color 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 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);
Two 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 Plane A B C D Plane equation GLdouble eqn[ ] = {0.0, -1.0, 0.07, 0.5}; … glEnable(GL_CLIP_PLANE0); … glClipPlane(GL_CLIP_PLANE0, eqn); See cutting.c (handout)
Same formula that Denbigh gave. OpenGL Attenuation c = constant factor l = linear factor q = quadratic factor d = distance
Function 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=0 kl=0 kq=0.001 kc=0 kl=1 kq=0 kc=0 kl=0.5 kq=0 kc=0 kl=0.2 kq=0 kc=0 kl=0.1 kq=0 kc=0 kl=0.01 kq=0 kc=0 kl=0 kq=0.1 kc=1 kl=0 kq=0.001 kc=1 kl=0 kq=0 + =