Title: MAE152 Computer Graphics for Scientists and Engineers
1MAE152Computer Graphics for Scientists and
Engineers
2Graphics Conceptual Model
Real Light
Human Eye
Real Object
Synthetic Light Source
Synthetic Camera
Human Eye
Synthetic Model
Real Object
Display Device
Graphics System
3Lights, Surfaces, and Imaging
Objects
Proj. Plane
Viewer
4Lights, Surfaces, and Imaging
5Modes of Interaction of Light with Materials
Note Any given surface can have some of all
three properties.
6Illuminating Surfaces
7Simplified Model
- Exact model can easily get complicated!
- Three simplifications help.
- 1. We can consider four classes of light sources
- ambient
- point
- spotlight
- distant
- 2. Human color perception allows us to consider
illumination - function in terms of the three primary colors.
- 3. We can neglect (OpenGL caveats)
-
- multiple reflections
- obstruction of light path by objects
8Light Sources
- Ambient light
- no identifiable source or direction
- hack for replacing true global illumination
- (light bouncing off from other objects)
9Ambient Light
Simulates situations where light sources are
designed to produce uniform lighting throughout a
scene.
Characterized by a scalar intensity, Ia , that is
identical at every point in the scene.
Although every surface receives the same
illumination, each surface can reflect the light
differently.
10Point Sources
An ideal point source radiates equally in all
directions. It can be characterized by
Intensity of illumination from a point source is
proportional to the inverse square of the
distance between the point and the illuminated
surface.
11Light Sources
- Types of light sources
- glLightfv(GL_LIGHT0,GL_POSITION,light)
- directional/parallel lights
- real-life example sun
- infinitely far source homogeneous co-ord. w0
- point lights
- same intensity in all directions
- spot lights
- limited set of directions
- pointdirectioncutoff angle
12Spotlights
Spotlights are point sources for which the angle
through which light has been emitted has been
limited.
13Distant Sources
Most shading calculations require the direction
from the point on a surface to the light source.
As light sources are moved to larger distances,
this direction approaches a constant. Therefore
the point source location will be replaced by a
vector indicating the direction of the source.
14Lighted Sphere Demo and Source Code
15Reflection
16Vectors Used byPhong Lighting Model
p is an arbitrary point on a surface. n is the
unit normal to the surface at p. l is a unit
vector in the direction of the light source. r
is a unit vector in the direction of a perfectly
(specular) reflection v is a unit vector in
the direction of the viewer.
17Elements of the Phong Lighting Model
18Elements of the Phong Lighting ModelAmbient
Reflection
The intensity of ambient light is the same at
every point on the surface. The percentage of
light reflected is given by
Note that the ambient reflection terms can be
different for red, green and blue.
19Elements of the Phong Lighting ModelDiffuse
Reflection
Intensity of illumination is dependent upon the
incidence angle of light from the source
Adding a term for attenuation with distance from
source
20Elements of the Phong Lighting ModelSpecular
Reflection
For a shiny surface, most light is reflected
around vector r, corresponding to a reflected
angle equal to the angle of incidence. If ? is
the angle between v and r,
Adding a distance term, and expressing the cosine
in terms of a dot product
21The Complete Lighting Model
22Calculation of Normals
Normal exists at every point for mathematically
defined smooth surfaces. Exists for each
polygon in surface defined by flat polygons. What
about the shared lines/points? Polygonal Case
p2
p1
n
p0
23Calculation of NormalsMathematically Defined
Surface Sphere
Sphere is defined implicitly by equation
24Specification of the Normal in OpenGL
Specification of the current normal is modal and
associated with vertices. glNormal3f(nx,ny,nz)
glNormal3fv(pointer_to_normal_vector)
25Shading in OpenGLFlat Shading
OpenGL uses the normal of the first vertex of a
single polygon to determine the color. Requested
by glShadeModel(GL_FLAT) Flat shading
exaggerates the visual effect of the boundaries
between polygons due to the Mach band effect.
26Mach Band Effect(Mach, 1865)
Color Science, Concepts and Methods Wyszecki,
Stiles
27Mach Band Effect
28Mach Band Effect
29Shading in OpenGLSmooth Shading
- Requested by glShadeModel(GL_SMOOTH)
- Lighting calculations will be done at each vertex
using the material properties, and the vectors v
and l calculated for that vertex. - Bilinear interpolation is used to determine color
values in the interior of the polygon. - Gouraud Shading
- Normal at a vertex is the normalized average of
the normals of the polygons that share that
vertex.
30Gouraud Shading
31Lighting Implementation in OpenGL
32Lighted Sphere Demo and Source Code
33Enable Depth BufferFor Hidden Surface Removal
//before enabling while (1) get_viewing_point_f
rom_mouse_position() glClear(GL_COLOR_BUFFER_BIT)
draw_3d_object_A() draw_3d_object_B()
//after enabling glutInitDisplayMode (GLUT_DEPTH
.... ) glEnable(GL_DEPTH_TEST) ... while (1)
glClear(GL_COLOR_BUFFER_BIT
GL_DEPTH_BUFFER_BIT) get_viewing_point_from_mouse
_position() draw_3d_object_A() draw_3d_object_B(
)
34Specifying Light Sources in OpenGL
- General form glLightf(source, parameter, value)
- glLightfv(source, parameter, array)
- source is one of at least eight lights
GL_LIGHTi - Parameters
- GL_AMBIENT contains four values that specify the
ambient RGBA - intensity of the light. Default is (0.0, 0.0,
0.0, 1.0). - GL_DIFFUSE contains four values that specify the
diffuse RGBA - intensity of the light. Default is (1.0, 1.0,
1.0, 1.0). - GL_SPECULAR contains four values that specify the
secular RGBA - intensity of the light. Default is (1.0, 1.0,
1.0, 1.0).
35Specifying Light Sources in OpenGL
- General form glLightf(source, parameter, value)
- glLightfv(source, parameter, array)
- GL_POSITION specifies the position of the light
in homogeneous - object coordinates. If the w component is zero,
the light - is treated as a directional source.
- GL_SPOT_DIRECTION specifies the direction of the
light in - homogeneous object coordinates. Default is (0.0,
0.0, -1.0) - GL_SPOT_EXPONENT spotlight exponent, default 0.0
- GL_SPOT_CUTOFF spot cutoff angle in 0,90 or
(default) 180.
36Specifying Light Sources in OpenGL
- General form glLightf(source, parameter, value)
- glLightfv(source, parameter, array)
- GL_CONSTANT_ATTENUATION constant atten. factor,
default 1.0 - GL_LINEAR_ATTENUATION linear atten. factor,
default 0.0 - GL_QUADRATIC_ATTENUATION quadratic atten. factor,
default 0.0
37Enabling the Lights and Lighting
Enabling a specific light source
glEnable(GL_LIGHTi ) Enabling the lighting
model glEnable (GL_LIGHTING)
38Specifying Materials in OpenGL
- General form glMaterialf(face, parameter,value)
- glMaterialfv(face, parameter,array)
- face is GL_FRONT, GL_BACK, GL_FRONT_AND_BACK
- parameter is
- GL_AMBIENT four values that specify the ambient
RGBA - reflectance of the material. (0.2,0.2,0.2,1.0)
- GL_DIFFUSE four values that specify the diffuse
RGBA - reflectance of the material. (0.8,0.8,0.8,1.0)
- GL_SPECULAR four values that specify the ambient
RGBA - reflectance of the material. (0.0,0.0,0.0,1.0)
- GL_SHININESS specifies the specular reflectance
- exponent of the material. 0.0
39Types of Light and effects
40 41Creating Light Sources in OpenGL
- void glLightif(GLenum light, GLenum pname, TYPE
param) - void glLightifv(GLenum light, GLenum pname,
TYPE param)
42Light Sources in OpenGL (cont.)
- Color for ambient, diffuse, and specular light
- GLfloat light_ambient 0.0, 0.0, 0.0, 1.0
- GLfloat light_diffuse 1.0, 1.0, 1.0, 1.0
- GLfloat light_specular 1.0, 1.0, 1.0, 1.0
- glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient)
- glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse)
- glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular)
43Light Sources in OpenGL (cont.)
- Directional light
- GLfloat light_position 1.0, 1.0, 1.0, 0.0
- glLightfv(GL_LIGHT0, GL_POSITION,
light_position) - Positional light
- when w is nonzero, (x, y, z) specify the location
44Light Sources in OpenGL (cont.)
- Attenuation factor
- d distance between the lights position and the
vertex - kc GL_CONSTANT_ATTENUATION
- kl GL_LINEAR_ATTENUATION
- kq GL_QUADRATIC_ATTENUATION
45Light Sources in OpenGL (cont.)
- Spotlights
- GL_SPOT_CUTOFF
- the angle between the axis of the cone and a ray
along the edge of the cone - GL_SPOT_DIRECTION
- the axis of the cone of light
- GL_SPOT_EXPONENT
- to control how concentrated the light is.
46Selecting a Lighting Model in OpenGL
- void glLightModelif(GLenum pname, TYPE param)
- void glLightModelifv(GLenum pname, TYPE param)
47Lighting Model in OpenGL (cont.)
- Global ambient light
- Ambient light thats not from any particular
light source -
- GLfloat lmodel_ambient 0.2, 0.2, 0.2, 1.0
- glLightModelfv(GL_LIGHT_MODEL_AMBIENT,
lmodel_ambient) - Local or infinite viewpoint
- With infinite viewpoint, the direction between it
and any vertex remains constant - A local viewpoint yields more realistic results,
but decreased performance - glLightModelfv(GL_LIGHT_MODEL_LOCAL_VIEWER,
GL_TRUE)
48Lighting Model in OpenGL (cont.)
- Two-sided lighting
- glLightModel(LIGHT_MODEL_TWO_SIDE, GL_TRUE)
- Enabling lighting
- glEnable(GL_LIGHTING)
- glEnable(GL_LIGHT0)
- glDisable(GL_LIGHTING)
49Multiple Lights in OpenGL
- At least, 8 lights
- GL_LIGHT0, GL_LIGHT1,..., GL_LIGHT7
- Increasing the number of lights adversely affects
performance
50Defining Material Properties in OpenGL
- void glMaterialif(GLenum face, GLenum pname,
TYPE param) - void glMaterialifv(GLenum face, GLenum pname,
TYPE param)
51Material Properties in OpenGL (Cont.)
- Diffuse and ambient reflection
- Affect the color of the diffuse and ambient light
reflected by an object - Ambient term ambientlightambientmaterial
- Diffuse term
- For real-world objects, diffuse and ambient
reflectance are normally the same color - GLfloat mat_amb_diff 0.1, 0.5, 0.8, 1.0
- glMaterialfv(GL_FRONT_AND_BACK,
GL_AMBIENT_AND_DIFFUSE, mat_amb_diff)
52Example
- GLfloat a 0.1, 0.5, 0.8, 1.0
- GLfloat b 0.1, 0.5, 0.8, 1.0
- GLfloat c 0.1, 0.5, 0.8, 1.0
- GLfloat d 0.0, 0.0, 0.0, 1.0
- glMaterialfv(GL_FRONT, GL_AMBIENT, a)
- glMaterialfv(GL_FRONT, GL_DIFFUSE, b)
- glMaterialfv(GL_FRONT, GL_SPECULAR, c)
- glMaterialfv(GL_FRONT, GL_SHININESS, 50)
- glMaterialfv(GL_FRONT, GL_EMISSION, d)
- glutSolidSphere(1.0, 16, 16)
53Material Properties in OpenGL (Cont.)
- Specular reflection
- GL_SPECULAR specifies the color
- GL_SHININESS controls the size and brightness of
the highlight - Specular term
- Emission
- An object appears to give off light
- GL_EMISSION specifies the color
54Material Properties in OpenGL (Cont.)
- Changing material properties
- When only a single property is changed, use
glColorMaterial(), instead of glMaterial() for
performance - glEnable(GL_COLOR_MATERIAL)
- glColorMaterial(GL_FRONT, GL_DIFFUSE)
- glColor3f(0.2, 0.5, 0.8)
- // draw some object here
- glColorMaterial(GL_FRONT, GL_SPECULAR)
- glColor3f(0.9, 0.0, 0.2)
- // draw other objects here
- glDisable(GL_COLOR_MATERIAL)
55End of Lighting