1 / 35

Color and Lighting

Color and Lighting. Color 1/5. 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 2/5. RGBA mode:

gage
Télécharger la présentation

Color and Lighting

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Color and Lighting Tan-Chi Ho, CGGM Lab., CSIE of NCTU

  2. Color1/5 • 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 Tan-Chi Ho, CGGM Lab., CSIE of NCTU

  3. Color2/5 • 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 Tan-Chi Ho, CGGM Lab., CSIE of NCTU

  4. Color3/5 • 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); Tan-Chi Ho, CGGM Lab., CSIE of NCTU

  5. Color4/5 • Clearing the color buffer • 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). Tan-Chi Ho, CGGM Lab., CSIE of NCTU

  6. GL_FLAT GL_SMOOTH Color5/5 Consider the following code with different shading model: glBegin(GL_POLYGON); glColor3f(1.0, 1.0, 1.0); glVertex2f(-0.5, 0.-0.5); glColor3f(0.0, 0.0, 1.0); glVertex2f(0.5, 0.-0.5); glColor3f(1.0, 1.0, 0.0); glVertex2f(0.0, 0.5); glEnd(); Tan-Chi Ho, CGGM Lab., CSIE of NCTU

  7. Hidden-Surface Removal • How to apply HSR in OpenGL: • glutInitDisplayMode(GLUT_DEPTH); • Enable the depth buffer. • glEnable(GL_DEPTH_TEST); • Enable depth test. • In display function • glClear(GL_DEPTH_BUFFER_BIT); when you wish to clean the depth buffer. Tan-Chi Ho, CGGM Lab., CSIE of NCTU

  8. Lights in OpenGL1/2 • Ambient light • Light that has been scattered by the environment. • Diffuse light • Light that come from one direction. • Specular light • Light that come from particular direction that tend to bounce off the surface in a preferred direction. Tan-Chi Ho, CGGM Lab., CSIE of NCTU

  9. Lights in OpenGL2/2 Three different kinds of lights on a white ball. Specular light : white Diffuse light : yellow Ambient light : red Tan-Chi Ho, CGGM Lab., CSIE of NCTU

  10. Material in OpenGL1/3 • 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. Tan-Chi Ho, CGGM Lab., CSIE of NCTU

  11. Material in OpenGL2/3 • 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. Tan-Chi Ho, CGGM Lab., CSIE of NCTU

  12. Material in OpenGL3/3 A white light on the ball that has following materials: Specular : blue Diffuse : red Ambient : green Tan-Chi Ho, CGGM Lab., CSIE of NCTU

  13. Put light into OpenGL • How to apply lighting in OpenGL • Use glEnable( GL_LIGHTING ) to enable lighting. • Enable and set properties for light sources. • Up to 8 lights are available (GL_LIGHT0 ~ GL_LIGHT7). • Enable a light by calling to glEnable( GL_LIGHTi ) . • Set light properties by calling to glLightfv( … ) . • Set light model by calling to glLightModelfv( … ). • Define material properties for objects in the scene by calling to glMaterialfv( … ) . • Assign normal vectors for each vertex of every object. Tan-Chi Ho, CGGM Lab., CSIE of NCTU

  14. Lighting Sample1/4 #include <GL/glut.h> void init() { GLfloat mat_diffuse[] = {1.0, 0.0, 0.0, 1.0}; GLfloat mat_specular[] = {0.0, 0.0, 1.0, 1.0}; GLfloat mat_ambient[] = {0.0, 1.0, 0.0, 1.0}; GLfloat mat_shininess[] = {50.0}; GLfloat light_specular[] = {1.0, 1.0, 1.0, 1.0}; GLfloat light_diffuse[] = {1.0, 1.0, 1.0, 1.0}; GLfloat light_ambient[] = {0.0, 0.0, 0.0, 1.0}; GLfloat light_position[] = {5.0, 5.0, 10.0, 0.0}; glClearColor(0.0, 0.0, 0.0, 0.0); glShadeModel(GL_SMOOTH); // z buffer enable glEnable(GL_DEPTH_TEST); // enable lighting glEnable(GL_LIGHTING); Tan-Chi Ho, CGGM Lab., CSIE of NCTU

  15. Lighting Sample2/4 // set light property glEnable(GL_LIGHT0); glLightfv(GL_LIGHT0, GL_POSITION, light_position); glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse); glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular); glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient); // set material property glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient); glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess); } void GL_display() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glutSolidSphere(0.8, 128, 128); glFlush(); } Tan-Chi Ho, CGGM Lab., CSIE of NCTU

  16. Lighting Sample3/4 void reshape (int w, int h) { glViewport (0, 0, (GLsizei) w, (GLsizei) h); glMatrixMode (GL_PROJECTION); glLoadIdentity(); glOrtho (-1.0, 1.0, -1.0, 1.0, -1.0, 1.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); } int main(int argc, char** argv) { glutInit(&argc, argv); glutInitWindowSize(400, 400); glutInitWindowPosition(0, 0); glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA | GLUT_DEPTH); glutCreateWindow("Planet"); init(); glutDisplayFunc(GL_display); glutReshapeFunc(reshape); glutMainLoop(); } Tan-Chi Ho, CGGM Lab., CSIE of NCTU

  17. Lighting Sample4/4 Lighting enabled Lighting disabled Tan-Chi Ho, CGGM Lab., CSIE of NCTU

  18. Lighting: Normal Vector1/2 • 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 vertex). • Normal vectors must be normalize. OpenGL can automatically normalize normal vector by glEnable( GL_NORMALIZE ) . • In the previous sample, the normal for the sphere are defined as part of the glutSolidSphere() routine. Tan-Chi Ho, CGGM Lab., CSIE of NCTU

  19. Lighting: Normal Vector2/2 • Example 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(); } Tan-Chi Ho, CGGM Lab., CSIE of NCTU

  20. Lighting: Light Source1/7 • 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) • GL_LIGHTi can be rewritten as GL_LIGHT0 + i. • 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. Tan-Chi Ho, CGGM Lab., CSIE of NCTU

  21. Pname Def. Value Meaning 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_EXPONENT 0.0 spotlight exponent GL_SPOT_CUTOFF 180.0 spotlight cutoff angle GL_CONSTANT_ATTENUATION 1.0 constant attenuation factor GL_LINEAR_ATTENUATION 0.0 linear attenuation factor GL_QUADRATIC_ATTENUATION 0.0 quadratic attenuation factor Lighting: Light Source2/7 Tan-Chi Ho, CGGM Lab., CSIE of NCTU

  22. Lighting: Light Source3/7 • 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 GL_DIFFUSE, GL_SPECULAR and GL_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. Tan-Chi Ho, CGGM Lab., CSIE of NCTU

  23. Lighting: Light Source4/7 • Attenuation • d = distance between the light's position and the vertex • kc = GL_CONSTANT_ATTENUATION • kl = GL_LINEAR_ATTENUATION • kq = GL_QUADRATIC_ATTENUATION • If light is directional light, the attenuation is always 1 Tan-Chi Ho, CGGM Lab., CSIE of NCTU

  24. Lighting: Light Source5/7 • 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 180.0 (default)). Tan-Chi Ho, CGGM Lab., CSIE of NCTU

  25. Lighting: Light Source6/7 Tan-Chi Ho, CGGM Lab., CSIE of NCTU

  26. Lighting: Light Source7/7 • 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. • The MODELVIEW transformation will also be applied to light sources. • Any matrix operations can also apply to light sources. Tan-Chi Ho, CGGM Lab., CSIE of NCTU

  27. Lighting: Lighting Model1/2 • Selecting a lighting model • void glLightModel{if}[v](GLenum pname, TYPE[*] param); • Sets properties of the lighting model. • The lighting model is used to control the global behaviors of all the lights. Tan-Chi Ho, CGGM Lab., CSIE of NCTU

  28. Pname Def. Value Meaning GL_LIGHT_MODEL_AMBIENT (0.2, 0.2, 0.2, 1.0) ambient RGBA intensity of the entire scene GL_LIGHT_MODEL_LOCAL_VIEWER 0.0 or GL_FALSE how specular reflection angles are computed GL_LIGHT_MODEL_TWO_SIDE 0.0 or GL_FALSE choose between one-sided or two- sided lighting Lighting: Lighting Model2/2 Tan-Chi Ho, CGGM Lab., CSIE of NCTU

  29. Lighting: Material1/6 • 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. Tan-Chi Ho, CGGM Lab., CSIE of NCTU

  30. Pname Def. Value Meaning 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_DIFFUSE ambient and diffuse color of material GL_SPECULAR (0.0, 0.0, 0.0, 1.0) specular color of material GL_SHININESS 0.0 specular 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: Material2/6 Tan-Chi Ho, CGGM Lab., CSIE of NCTU

  31. No Ambient Gray Ambient Blue Ambient Diffuse Only Specular Higher Shininess Emission Lighting: Material3/6 Tan-Chi Ho, CGGM Lab., CSIE of NCTU

  32. Lighting: Material4/6 • 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(); Tan-Chi Ho, CGGM Lab., CSIE of NCTU

  33. Lighting: Material5/6 • 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. Tan-Chi Ho, CGGM Lab., CSIE of NCTU

  34. Lighting: Material6/6 • Following is a example that using color material to change the ambient and diffuse glEnable(GL_COLOR_MATERIAL); glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE); glBegin(GL_POLYGON); glNormal3f(0.0, 1.0, 0.0); glColor3f(1.0, 0.0, 0.0); glVertex3f(-0.5, -0.5, -0.5); glColor3f(0.0, 0.0, 1.0); glVertex3f(0.5, -0.5, -0.5); glColor3f(0.0, 1.0, 0.0); glVertex3f(0.0, 0.5, 0.5); glEnd(); Tan-Chi Ho, CGGM Lab., CSIE of NCTU

  35. Any Question? ? Tan-Chi Ho, CGGM Lab., CSIE of NCTU

More Related