+ All Categories
Home > Documents > Color and Lighting

Color and Lighting

Date post: 11-Jan-2016
Category:
Upload: dai
View: 29 times
Download: 3 times
Share this document with a friend
Description:
Color and Lighting. 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. - PowerPoint PPT Presentation
Popular Tags:
35
CGGM Lab. Tan-Chi Ho 2001 Color and Lighting
Transcript
Page 1: Color and Lighting

CGGM Lab. Tan-Chi Ho 2001

Color and Lighting

Page 2: Color and Lighting

CGGM Lab. Tan-Chi Ho 2001

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 in

dex

Page 3: Color and Lighting

CGGM Lab. Tan-Chi Ho 2001

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

Page 4: Color and Lighting

CGGM Lab. Tan-Chi Ho 2001

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

Page 5: Color and Lighting

CGGM Lab. Tan-Chi Ho 2001

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).

Page 6: Color and Lighting

CGGM Lab. Tan-Chi Ho 2001

Color

GL_FLAT GL_SMOOTH

Page 7: Color and Lighting

CGGM Lab. Tan-Chi Ho 2001

Hidden-Surface Removal How to apply HSR in OpenGL:

glutInitDisplayMode(GLUT_DEPTH); glEnable(GL_DEPTH_TEST);

In display function glClear(GL_DEPTH_BUFFER_BIT);

Page 8: Color and Lighting

CGGM Lab. Tan-Chi Ho 2001

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.

Page 9: Color and Lighting

CGGM Lab. Tan-Chi Ho 2001

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.

Page 10: Color and Lighting

CGGM Lab. Tan-Chi Ho 2001

OpenGL Light and Material Specular & Shininess

Specular reflection from an object produces highlights. The amount of specular reflection seen by a viewer does d

epend 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 li

ght, you'll probably use this feature mostly to simulate lamps and other light sources in a scene.

Page 11: Color and Lighting

CGGM Lab. Tan-Chi Ho 2001

OpenGL Light and Material

Ambient: Green

Diffuse : Red

Specular: Blue

Page 12: Color and Lighting

CGGM Lab. Tan-Chi Ho 2001

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 th

e scene. Assign normal vectors for each vertex of ev

ery object.

Page 13: Color and Lighting

CGGM Lab. Tan-Chi Ho 2001

Lighting Sample#include <GL/glut.h>

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

// z buffer enableglEnable(GL_DEPTH_TEST);

// enable lightingglEnable(GL_LIGHTING);

Page 14: Color and Lighting

CGGM Lab. Tan-Chi Ho 2001

Lighting Sample// set light propertyglEnable(GL_LIGHT0);glLightfv(GL_LIGHT0, GL_POSITION, light_position);// set material propertyglMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess);

}

void GL_display(){

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);glutSolidSphere(1.0, 16, 16);glFlush();

}

Page 15: Color and Lighting

CGGM Lab. Tan-Chi Ho 2001

Lighting Sample

Lighting enabled

Lighting disabled

Page 16: Color and Lighting

CGGM Lab. Tan-Chi Ho 2001

Lighting: Assign Normal Vector Assign normal vectors for each vertex of ev

ery 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.

Page 17: Color and Lighting

CGGM Lab. Tan-Chi Ho 2001

Sample: Assign Normal Vectorvoid 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();

}

Page 18: Color and Lighting

CGGM Lab. Tan-Chi Ho 2001

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.

Page 19: Color and Lighting

CGGM Lab. Tan-Chi Ho 2001

Lighting: Light SourcePname Def. Value Meaning

GL_AMBIENT (0.0, 0.0, 0.0, 0.0) ambient RGBA intensity of lightGL_DIFFUSE (1.0, 1.0, 1.0, 1.0) diffuse RGBA intensity of lightGL_SPECULAR (1.0, 1.0, 1.0, 1.0) specular RGBA intensity of lightGL_POSITION (0.0, 0.0, 1.0, 0.0) (x, y, z, w) position of lightGL_SPOT_DIRECTION (0.0, 0.0, -1.0) (x, y, z) direction of spotlightGL_SPOT_EXPONENT 0.0 spotlight exponentGL_SPOT_CUTOFF 180.0 spotlight cutoff angleGL_CONSTANT_ATTENUATION 1.0 constant attenuation factorGL_LINEAR_ATTENUATION 0.0 linear attenuation factorGL_QUADRATIC_ATTENUATION 0.0 quadratic attenuation factor

Page 20: Color and Lighting

CGGM Lab. Tan-Chi Ho 2001

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 directio

n. W is NONZERO, Positional light, (x,y,z) specify the loc

ation of the light source.

Page 21: Color and Lighting

CGGM Lab. Tan-Chi Ho 2001

Lighting: Light Source 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 1

2

1

dkdkkFacrornAttenuatio

qlc

Page 22: Color and Lighting

CGGM Lab. Tan-Chi Ho 2001

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 exponentglLightf(GL_LIGHT1, GL_SPOT_EXPONENT, 2.0);

Define light spot cutoff The value for GL_SPOT_CUTOFF is restricted to being within th

e range [0.0,90.0] (unless it has the special value 180.0 (default)).

Page 23: Color and Lighting

CGGM Lab. Tan-Chi Ho 2001

Lighting: Light Source

Page 24: Color and Lighting

CGGM Lab. Tan-Chi Ho 2001

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

Page 25: Color and Lighting

CGGM Lab. Tan-Chi Ho 2001

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…*/

Page 26: Color and Lighting

CGGM Lab. Tan-Chi Ho 2001

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, lig

ht_position);glPopMatrix();glutSolidTorus (0.275, 0.85, 8, 15);

glPopMatrix();glFlush();

}

Page 27: Color and Lighting

CGGM Lab. Tan-Chi Ho 2001

Lighting: Light Source Moving the Light Source Together with Your Vi

ewpointGLfloat 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();

}

Page 28: Color and Lighting

CGGM Lab. Tan-Chi Ho 2001

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

Page 29: Color and Lighting

CGGM Lab. Tan-Chi Ho 2001

Lighting: Lighting ModelPname Def. Value MeaningGL_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 specularreflection anglesare computed

GL_LIGHT_MODEL_TWO_SIDE 0.0 or GL_FALSE choose betweenone-sided or two-sided lighting

Page 30: Color and Lighting

CGGM Lab. Tan-Chi Ho 2001

Lighting: Material Define material properties for objects in the

scene. void glMaterial{if}[v](GLenum face, GLenum p

name, TYPE[*] param); Specifies a current material property for use in lightin

g 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.

Page 31: Color and Lighting

CGGM Lab. Tan-Chi Ho 2001

Lighting: MaterialPname Def. Value Meaning

GL_AMBIENT (0.2, 0.2, 0.2, 1.0) ambient color of materialGL_DIFFUSE (0.8, 0.8, 0.8, 1.0) diffuse color of materialGL_AMBIENT_AND_DIFFUSE ambient and diffuse color of

materialGL_SPECULAR (0.0, 0.0, 0.0, 1.0) specular color of materialGL_SHININESS 0.0 specular exponentGL_EMISSION (0.0, 0.0, 0.0, 1.0) emissive color of materialGL_COLOR_INDEXES (0, 1, 1) ambient, diffuse, and specular color

indices

Page 32: Color and Lighting

CGGM Lab. Tan-Chi Ho 2001

Lighting: Material

No Ambien

t

Gray Ambien

t

Blue Ambien

t

Diffuse Only

Specular

Higher Shinines

s

Emission

Page 33: Color and Lighting

CGGM Lab. Tan-Chi Ho 2001

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();

Page 34: Color and Lighting

CGGM Lab. Tan-Chi Ho 2001

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.

Page 35: Color and Lighting

CGGM Lab. Tan-Chi Ho 2001

Any Question?

?


Recommended