Download presentation
Presentation is loading. Please wait.
Published byGregory Lee Modified over 9 years ago
1
CS380 LAB IV OpenGL Jonghyeob Lee Reference1. [OpenGL course slides by Rasmus Stenholt] Reference2. [http://nehe.gamedev.net/]http://nehe.gamedev.net/
2
Goal Introduce OpenGL programming Help you do CS380 homework by yourself 2
3
Notice Use Noah board for your questions (http://noah.kaist.ac.kr/course/CS380)http://noah.kaist.ac.kr/course/CS380 3
4
Outline Lighting and Materials Texture Mapping 4
5
5 Lighting and Materials Why is this important? Geometry is only one third of rendering Lights and materials make up the other two Unlit objects tend to look dull and artificial In OpenGL, lights and materials are connected Light interacts with materials Materials must be assigned to geometry to benefit from lighting
6
6 Lighting Principles The result of lighting depends on various factors Material composition of object Light colour and position Global lighting parameters ambient light two sided lighting Lighting can be done in both RGBA and indexed color mode
7
7 OpenGL Lighting Lighting is computed per-vertex The lighting model is called Phong shading Lighting properties Diffuse Specular Ambient
8
8 Lighting Normals define how a surface reflects light glNormal3f( x, y, z ) Normals can be defined per-vertex Just like colours The current normal is used to compute lighting contributions The angles between the normal and light directions are used Use unit normals for proper lighting Some transformations affect a normal’s length glEnable( GL_NORMALIZE ) or glEnable( GL_RESCALE_NORMAL )
9
9 Light Properties The command for setting lighting properties glLightfv(light, property, value); light specifies which light Multiple lights, starting with GL_LIGHT0 glGetIntegerv( GL_MAX_LIGHTS, &n ); The maximum number of lights is usually 8 Properties colors position and type attenuation Light color properties GL_AMBIENT GL_DIFFUSE GL_SPECULAR
10
10 Types of Lights OpenGL supports two types of lights Local (Point) light sources Infinite (Directional) light sources Type of light controlled by w coordinate Usually w=1 for a point light
11
11 Turning on the Lights First you must tell OpenGL that lighting should be used glEnable( GL_LIGHTING ); Then each light can be individually turned on/off glEnable( GL_LIGHT n );
12
Load a solid teapot Tutorials 12 void display() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_MODELVIEW); glutSolidTeapot(0.5); glFlush(); }
13
Tutorials Add a light on previous scene 13 void display() { glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); float light_pos[] = {-2, 2, 2, 1}; float light_Ka[] = {0, 0, 0, 1}; float light_Kd[] = {1, 1, 1, 1}; float light_Ks[] = {1, 1, 1, 1}; glLightfv(GL_LIGHT0, GL_POSITION, light_pos); glLightfv(GL_LIGHT0, GL_AMBIENT, light_Ka); glLightfv(GL_LIGHT0, GL_DIFFUSE, light_Kd); glLightfv(GL_LIGHT0, GL_SPECULAR, light_Ks); … }
14
14 Material Properties Define the surface properties of a primitive glMaterialfv( face, property, value ); Separate materials for front and back GL_DIFFUSE Base color GL_SPECULAR Highlight Color GL_AMBIENT Low-light Color GL_EMISSION Glow Color GL_SHININESS Surface Smoothness
15
Tutorials Add a materials on front 15 void display() { float material_Ka[] = {0.11, 0.06, 0.11, 1.00}; float material_Kd[] = {0.43, 0.47, 0.54, 1.00}; float material_Ks[] = {0.33, 0.33, 0.52, 1.00}; float material_Ke[] = {0.00, 0.00, 0.00, 0.00}; float material_Se[] = {10}; glMaterialfv(GL_FRONT, GL_AMBIENT, material_Ka); glMaterialfv(GL_FRONT, GL_DIFFUSE, material_Kd); glMaterialfv(GL_FRONT, GL_SPECULAR, material_Ks); glMaterialfv(GL_FRONT, GL_EMISSION, material_Ke); glMaterialfv(GL_FRONT, GL_SHININESS, material_Se); }
16
Tutorials Compare three teapots 16
17
17 Texture Mapping Applying a 1-D, 2-D, or 3-D image to geometric primitives Texture coordinates are called (s,t,r,q) Uses of texturing Simulating materials Reducing geometric complexity Reflections Advanced surface properties
18
18 Texture Mapping s t x y z image geometry screen
19
19 Applying Textures The short version 1. Specify a texture image 1. Read or generate image 2. Assign to texture 3. Enable texturing 2. Specify texture parameters 1. Wrapping 1. How texture edges are handled 2. Filtering 1. How texture sampling is handled 3. Assign texture coordinates to vertices
20
20 Generating a Texture Identifier Generate texture names glGenTextures( n, *texIds ); A texture name is just an integer The texture name is assigned to some texture data later on Example unsigned int texName; glGenTextures(1, &texname)
21
21 Binding Textures Bind textures before using glBindTexture( target, id ); Binding a texture means assigning a certain texture id to a certain kind of texture The valid kinds of textures are GL_TEXTURE_1D GL_TEXTURE_2D GL_TEXTURE_3D Example glBindTexture( GL_TEXTURE_2D, texName );
22
22 Filter Modes Handles the sampling mode of the texture Minification or magnification Handles when the texture to screen mapping is not 1:1 Special mipmap minification filters Wrap Modes Handles texture lookups outside the texture’s edges Clamping Copies data from the edge of the texture Repeating Tiles the texture Texture Functions How to mix primitive’s color with texture’s color Blend Modulate Replace Texture Application Methods
23
23 Filter Modes TexturePolygon MagnificationMinification PolygonTexture Example: glTexParameteri( target, type, mode );
24
24 Wrapping Mode Example: glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP ) glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT ) texture s t GL_CLAMP wrapping GL_REPEAT wrapping
25
25 Based on parametric texture coordinates Texture coordinates are assigned to vertices Just like colours and normals The n-D to 3-D mapping is the responsibility of the programmer/modeller glTexCoord*() specified at each vertex s t Mapping Texture
26
26 Texture Mapping 0, 01, 0 (0.4, 0.2) (0.8, 0.4) A BC a b c 1, 1 0, 1 (s, t) = (0.2, 0.8) Texture SpaceObject Space
27
Tutorials Make checkerboard texture 27 int i, j, c; for (i = 0; i < 64; i++) { for (j = 0; j < 64; j++) { c = ((((i&0x8)==0)^((j&0x8))==0))*255; checkImage[i][j][0] = (GLubyte) c; checkImage[i][j][1] = (GLubyte) c; checkImage[i][j][2] = (GLubyte) c; checkImage[i][j][3] = (GLubyte) 255; }
28
Tutorials Assign texture 28 glGenTextures(1, &texName); glBindTexture(GL_TEXTURE_2D, texName); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 64, 64, 0, GL_RGBA, GL_UNSIGNED_BYTE, checkImage);
29
Tutorials Texture mapping onto rectangle 29 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glEnable(GL_TEXTURE_2D); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); glBindTexture(GL_TEXTURE_2D, texName); glBegin(GL_QUADS); glTexCoord2f(0.0, 0.0); glVertex3f(-0.5, -0.5, 0.0); glTexCoord2f(0.0, 1.0); glVertex3f(0.5, -0.5, 0.0); glTexCoord2f(1.0, 1.0); glVertex3f(0.5, 0.5, 0.0); glTexCoord2f(1.0, 0.0); glVertex3f(-0.5, 0.5, 0.0); glEnd(); glFlush(); glDisable(GL_TEXTURE_2D);
30
Q&A Any questions? 30
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.