CS425 OpenGL Materials. What Color Is It? green & blue absorbed white light Looks red

Preview:

Citation preview

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

+ =

Recommended