OpenGL Color and Lighting 2003 Spring Keng Shih-Ling.

Slides:



Advertisements
Similar presentations
Virtual Realism LIGHTING AND SHADING. Lighting & Shading Approximate physical reality Ray tracing: Follow light rays through a scene Accurate, but expensive.
Advertisements

1 MAE152 Computer Graphics for Scientists and Engineers Lighting in OpenGL.
Computer Graphics - Class 10
OpenGL Son of the Survival Guide. Last Time on OpenGL Windowing … glut Rendering Primatives Transformations Projections State Management.
Shading in OpenGL CS4395: Computer Graphics 1 Mohan Sridharan Based on slides created by Edward Angel.
CS 4731: Computer Graphics Lecture 16: Illumination Models Part 2 Emmanuel Agu.
Shading in OpenGL Ed Angel Professor of Computer Science, Electrical and Computer Engineering, and Media Arts University of New Mexico.
Hidden Surfaces and Shading CS BSP Tree T1T1 T2T2 E if (f 1 (E) < 0) then draw T 1 draw T 2 else draw T 2 draw T 1 f 1 (p) = 0 is the.
Normals Specifying the normal –void glNormal3d( GLdouble nx, GLdouble ny, GLdouble nz ); When using lighting effects, normals must be defined for each.
Now Playing: Multiply Jamie Lidell from Multiply Released June 13, 2005.
CS5500 Computer Graphics March 26, Shading Reference: Ed Angel’s book.
Computer Graphics (Spring 2008) COMS 4160, Lecture 14: OpenGL 3
CS425 OpenGL Materials. What Color Is It? green & blue absorbed white light Looks red.
Illumination and Shading
Lighting & Material. Example 1/5 #include ” glut.h ” void display(); void reshape(int, int); void lighting(); int main(int argc, char** argv) { glutInit(&argc,
Illumination and Shading. Illumination (Lighting) Model the interaction of light with surface points to determine their final color and brightness OpenGL.
Development of Interactive 3D Virtual World Applications
Color in OpenGL (Chapter 4) Presented by: Stacy C. Lovell.
Computer Graphics Lighting.
Display Issues Week 5 David Breen Department of Computer Science
1 Graphics CSCI 343, Fall 2013 Lecture 20 Lighting and Shading III.
Shading in OpenGL.
19/17/ :25 UML Graphics: Conceptual Model Real Object Human Eye Display Device Graphics System Synthetic Model Synthetic Camera Real Light Synthetic.
Shading 03/19/2003. Lighting Principles Lighting based on how objects reflect light –Surface characteristics –Light color and direction –Global lighting.
Shading and Illumination. OpenGL Shading Without ShadingWith Shading.
OpenGL - Lighting, Shading and Material Properties
Computer Graphics I, Fall 2010 Shading in OpenGL.
Programming for Virtual Reality Applications Projection in OpenGL Lighting and Shading Lecture 17.
CS380 LAB IV OpenGL Jonghyeob Lee Reference1. [OpenGL course slides by Rasmus Stenholt] Reference2. [
Lecture 14 Shading models 1.Shading Constant Shading (to be implemented) Gouraud Shading Phong Shading 2.Light and shading with OpenGL 1.
Introduction to OpenGL Programming RedBook OpenGL.
08 |Lighting and Shading Eriq Muhammad Adams J |
1 Angel: Interactive Computer Graphics 4E © Addison-Wesley 2005 Shading I Ed Angel Professor of Computer Science, Electrical and Computer Engineering,
Chi-Cheng Lin, Winona State University CS430 Computer Graphics Lighting and Shading Part II.
OpenGL Lighting Jian-Liang Lin 2002 Hidden-Surface Removal -1 Original Code: while (1) { get_viewing_point_from_mouse_position(); glClear(GL_COLOR_BUFFER_BIT);
CS559: Computer Graphics Lecture 12: OpenGL - Transformation Li Zhang Spring 2008.
RENDERING Introduction to Shading models – Flat and Smooth shading – Adding texture to faces – Adding shadows of objects – Building a camera in a program.
Where We Stand So far we know how to: –Transform between spaces –Rasterize –Decide what’s in front Next –Deciding its intensity and color.
In the name of God Computer Graphics. Where We Stand So far we know how to: –Transform between spaces –Draw polygons Next –Deciding a pixel’s intensity.
Chapter 4 -- Color1 Color Open GL Chapter 4. Chapter 4 -- Color2 n The goal of almost all OpenGL applications is to draw color pictures in a window on.
Lighting Dave Shreiner. 2 Lighting Principles Lighting simulates how objects reflect light Lighting simulates how objects reflect light material composition.
Shading NOTE: Some of these slides are from Ed Angel’s presentation at SIGGRAPH February 27, 2008.
Illumination CSE 410. Basic steps of lighting Enable smooth shading Set global ambient light glShadeModel(GL_SMOOTH); glEnable(GL_NORMALIZE); GLfloat.
CS559: Computer Graphics Lecture 16: Shading and OpenGL Li Zhang Spring 2008.
CSC Graphic Programming Lecture 2 OpenGL Lightning.
Illumination and Shading. Illumination (Lighting) Model the interaction of light with surface points to determine their final color and brightness OpenGL.
Lecture 6 Lighting. Introduction What is light? How do we percept colors? Lights in OpenGL.
Chapter 5. Lighting Computer Graphics (spring, 2009) School of Computer Science University of Seoul.
1 Dr. Scott Schaefer Lighting. 2/49 Lighting/Illumination Color is a function of how light reflects from surfaces to the eye Global illumination accounts.
Graphics Graphics Korea University kucg.korea.ac.kr 1 Lights & Material 고려대학교 컴퓨터 그래픽스 연구실.
CSC Graphics Programming
Lighting.
Shading To determine the correct shades of color on the surface of graphical objects.
Lecture 16: Shading and OpenGL Li Zhang Spring 2008
Advanced Graphics Algorithms Ying Zhu Georgia State University
Illumination and Shading
@ 2017 by Jim X. Chen George Mason University
Open GL: Colors and Lighting
Lecture 10, 11, and 12 Lighting & Shading
Computer Graphics, Lee Byung-Gook, Dongseo Univ.
Shading in OpenGL Ed Angel
Lighting and Shading Lab 8:.
CSC461: Lecture 24 Lighting and Shading in OpenGL
Lighting Phong's Lighting Model normals
o عَلَّمَهُ الْبَيَانَ
Lighting and Materials
Lighting – Light Sources
Lighting – Material Properties
Lighting and Shading Lab 8:.
Last Time Liang-Barsky Details Weiler-Atherton clipping algorithm
Presentation transcript:

OpenGL Color and Lighting 2003 Spring Keng Shih-Ling

Color Example GL_FLATGL_SMOOTH

Color Example #include void GL_display() { glBegin(GL_TRIANGLES); glColor3f(1,1, 1); // 白 glVertex2f(0.0, 3.0); glColor3f(0, 0,1); // 藍 glVertex2f(6.0, 1.5); glColor3f(0,1,1); // 黃 glVertex2f(4.0, 0.0); glEnd(); }

Lighting Example Lighting enabledLighting disabled

Lighting Example #include void GL_display() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); glutSolidSphere(1.0, 16, 16); glFlush(); }

Lighting Example void init() { GLfloat mat_diffuse[4] = {1.0, 1.0, 1.0, 1.0}; GLfloat mat_specular[4] = { 1.0, 1.0, 1.0, 1.0 }; GLfloat mat_shininess[] = { 50.0 }; GLfloat light_position[4] = { 1.0, 1.0, 1.0, 0.0 }; glClearColor(0.0, 0.0, 0.0, 0.0); glShadeModel(GL_SMOOTH); glEnable(GL_DEPTH_TEST); // z buffer enable glEnable(GL_LIGHTING); // enable lighting // set light property glEnable(GL_LIGHT0); glLightfv(GL_LIGHT0, GL_POSITION, light_position); // set material property glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess); }

Color Two Color modes: –RGBA –Color Index Choosing between RGBA and Color Index –glutInitDisplayMode(); (GLUT) –glutInitDisplayMode(GL_RGBA) (for RGBA) –glutInitDisplayMode(GL_INDEX) (for color index)

Color RGBA mode: –Four components Red, Green, Blue, and Alpha. –Each component is normalize to 0.0~1.0 –glColor {34}{sifd}[v](TYPE colors); Ex. –glColor3f(0.0, 0.0, 0.0);// black color –glColor4f(0.0, 1.0, 0.0, 1.0);// green color

Color Color Index mode: –Use a color map (lookup table) to prepare for a paint-by-number scene. OpenGL does not provide any routing to load color map (it ’ s load by window system). –glIndex{sidf … }(TYPE c);

Color Clearing the Window –Use glClearColor() or glClearIndex() to specify the clear color. –Call glClear(GL_COLOR_BUFFER_BIT); if need to clear the color buffer. Specifying shading model –glShadeModel(GLenum mode); The parameter is either GL_FLAT or GL_SMOOTH (default).

Hidden-Surface Removal How to apply HSR in OpenGL glutInitDisplayMode(GLUT_DEPTH); glEnable(GL_DEPTH_TEST); –In display function glClear(GL_DEPTH_BUFFER_BIT);

Light in OpenGL Ambient –Light that is been scattered by the environment. Diffuse –Light that come from one direction. Specular –Light that come from particular direction that tend to bounce off the surface in a preferred direction.

Material in OpenGL Material –Describe the percentages of the incoming red, green, blue light it reflects on a surface. – Diffuse The most important role in determining what you perceive the color of an object to be. Affected by the color of the incident diffuse light and the angle of the incident light relative to the normal direction – Ambient Affected by the global ambient light and ambient light from individual light sources.

OpenGL Light and Material – Specular & Shininess Specular reflection from an object produces highlights. The amount of specular reflection seen by a viewer does depend on the location of the viewpoint. Shininess control the size and brightness of the highlight. – Emission Make an object appear to be giving off light of that color. Since most real-world objects (except lights) don't emit light, you'll probably use this feature mostly to simulate lamps and other light sources in a scene.

OpenGL Light and Material Ambient: Green Diffuse: Red Specular: Blue

Put light into OpenGL How to apply lighting in OpenGL –Use glEnable(GL_LIGHTING); to enable lighting. –Enable and set properties for light sources. –Select a lighting model. –Define material properties for objects in the scene. –Assign normal vectors for each vertex of every object.

Lighting: Assign Normal Vector Assign normal vectors for each vertex of every object –glNormal{34}{isfd}[v](TYPE* normal); Assign normal vector for vertices (the normal vector should be assigned before you assign vertices). Normal vectors must be normalize. OpenGL can automatically normalize normal vector by glEnable(GL_NORMALIZE); In the example, the normals for the sphere are defined as part of the glutSolidSphere() routine.

Sample: Assign Normal Vector void GL_Display() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glBegin(GL_POLYGON); glNormal3f(0.0, 1.0, 0.0); glVertex3f(1.0, 0.0, 0.0); glVertex3f(0.0, 0.0, -1.0); glVertex3f(-1.0, 0.0, 0.0); glEnd(); glFlush(); }

Lighting: Light Source Enable and set properties for light sources –Use glEnable(GL_LIGHT0); to enable light zero. You can use at most 8 light sources in OpenGL spec. (GL_LIGHT0~GL_LIGHT7) –glLight{if}[v](GLenum light, Glenum pname, TYPE param ); Specify the attribute of light light can be GL_LIGHT0 ~ GL_LIGHT7 pname is the characteristic of the light param is the value of pname.

Lighting: Light Source PnameDef. ValueMeaning GL_AMBIENT(0.0, 0.0, 0.0, 0.0)ambient RGBA intensity of light GL_DIFFUSE(1.0, 1.0, 1.0, 1.0) diffuse RGBA intensity of light GL_SPECULAR(1.0, 1.0, 1.0, 1.0) specular RGBA intensity of light GL_POSITION(0.0, 0.0, 1.0, 0.0)(x, y, z, w) position of light GL_SPOT_DIRECTION(0.0, 0.0, -1.0)(x, y, z) direction of spotlight GL_SPOT_EXPONENT0.0spotlight exponent GL_SPOT_CUTOFF180.0 spotlight cutoff angle GL_CONSTANT_ATTENUATION1.0constant attenuation factor GL_LINEAR_ATTENUATION0.0linear attenuation factor GL_QUADRATIC_ATTENUATION0.0quadratic attenuation factor

Lighting: Light Source –Color The default values listed for GL_DIFFUSE and GL_SPECULAR apply only to GL_LIGHT0. For other lights, the default value is (0.0, 0.0, 0.0, 1.0 ) for both GL_DIFFUSE and GL_SPECULAR. –Ex. »GLfloat light_ambient[4] = {0.0, 0.0, 1.0, 0.0}; »glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient); –Position ( x, y, z, w ) W is ZERO, Directional light, (x,y,z) specify its direction. W is NONZERO, Positional light, (x,y,z) specify the location of the light source.

Lighting: Light Source –Attenuation 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 If light is directional light, the attenuation is 1

Lighting: Light Source –How to create spot light Define your light as positional light Define light spot direction GLfloat spot_direction[] = { -1.0, -1.0, 0.0 }; glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, spot_direction); Define light spot exponent glLightf(GL_LIGHT1, GL_SPOT_EXPONENT, 2.0); Define light spot cutoff –The value for GL_SPOT_CUTOFF is restricted to being within the range [0.0,90.0] (unless it has the special value (default)).

Lighting: Light Source

Control a Light ’ s Position and Direction –OpenGL treats the position and direction of a light source just as it treats the position of a geometric primitive. –MODELVIEW Transformation will be applied. Three types of control –A light position that remains fixed –A light that moves around a stationary object –A light that moves along with the viewpoint

Lighting: Light Source Keeping the Light Stationary glViewport (0, 0, (GLsizei) w, (GLsizei) h); glMatrixMode (GL_PROJECTION); glLoadIdentity(); if (w <= h) glOrtho (-1.5, 1.5, -1.5*h/w, 1.5*h/w, -10.0, 10.0); else glOrtho (-1.5*w/h, 1.5*w/h, -1.5, 1.5, -10.0, 10.0); glMatrixMode (GL_MODELVIEW); glLoadIdentity(); … /* later in init() */ GLfloat light_position[] = { 1.0, 1.0, 1.0, 1.0 }; glLightfv(GL_LIGHT0, GL_POSITION, position); /* NO other MODELVIEW transformation is set…*/

Lighting: Light Source Independently Moving the Light static GLdouble spin; void display(void) { GLfloat light_position[] = { 0.0, 0.0, 1.5, 1.0 }; glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix(); gluLookAt (0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); glPushMatrix(); glRotated(spin, 1.0, 0.0, 0.0); glLightfv(GL_LIGHT0, GL_POSITION, light_position); glPopMatrix(); glutSolidTorus (0.275, 0.85, 8, 15); glPopMatrix(); glFlush(); }

Lighting: Light Source Moving the Light Source Together with Your Viewpoint GLfloat light_position() = { 0.0, 0.0, 0.0, 1.0 }; glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glLightfv(GL_LIGHT0, GL_POSITION, light_position); …… static GLdouble ex, ey, ez, upx, upy, upz; void display(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix(); gluLookAt (ex, ey, ez, 0.0, 0.0, 0.0, upx, upy, upz); glutSolidTorus (0.275, 0.85, 8, 15); glPopMatrix(); glFlush(); }

Lighting: Lighting Model Selecting a lighting model –void glLightModel{if}[v](GLenum pname, TYPE[*] param); Sets properties of the lighting model. The characteristic of the lighting model being set is defined by pname, which specifies a named parameter. param indicates the values to which the pname characteristic is set

Lighting: Lighting Model PnameDef. ValueMeaning GL_LIGHT_MODEL_AMBIENT(0.2, 0.2, 0.2, 1.0)ambient RGBA intensity of the entire scene GL_LIGHT_MODEL_LOCAL_VIEWER0.0 or GL_FALSE how specular reflection angles are computed GL_LIGHT_MODEL_TWO_SIDE0.0 or GL_FALSE choose between one-sided or two- sided lighting

Lighting: Material Define material properties for objects in the scene. –void glMaterial{if}[v](GLenum face, GLenum pname, TYPE[*] param); Specifies a current material property for use in lighting calculations. face can be GL_FRONT, GL_BACK, or GL_FRONT_AND_BACK. The particular material property being set is identified by pname and the desired values for that property are given by param.

Lighting: Material PnameDef. ValueMeaning GL_AMBIENT(0.2, 0.2, 0.2, 1.0)ambient color of material GL_DIFFUSE(0.8, 0.8, 0.8, 1.0) diffuse color of material GL_AMBIENT_AND_DIFFUSEambient and diffuse color of material GL_SPECULAR(0.0, 0.0, 0.0, 1.0) specular color of material GL_SHININESS0.0specular exponent GL_EMISSION(0.0, 0.0, 0.0, 1.0)emissive color of material GL_COLOR_INDEXES(0, 1, 1)ambient, diffuse, and specular color indices

Lighting: Material No Ambient Gray Ambient Blue Ambient Diffuse Only SpecularHigher Shininess Emission

Lighting: Material Performance issue –glMaterialfv(); is called repeatedly to set different material properties for different objects. –glMaterial*() has a performance cost associate with its use. –Another technique for minimizing performance costs associated with changing material properties is to use glColorMaterial();

Lighting: Material –glColorMaterial(GLenum face, GLenum mode ); Causes the material property of the specified material face to track the value of the current color at all times. face parameter can be GL_FRONT, GL_BACK, or GL_FRONT_AND_BACK (default). mode parameter can be GL_AMBIENT, GL_DIFFUSE, GL_AMBIENT_AND_DIFFUSE (the default), GL_SPECULAR, or GL_EMISSION. A change to the current color (using glColor*()) immediately updates the specified material properties. Use glEnable(GL_COLOR_MATERIAL); to enable color material. glColorMaterial() has no effect on color-index lighting.

Any Question? ?