Presentation is loading. Please wait.

Presentation is loading. Please wait.

1 MAE152 Computer Graphics for Scientists and Engineers Lighting in OpenGL.

Similar presentations


Presentation on theme: "1 MAE152 Computer Graphics for Scientists and Engineers Lighting in OpenGL."— Presentation transcript:

1 1 MAE152 Computer Graphics for Scientists and Engineers Lighting in OpenGL

2 2 Graphics: Conceptual Model Real Object Human Eye Display Device Graphics System Synthetic Model Synthetic Camera Real Light Synthetic Light Source

3 3 Lights, Surfaces, and Imaging Proj. Plane Viewer Objects

4 4 Lights, Surfaces, and Imaging Proj. Plane Viewer Light Source Objects

5 5 Modes of Interaction of Light with Materials Specular Surface Diffuse Surface Translucent Surface Note: Any given surface can have some of all three properties.

6 6 Illuminating Surfaces z x y We can define illumination function: To obtain total light, must integrate over total surface.

7 7 Simplified 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

8 8 Light Sources Ambient light -no identifiable source or direction -hack for replacing true global illumination =(light bouncing off from other objects)

9 9 Ambient Light Simulates situations where light sources are designed to produce uniform lighting throughout a scene. Characterized by a scalar intensity, I a, that is identical at every point in the scene. Although every surface receives the same illumination, each surface can reflect the light differently.

10 10 Point 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.

11 11 Light Sources Types of light sources - glLightfv(GL_LIGHT0,GL_POSITION,light[]) -directional/parallel lights =real-life example: sun =infinitely far source: homogeneous co-ord. w=0 -point lights =same intensity in all directions -spot lights =limited set of directions: point+direction+cutoff angle

12 12 Spotlights Spotlights are point sources for which the angle through which light has been emitted has been limited.  l s

13 13 Distant 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.

14 14 Lighted Sphere Demo and Source Code

15 15 Reflection Rough Surface: Light is reflected equally in all directions. Diffuse Smooth Surface: Light is reflected at an angle near to the incident angle. Specular

16 16 Vectors Used by Phong 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. n l r v p Viewer

17 17 Elements of the Phong Lighting Model At each point p there is a reflection matrix for the ith light source: Assuming the calculations will be done separately for each primary, we can sum over light sources to get: At each point p there is an illumination matrix from the ith light source: r ed g reen b lue a mbient d iffuse s pecular

18 18 Elements of the Phong Lighting Model Ambient 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.

19 19 Elements of the Phong Lighting Model Diffuse Reflection Intensity of illumination is dependent upon the incidence angle of light from the source: Adding a term for attenuation with distance from source:  l n

20 20 Elements of the Phong Lighting Model Specular 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: n l r v p Viewer

21 21 The Complete Lighting Model Distance (Attenuation) Ambient DiffuseSpecular Emission Global Ambient n l r v p Viewer

22 22 Calculation 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: p0 p1 p2 n

23 23 Calculation of Normals Mathematically Defined Surface: Sphere Sphere is defined implicitly by equation:

24 24 Specification 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); You have to calculate the normals yourself.

25 25 Shading in OpenGL: Flat 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.

26 26 Mach Band Effect (Mach, 1865) Color Science, Concepts and Methods Wyszecki, Stiles

27 27 Mach Band Effect

28 28 Mach Band Effect

29 29 Shading in OpenGL: Smooth 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.

30 30 Gouraud Shading

31 31 Lighting Implementation in OpenGL

32 32 Lighted Sphere Demo and Source Code

33 33 Enable Depth Buffer For Hidden Surface Removal //before enabling while (1) { get_viewing_point_from_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(); }

34 34 Specifying Light Sources in OpenGL General form: glLightf(source, parameter, value); glLightfv(source, parameter, *array); source is one of at least eight lights: GL_LIGHT i 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).

35 35 Specifying 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.  l s

36 36 Specifying 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 n l r v p Viewer

37 37 Enabling the Lights and Lighting Enabling a specific light source: glEnable(GL_LIGHT i ); Enabling the lighting model: glEnable (GL_LIGHTING);

38 38 Specifying 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

39 39 1. Ambient light in a scene with 3 spheres. 2. Diffuse light hitting the surface of 3 spheres. Notice, the spheres look matte and almost plastic like. 3. The three spheres illuminated by specular light. Imagine an extremely shiny billiard ball and the sheen it creates Types of Light and effects

40 40 Demo Rotating light

41 41 Creating Light Sources in OpenGL void glLight{if}(GLenum light, GLenum pname, TYPE param); void glLight{if}v(GLenum light, GLenum pname, TYPE *param);

42 42 Light 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);

43 43 Light 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

44 44 Light Sources in OpenGL (cont.) Attenuation factor -d = distance between the light’s position and the vertex -k c = GL_CONSTANT_ATTENUATION -k l = GL_LINEAR_ATTENUATION -k q = GL_QUADRATIC_ATTENUATION

45 45 Light 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.

46 46 Selecting a Lighting Model in OpenGL void glLightModel{if}(GLenum pname, TYPE param); void glLightModel{if}v(GLenum pname, TYPE *param);

47 47 Lighting Model in OpenGL (cont.) Global ambient light -Ambient light that’s 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);

48 48 Lighting 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);

49 49 Multiple Lights in OpenGL At least, 8 lights - GL_LIGHT0, GL_LIGHT1,..., GL_LIGHT7 Increasing the number of lights adversely affects performance

50 50 Defining Material Properties in OpenGL void glMaterial{if}(GLenum face, GLenum pname, TYPE param); void glMaterial{if}v(GLenum face, GLenum pname, TYPE *param);

51 51 Material Properties in OpenGL (Cont.) Diffuse and ambient reflection -Affect the color of the diffuse and ambient light reflected by an object -Ambient term = ambient light *ambient material -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);

52 52 Example 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);

53 53 Material 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

54 54 Material 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);

55 55 End of Lighting


Download ppt "1 MAE152 Computer Graphics for Scientists and Engineers Lighting in OpenGL."

Similar presentations


Ads by Google